From 626f6876d5d0d6d8d8139b57cea64ef4fd3c45f0 Mon Sep 17 00:00:00 2001 From: TomGoodIdea <108272452+TomGoodIdea@users.noreply.github.com> Date: Mon, 11 Sep 2023 04:58:08 +0200 Subject: [PATCH 01/79] feat(mechanics): Governments can now fine the player for illegal ships (#8677) --- source/Government.cpp | 102 +++++++++++++++++++++++++++++++++--------- source/Government.h | 10 +++-- source/Politics.cpp | 14 +++++- 3 files changed, 101 insertions(+), 25 deletions(-) diff --git a/source/Government.cpp b/source/Government.cpp index ecb7d4892ac9..4c9d0f9a2f5d 100644 --- a/source/Government.cpp +++ b/source/Government.cpp @@ -175,9 +175,15 @@ void Government::Load(const DataNode &node) else if(key == "foreign penalties for") useForeignPenaltiesFor.clear(); else if(key == "illegals") - illegals.clear(); + { + illegalOutfits.clear(); + illegalShips.clear(); + } else if(key == "atrocities") - atrocities.clear(); + { + atrocityOutfits.clear(); + atrocityShips.clear(); + } else child.PrintTrace("Cannot \"remove\" the given key:"); @@ -268,37 +274,68 @@ void Government::Load(const DataNode &node) else if(key == "illegals") { if(!add) - illegals.clear(); + { + illegalOutfits.clear(); + illegalShips.clear(); + } for(const DataNode &grand : child) if(grand.Size() >= 2) { - if(grand.Token(0) == "ignore") - illegals[GameData::Outfits().Get(grand.Token(1))] = 0; + if(grand.Token(0) == "remove") + { + if(grand.Size() >= 3 && grand.Token(1) == "ship") + { + if(!illegalShips.erase(grand.Token(2))) + grand.PrintTrace("Invalid remove, ship not found in existing illegals:"); + } + else if(!illegalOutfits.erase(GameData::Outfits().Get(grand.Token(1)))) + grand.PrintTrace("Invalid remove, outfit not found in existing illegals:"); + } + else if(grand.Token(0) == "ignore") + { + if(grand.Size() >= 3 && grand.Token(1) == "ship") + illegalShips[grand.Token(2)] = 0; + else + illegalOutfits[GameData::Outfits().Get(grand.Token(1))] = 0; + } + else if(grand.Size() >= 3 && grand.Token(0) == "ship") + illegalShips[grand.Token(1)] = grand.Value(2); else - illegals[GameData::Outfits().Get(grand.Token(0))] = grand.Value(1); + illegalOutfits[GameData::Outfits().Get(grand.Token(0))] = grand.Value(1); } - else if(grand.Size() >= 3 && grand.Token(0) == "remove") - { - if(!illegals.erase(GameData::Outfits().Get(grand.Token(1)))) - grand.PrintTrace("Invalid remove, outfit not found in existing illegals:"); - } - else - grand.PrintTrace("Skipping unrecognized attribute:"); } else if(key == "atrocities") { if(!add) - atrocities.clear(); + { + atrocityOutfits.clear(); + atrocityShips.clear(); + } for(const DataNode &grand : child) if(grand.Size() >= 2) { - if(grand.Token(0) == "remove" && !atrocities.erase(GameData::Outfits().Get(grand.Token(1)))) - grand.PrintTrace("Invalid remove, outfit not found in existing atrocities:"); + if(grand.Token(0) == "remove") + { + if(grand.Size() >= 3 && grand.Token(1) == "ship") + { + if(!atrocityShips.erase(grand.Token(2))) + grand.PrintTrace("Invalid remove, ship not found in existing atrocities:"); + } + else if(!atrocityOutfits.erase(GameData::Outfits().Get(grand.Token(1)))) + grand.PrintTrace("Invalid remove, outfit not found in existing atrocities:"); + } else if(grand.Token(0) == "ignore") - atrocities[GameData::Outfits().Get(grand.Token(1))] = false; + { + if(grand.Size() >= 3 && grand.Token(1) == "ship") + atrocityShips[grand.Token(2)] = false; + else + atrocityOutfits[GameData::Outfits().Get(grand.Token(1))] = false; + } + else if(grand.Token(0) == "ship") + atrocityShips[grand.Token(1)] = true; } else - atrocities[GameData::Outfits().Get(grand.Token(0))] = true; + atrocityOutfits[GameData::Outfits().Get(grand.Token(0))] = true; } else if(key == "enforces" && child.HasChildren()) enforcementZones.emplace_back(child); @@ -611,20 +648,29 @@ string Government::Fine(PlayerInfo &player, int scan, const Ship *target, double bool Government::Condemns(const Outfit *outfit) const { - const auto isAtrocity = atrocities.find(outfit); - bool found = isAtrocity != atrocities.cend(); + const auto isAtrocity = atrocityOutfits.find(outfit); + bool found = isAtrocity != atrocityOutfits.cend(); return (found && isAtrocity->second) || (!found && outfit->Get("atrocity") > 0.); } +bool Government::Condemns(const Ship *ship) const +{ + const auto isAtrocity = atrocityShips.find(ship->TrueModelName()); + bool found = isAtrocity != atrocityShips.cend(); + return (found && isAtrocity->second) || (!found && ship->BaseAttributes().Get("atrocity") > 0.); +} + + + int Government::Fines(const Outfit *outfit) const { // If this government doesn't fine anything it won't fine this outfit. if(!fine) return 0; - for(const auto &it : illegals) + for(const auto &it : illegalOutfits) if(it.first == outfit) return it.second; return outfit->Get("illegal"); @@ -632,6 +678,20 @@ int Government::Fines(const Outfit *outfit) const +int Government::Fines(const Ship *ship) const +{ + // If this government doesn't fine anything it won't fine this ship. + if(!fine) + return 0; + + for(const auto &it : illegalShips) + if(it.first == ship->TrueModelName()) + return it.second; + return ship->BaseAttributes().Get("illegal"); +} + + + bool Government::FinesContents(const Ship *ship) const { for(auto &it : ship->Outfits()) diff --git a/source/Government.h b/source/Government.h index 5e51614b1d2f..8656d71b797a 100644 --- a/source/Government.h +++ b/source/Government.h @@ -122,8 +122,10 @@ class Government { std::string Fine(PlayerInfo &player, int scan = 0, const Ship *target = nullptr, double security = 1.) const; // Check to see if the items are condemnable (atrocities) or warrant a fine. bool Condemns(const Outfit *outfit) const; - // Returns the fine for given outfit for this government. + bool Condemns(const Ship *ship) const; + // Returns the fine for given item for this government. int Fines(const Outfit *outfit) const; + int Fines(const Ship *ship) const; // Check if given ship has illegal outfits or cargo. bool FinesContents(const Ship *ship) const; @@ -155,8 +157,10 @@ class Government { double reputationMax = std::numeric_limits::max(); double reputationMin = std::numeric_limits::lowest(); std::map penaltyFor; - std::map illegals; - std::map atrocities; + std::map illegalOutfits; + std::map illegalShips; + std::map atrocityOutfits; + std::map atrocityShips; double bribe = 0.; double fine = 1.; std::vector enforcementZones; diff --git a/source/Politics.cpp b/source/Politics.cpp index 680224daf61e..c651e7061b11 100644 --- a/source/Politics.cpp +++ b/source/Politics.cpp @@ -286,6 +286,7 @@ string Politics::Fine(PlayerInfo &player, const Government *gov, int scan, const } } if((!scan || (scan & ShipEvent::SCAN_OUTFITS)) && !EvadesOutfitScan(*ship)) + { for(const auto &it : ship->Outfits()) if(it.second) { @@ -298,9 +299,20 @@ string Politics::Fine(PlayerInfo &player, const Government *gov, int scan, const reason = " for having illegal outfits installed on your ship."; } } + + int shipFine = gov->Fines(ship.get()); + if(gov->Condemns(ship.get())) + shipFine = -1; + if((shipFine > maxFine && maxFine >= 0) || shipFine < 0) + { + maxFine = shipFine; + reason = " for flying an illegal ship."; + } + } if(failedMissions && maxFine > 0) { - reason += "\n\tYou failed " + Format::Number(failedMissions) + ((failedMissions > 1) ? " missions" : " mission") + reason += "\n\tYou failed " + Format::Number(failedMissions) + + ((failedMissions > 1) ? " missions" : " mission") + " after your illegal cargo was discovered."; } } From d19bb7d2cb76614c24f56f9b782924d02dba8550 Mon Sep 17 00:00:00 2001 From: warp-core Date: Mon, 11 Sep 2023 16:55:33 +0100 Subject: [PATCH 02/79] fix(ui): Fix plugin name overflow in plugin list (#9292) --- source/PreferencesPanel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/PreferencesPanel.cpp b/source/PreferencesPanel.cpp index ebe8dd89187c..e88458b1b789 100644 --- a/source/PreferencesPanel.cpp +++ b/source/PreferencesPanel.cpp @@ -816,7 +816,7 @@ void PreferencesPanel::DrawPlugins() const Sprite *box[2] = { SpriteSet::Get("ui/unchecked"), SpriteSet::Get("ui/checked") }; - const int MAX_TEXT_WIDTH = 230; + const int MAX_TEXT_WIDTH = 210; Table table; table.AddColumn(-115, {MAX_TEXT_WIDTH, Truncate::MIDDLE}); table.SetUnderline(-120, 100); From b46c56b7c84ee8faeb06950161fe160d8990ec2b Mon Sep 17 00:00:00 2001 From: TomGoodIdea <108272452+TomGoodIdea@users.noreply.github.com> Date: Mon, 11 Sep 2023 19:47:23 +0200 Subject: [PATCH 03/79] feat(ux): Show all applicable takeoff warnings (#9189) Co-authored-by: Nick --- source/PlanetPanel.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/source/PlanetPanel.cpp b/source/PlanetPanel.cpp index 56f01e9e7caa..de7150638ed2 100644 --- a/source/PlanetPanel.cpp +++ b/source/PlanetPanel.cpp @@ -333,48 +333,48 @@ void PlanetPanel::CheckWarningsAndTakeOff() if(nonJumpCount > 0 || missionCargoToSell > 0 || outfitsToSell > 0 || commoditiesToSell > 0 || overbooked > 0) { ostringstream out; + out << "If you take off now, you will:"; + // Warn about missions that will fail on takeoff. if(missionCargoToSell > 0 || overbooked > 0) { - const bool both = (missionCargoToSell > 0 && overbooked > 0); - out << "If you take off now, you will abort a mission due to not having enough "; + out << "\n- abort a mission due to not having enough "; if(overbooked > 0) { out << "bunks available for " << overbooked; out << (overbooked > 1 ? " of the passengers" : " passenger"); - out << (both ? " and not having enough " : "."); + out << (missionCargoToSell > 0 ? " and not having enough " : "."); } if(missionCargoToSell > 0) - out << "cargo space to hold " << Format::CargoString(missionCargoToSell, "your mission cargo") << "."; + out << "cargo space to hold " << Format::CargoString(missionCargoToSell, "mission cargo."); } // Warn about outfits that can't be carried. - else if(outfitsToSell > 0) + if(outfitsToSell > 0) { - out << "If you take off now, you will "; + out << "\n- "; out << (planet.HasOutfitter() ? "store " : "sell ") << outfitsToSell << " outfit"; out << (outfitsToSell > 1 ? "s" : ""); out << " that none of your ships can hold."; } // Warn about ships that won't travel with you. - else if(nonJumpCount > 0) + if(nonJumpCount > 0) { - out << "If you take off now you will launch with "; + out << "\n- launch with "; if(nonJumpCount == 1) out << "a ship"; else out << nonJumpCount << " ships"; out << " that will not be able to leave the system."; } - // Warn about non-commodity cargo you will have to sell. - else + // Warn about commodities you will have to sell. + if(commoditiesToSell > 0) { - out << "If you take off now you will have to sell "; - out << Format::CargoString(commoditiesToSell, "cargo"); + out << "\n- sell " << Format::CargoString(commoditiesToSell, "cargo"); out << " that you do not have space for."; } - out << " Are you sure you want to continue?"; + out << "\nAre you sure you want to continue?"; GetUI()->Push(new Dialog(this, &PlanetPanel::WarningsDialogCallback, out.str())); return; } From 003d093ac6c22f63522d094ec1642e3117dbd96b Mon Sep 17 00:00:00 2001 From: tibetiroka <68112292+tibetiroka@users.noreply.github.com> Date: Mon, 11 Sep 2023 20:06:22 +0200 Subject: [PATCH 04/79] fix(cd): Don't skip upload to continuous when partially failed (#9283) --- .github/workflows/cd.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml index 66e6b5335b4e..1e83f3cb151d 100644 --- a/.github/workflows/cd.yaml +++ b/.github/workflows/cd.yaml @@ -170,6 +170,7 @@ jobs: with: path: ${{ github.workspace }} # This will download all files to e.g `./EndlessSky-win64.zip/EndlessSky-win64.zip` - name: Add ${{ env.OUTPUT_APPIMAGE }} to release tag + continue-on-error: true run: | github-release upload \ --tag continuous \ @@ -177,6 +178,7 @@ jobs: --name ${{ env.OUTPUT_APPIMAGE }} \ --file ${{ env.OUTPUT_APPIMAGE }}/${{ env.OUTPUT_APPIMAGE }} - name: Add ${{ env.OUTPUT_WINDOWS }} to release tag + continue-on-error: true run: | github-release upload \ --tag continuous \ From 430693de28a66b5bfb10db87865e15ed053212ea Mon Sep 17 00:00:00 2001 From: warp-core Date: Wed, 13 Sep 2023 22:24:16 +0100 Subject: [PATCH 05/79] feat(ux): Clear the destination planet if the travel plan changed (#9291) --- source/MapPanel.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/MapPanel.cpp b/source/MapPanel.cpp index 487bf10f901f..5aea71eaef49 100644 --- a/source/MapPanel.cpp +++ b/source/MapPanel.cpp @@ -789,6 +789,10 @@ void MapPanel::Select(const System *system) if(isJumping) plan.push_back(source); } + + // Reset the travel destination if the final system in the travel plan has changed. + if(!plan.empty()) + player.SetTravelDestination(nullptr); } From 1d882fcd41376ee81cced57e533c11e596a72ccc Mon Sep 17 00:00:00 2001 From: Hurleveur <94366726+Hurleveur@users.noreply.github.com> Date: Fri, 15 Sep 2023 05:14:14 +0500 Subject: [PATCH 06/79] feat(enhancement): Allow governments to define location filters that restrict their fleets from traveling there (#6489) --- data/governments.txt | 6 +++++ source/AI.cpp | 11 +++++++- source/Fleet.cpp | 27 ++++++++++++++++--- source/Government.cpp | 23 ++++++++++++++++ source/Government.h | 5 ++++ source/Personality.cpp | 9 +++++++ source/Personality.h | 3 ++- source/Politics.cpp | 5 ++-- .../data/tests/tests_capture_override.txt | 2 +- 9 files changed, 81 insertions(+), 10 deletions(-) diff --git a/data/governments.txt b/data/governments.txt index f748cf9251d9..14f4bdf15a03 100644 --- a/data/governments.txt +++ b/data/governments.txt @@ -427,6 +427,8 @@ government "Hai" "Elenctic Commune" .1 "penalty for" assist -.15 + "travel restrictions" + system "Wah Yoot" "bribe" .2 "friendly hail" "friendly hai" "friendly disabled hail" "friendly disabled hai" @@ -478,6 +480,8 @@ government "Hai Merchant" "custom penalties for" "Hai (Unfettered)" capture 0 + "travel restrictions" + system "Wah Yoot" "bribe" .02 "friendly hail" "friendly hai" "friendly disabled hail" "friendly disabled hai" @@ -522,6 +526,8 @@ government "Hai Merchant (Human)" "Hai (Friendly Unfettered)" .1 "Hai (Unfettered Civilians)" .1 "Merchant" .01 + "travel restrictions" + system "Wah Yoot" "bribe" .02 "friendly hail" "friendly civilian" "hostile hail" "hostile civilian" diff --git a/source/AI.cpp b/source/AI.cpp index aa5aa0754e76..a009b16e153f 100644 --- a/source/AI.cpp +++ b/source/AI.cpp @@ -1694,8 +1694,14 @@ void AI::MoveIndependent(Ship &ship, Command &command) const ? origin->JumpNeighbors(ship.JumpNavigation().JumpRange()) : origin->Links(); if(jumps) { + bool unrestricted = ship.GetPersonality().IsUnrestricted(); for(const System *link : links) { + if(!unrestricted && gov->IsRestrictedFrom(*link)) + { + systemWeights.push_back(0); + continue; + } // Prefer systems in the direction we're facing. Point direction = link->Position() - origin->Position(); int weight = static_cast( @@ -2760,7 +2766,10 @@ void AI::DoSurveillance(Ship &ship, Command &command, shared_ptr &target) { const auto &links = ship.JumpNavigation().HasJumpDrive() ? system->JumpNeighbors(ship.JumpNavigation().JumpRange()) : system->Links(); - targetSystems.insert(targetSystems.end(), links.begin(), links.end()); + bool unrestricted = ship.GetPersonality().IsUnrestricted(); + for(const System *link : links) + if(unrestricted || !gov->IsRestrictedFrom(*link)) + targetSystems.push_back(link); } unsigned total = targetShips.size() + targetPlanets.size() + targetSystems.size(); diff --git a/source/Fleet.cpp b/source/Fleet.cpp index 53ba9dc885e1..62412aaa2126 100644 --- a/source/Fleet.cpp +++ b/source/Fleet.cpp @@ -227,6 +227,7 @@ void Fleet::Enter(const System &system, list> &ships, const Pla if(ship->JumpNavigation().HasHyperdrive()) hasHyper = true; } + const bool unrestricted = personality.IsUnrestricted(); // Don't try to make a fleet "enter" from another system if none of the // ships have jump drives. if(hasJump || hasHyper) @@ -234,6 +235,8 @@ void Fleet::Enter(const System &system, list> &ships, const Pla bool isWelcomeHere = !system.GetGovernment()->IsEnemy(government); for(const System *neighbor : (hasJump ? system.JumpNeighbors(jumpDistance) : system.Links())) { + if(!unrestricted && government->IsRestrictedFrom(*neighbor)) + continue; // If this ship is not "welcome" in the current system, prefer to have // it enter from a system that is friendly to it. (This is for realism, // so attack fleets don't come from what ought to be a safe direction.) @@ -249,6 +252,7 @@ void Fleet::Enter(const System &system, list> &ships, const Pla if(!personality.IsSurveillance()) for(const StellarObject &object : system.Objects()) if(object.HasValidPlanet() && object.GetPlanet()->HasSpaceport() + && (unrestricted || !government->IsRestrictedFrom(*object.GetPlanet())) && !object.GetPlanet()->GetGovernment()->IsEnemy(government)) stellarVector.push_back(&object); @@ -259,7 +263,9 @@ void Fleet::Enter(const System &system, list> &ships, const Pla // Prefer to launch from inhabited planets, but launch from // uninhabited ones if there is no other option. for(const StellarObject &object : system.Objects()) - if(object.HasValidPlanet() && !object.GetPlanet()->GetGovernment()->IsEnemy(government)) + if(object.HasValidPlanet() + && (unrestricted || !government->IsRestrictedFrom(*object.GetPlanet())) + && !object.GetPlanet()->GetGovernment()->IsEnemy(government)) stellarVector.push_back(&object); options = stellarVector.size(); if(!options) @@ -420,7 +426,15 @@ void Fleet::Place(const System &system, list> &ships, bool carr // Do the randomization to make a ship enter or be in the given system. const System *Fleet::Enter(const System &system, Ship &ship, const System *source) { - if(system.Links().empty() || (source && !system.Links().count(source))) + bool unrestricted = ship.GetPersonality().IsUnrestricted(); + bool canEnter = (source != nullptr || unrestricted || any_of(system.Links().begin(), system.Links().end(), + [&ship](const System *link) noexcept -> bool + { + return !ship.GetGovernment()->IsRestrictedFrom(*link); + } + )); + + if(!canEnter || system.Links().empty() || (source && !system.Links().count(source))) { Place(system, ship); return &system; @@ -429,8 +443,13 @@ const System *Fleet::Enter(const System &system, Ship &ship, const System *sourc // Choose which system this ship is coming from. if(!source) { - auto it = system.Links().cbegin(); - advance(it, Random::Int(system.Links().size())); + vector validSystems; + const Government *gov = ship.GetGovernment(); + for(const System *link : system.Links()) + if(unrestricted || !gov->IsRestrictedFrom(*link)) + validSystems.emplace_back(link); + auto it = validSystems.cbegin(); + advance(it, Random::Int(validSystems.size())); source = *it; } diff --git a/source/Government.cpp b/source/Government.cpp index 4c9d0f9a2f5d..16bdbc9d52ea 100644 --- a/source/Government.cpp +++ b/source/Government.cpp @@ -137,6 +137,8 @@ void Government::Load(const DataNode &node) { if(key == "provoked on scan") provokedOnScan = false; + else if(key == "travel restrictions") + travelRestrictions = LocationFilter{}; else if(key == "reputation") { for(const DataNode &grand : child) @@ -341,6 +343,13 @@ void Government::Load(const DataNode &node) enforcementZones.emplace_back(child); else if(key == "provoked on scan") provokedOnScan = true; + else if(key == "travel restrictions" && child.HasChildren()) + { + if(add) + travelRestrictions.Load(child); + else + travelRestrictions = LocationFilter(child); + } else if(key == "foreign penalties for") for(const DataNode &grand : child) useForeignPenaltiesFor.insert(GameData::Governments().Get(grand.Token(0))->id); @@ -757,3 +766,17 @@ bool Government::IsProvokedOnScan() const { return provokedOnScan; } + + + +bool Government::IsRestrictedFrom(const System &system) const +{ + return !travelRestrictions.IsEmpty() && travelRestrictions.Matches(&system); +} + + + +bool Government::IsRestrictedFrom(const Planet &planet) const +{ + return !travelRestrictions.IsEmpty() && travelRestrictions.Matches(&planet); +} diff --git a/source/Government.h b/source/Government.h index 8656d71b797a..d41380172238 100644 --- a/source/Government.h +++ b/source/Government.h @@ -142,6 +142,10 @@ class Government { bool IsProvokedOnScan() const; + // Determine if ships from this government can travel to the given system or planet. + bool IsRestrictedFrom(const System &system) const; + bool IsRestrictedFrom(const Planet &planet) const; + private: unsigned id; @@ -164,6 +168,7 @@ class Government { double bribe = 0.; double fine = 1.; std::vector enforcementZones; + LocationFilter travelRestrictions; const Conversation *deathSentence = nullptr; const Phrase *friendlyHail = nullptr; const Phrase *friendlyDisabledHail = nullptr; diff --git a/source/Personality.cpp b/source/Personality.cpp index f483e7b67417..6b12d0d871f5 100644 --- a/source/Personality.cpp +++ b/source/Personality.cpp @@ -61,6 +61,7 @@ namespace { DARING, SECRETIVE, RAMMING, + UNRESTRICTED, DECLOAKED, // This must be last so it can be used for bounds checking. @@ -101,6 +102,7 @@ namespace { {"daring", DARING}, {"secretive", SECRETIVE}, {"ramming", RAMMING}, + {"unrestricted", UNRESTRICTED}, {"decloaked", DECLOAKED} }; @@ -255,6 +257,13 @@ bool Personality::IsUnconstrained() const +bool Personality::IsUnrestricted() const +{ + return flags.test(UNRESTRICTED); +} + + + bool Personality::IsCoward() const { return flags.test(COWARD); diff --git a/source/Personality.h b/source/Personality.h index 1410bed13eaf..2776281fd4c0 100644 --- a/source/Personality.h +++ b/source/Personality.h @@ -53,6 +53,7 @@ class Personality { bool Plunders() const; bool IsVindictive() const; bool IsUnconstrained() const; + bool IsUnrestricted() const; bool IsCoward() const; bool IsAppeasing() const; bool IsOpportunistic() const; @@ -99,7 +100,7 @@ class Personality { private: // Make sure this matches the number of items in PersonalityTrait, // or the build will fail. - static const int PERSONALITY_COUNT = 34; + static const int PERSONALITY_COUNT = 35; bool isDefined = false; diff --git a/source/Politics.cpp b/source/Politics.cpp index c651e7061b11..51f449529eae 100644 --- a/source/Politics.cpp +++ b/source/Politics.cpp @@ -166,12 +166,11 @@ bool Politics::CanLand(const Ship &ship, const Planet *planet) const { if(!planet || !planet->GetSystem()) return false; - if(!planet->IsInhabited()) - return true; const Government *gov = ship.GetGovernment(); if(!gov->IsPlayer()) - return !IsEnemy(gov, planet->GetGovernment()); + return (ship.GetPersonality().IsUnrestricted() || !gov->IsRestrictedFrom(*planet)) && + (!planet->IsInhabited() || !IsEnemy(gov, planet->GetGovernment())); return CanLand(planet); } diff --git a/tests/integration/config/plugins/integration-tests/data/tests/tests_capture_override.txt b/tests/integration/config/plugins/integration-tests/data/tests/tests_capture_override.txt index 5e4d1e94dda3..7313a77c4a56 100644 --- a/tests/integration/config/plugins/integration-tests/data/tests/tests_capture_override.txt +++ b/tests/integration/config/plugins/integration-tests/data/tests/tests_capture_override.txt @@ -114,7 +114,7 @@ test "Capture Uncapturable With Capturable Override" inject "Capture Uncapturable With Capturable Override Mission" inject "Capture Uncapturable With Capturable Override Save" call "Load First Savegame" - watchdog 6000 + watchdog 8000 # to make sure we can capture assert "reputation: Quarg" < 0 From e67074735e776c466893f212e7c795ed69c1f3d1 Mon Sep 17 00:00:00 2001 From: warp-core Date: Sat, 16 Sep 2023 23:28:43 +0100 Subject: [PATCH 07/79] fix(content): Fix "Trash Fire Crops" source location filter (#9297) --- data/human/culture conversations.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/human/culture conversations.txt b/data/human/culture conversations.txt index 25fd455a817c..f5c65306c087 100644 --- a/data/human/culture conversations.txt +++ b/data/human/culture conversations.txt @@ -143,7 +143,8 @@ mission "Trash Fire Crops" minor source government "Republic" - attributes "dirt belt" "farming" + attributes "dirt belt" + attributes "farming" not attributes "station" to offer random < 1 From 21adffc6e5b751a781030e8d790c4510fec03cd5 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 17 Sep 2023 00:31:33 +0200 Subject: [PATCH 08/79] refactor: Remove unused #includes (#9266) --- source/BoardingPanel.cpp | 1 - source/Body.cpp | 1 - source/DrawList.cpp | 1 - source/Engine.cpp | 2 -- source/EscortDisplay.cpp | 6 ------ source/Fleet.cpp | 1 - source/FormationPattern.cpp | 1 - source/GameAction.cpp | 1 - source/GameData.cpp | 2 -- source/GameEvent.cpp | 1 - source/GameLoadingPanel.cpp | 2 -- source/HailPanel.cpp | 1 - source/HiringPanel.cpp | 1 - source/LoadPanel.cpp | 3 --- source/MainPanel.cpp | 1 - source/MapPlanetCard.cpp | 1 - source/MapSalesPanel.cpp | 3 --- source/Minable.cpp | 1 - source/MissionAction.cpp | 1 - source/MissionPanel.cpp | 1 - source/NPC.cpp | 1 - source/PlayerInfo.cpp | 1 - source/Plugins.cpp | 1 - source/Ship.cpp | 1 - source/ShipJumpNavigation.cpp | 1 - source/ShipyardPanel.cpp | 1 - source/Sound.cpp | 1 - source/SpriteQueue.cpp | 2 -- source/StarField.cpp | 1 - source/StartConditions.cpp | 1 - source/StartConditionsPanel.cpp | 1 - source/TextReplacements.cpp | 1 - source/UniverseObjects.cpp | 9 --------- source/main.cpp | 3 --- 34 files changed, 57 deletions(-) diff --git a/source/BoardingPanel.cpp b/source/BoardingPanel.cpp index 3b11ab738579..a07aa166999a 100644 --- a/source/BoardingPanel.cpp +++ b/source/BoardingPanel.cpp @@ -28,7 +28,6 @@ this program. If not, see . #include "Government.h" #include "Information.h" #include "Interface.h" -#include "Messages.h" #include "PlayerInfo.h" #include "Preferences.h" #include "Random.h" diff --git a/source/Body.cpp b/source/Body.cpp index d6d80270a1f2..7b4643876190 100644 --- a/source/Body.cpp +++ b/source/Body.cpp @@ -21,7 +21,6 @@ this program. If not, see . #include "Mask.h" #include "MaskManager.h" #include "Random.h" -#include "Screen.h" #include "Sprite.h" #include "SpriteSet.h" diff --git a/source/DrawList.cpp b/source/DrawList.cpp index ac1db21960e2..2638e8487748 100644 --- a/source/DrawList.cpp +++ b/source/DrawList.cpp @@ -19,7 +19,6 @@ this program. If not, see . #include "Preferences.h" #include "Screen.h" #include "Sprite.h" -#include "SpriteSet.h" #include "SpriteShader.h" #include diff --git a/source/Engine.cpp b/source/Engine.cpp index e5ea109ee093..b1f596d23a7c 100644 --- a/source/Engine.cpp +++ b/source/Engine.cpp @@ -44,12 +44,10 @@ this program. If not, see . #include "NPC.h" #include "OutlineShader.h" #include "Person.h" -#include "pi.h" #include "Planet.h" #include "PlanetLabel.h" #include "PlayerInfo.h" #include "PointerShader.h" -#include "Politics.h" #include "Preferences.h" #include "Projectile.h" #include "Random.h" diff --git a/source/EscortDisplay.cpp b/source/EscortDisplay.cpp index 2458cdbf1032..403440d43829 100644 --- a/source/EscortDisplay.cpp +++ b/source/EscortDisplay.cpp @@ -16,17 +16,11 @@ this program. If not, see . #include "EscortDisplay.h" #include "Color.h" -#include "text/DisplayText.h" -#include "text/Font.h" -#include "text/FontSet.h" #include "GameData.h" #include "Government.h" #include "Information.h" #include "Interface.h" -#include "LineShader.h" -#include "OutlineShader.h" #include "Point.h" -#include "PointerShader.h" #include "Rectangle.h" #include "Ship.h" #include "Sprite.h" diff --git a/source/Fleet.cpp b/source/Fleet.cpp index 62412aaa2126..a591b39c15a0 100644 --- a/source/Fleet.cpp +++ b/source/Fleet.cpp @@ -20,7 +20,6 @@ this program. If not, see . #include "Government.h" #include "Logger.h" #include "Phrase.h" -#include "pi.h" #include "Planet.h" #include "Random.h" #include "Ship.h" diff --git a/source/FormationPattern.cpp b/source/FormationPattern.cpp index 8fa6fdc61bd4..ec0e6202a527 100644 --- a/source/FormationPattern.cpp +++ b/source/FormationPattern.cpp @@ -15,7 +15,6 @@ this program. If not, see . #include "FormationPattern.h" -#include "Angle.h" #include "DataNode.h" #include diff --git a/source/GameAction.cpp b/source/GameAction.cpp index b281522d7fcc..11c28c77581d 100644 --- a/source/GameAction.cpp +++ b/source/GameAction.cpp @@ -18,7 +18,6 @@ this program. If not, see . #include "DataNode.h" #include "DataWriter.h" #include "Dialog.h" -#include "EsUuid.h" #include "text/Format.h" #include "GameData.h" #include "GameEvent.h" diff --git a/source/GameData.cpp b/source/GameData.cpp index b8e03bb4db1d..03ceecd3a886 100644 --- a/source/GameData.cpp +++ b/source/GameData.cpp @@ -22,7 +22,6 @@ this program. If not, see . #include "Command.h" #include "ConditionsStore.h" #include "Conversation.h" -#include "DataFile.h" #include "DataNode.h" #include "DataWriter.h" #include "Effect.h" @@ -52,7 +51,6 @@ this program. If not, see . #include "Plugins.h" #include "PointerShader.h" #include "Politics.h" -#include "Random.h" #include "RingShader.h" #include "Ship.h" #include "Sprite.h" diff --git a/source/GameEvent.cpp b/source/GameEvent.cpp index 94450c05708b..d3e45715261b 100644 --- a/source/GameEvent.cpp +++ b/source/GameEvent.cpp @@ -17,7 +17,6 @@ this program. If not, see . #include "DataWriter.h" #include "GameData.h" -#include "Government.h" #include "Planet.h" #include "PlayerInfo.h" #include "System.h" diff --git a/source/GameLoadingPanel.cpp b/source/GameLoadingPanel.cpp index ab590fd41753..b37a9204acd0 100644 --- a/source/GameLoadingPanel.cpp +++ b/source/GameLoadingPanel.cpp @@ -20,8 +20,6 @@ this program. If not, see . #include "Conversation.h" #include "ConversationPanel.h" #include "GameData.h" -#include "Information.h" -#include "Interface.h" #include "MaskManager.h" #include "MenuAnimationPanel.h" #include "MenuPanel.h" diff --git a/source/HailPanel.cpp b/source/HailPanel.cpp index 5bccc33fb404..33c570425aaa 100644 --- a/source/HailPanel.cpp +++ b/source/HailPanel.cpp @@ -26,7 +26,6 @@ this program. If not, see . #include "Information.h" #include "Interface.h" #include "Messages.h" -#include "Phrase.h" #include "Planet.h" #include "PlayerInfo.h" #include "Politics.h" diff --git a/source/HiringPanel.cpp b/source/HiringPanel.cpp index c91626154b76..32986b007a50 100644 --- a/source/HiringPanel.cpp +++ b/source/HiringPanel.cpp @@ -20,7 +20,6 @@ this program. If not, see . #include "Interface.h" #include "PlayerInfo.h" #include "Ship.h" -#include "UI.h" #include diff --git a/source/LoadPanel.cpp b/source/LoadPanel.cpp index 14281ddf1d4e..6ea7eff48f49 100644 --- a/source/LoadPanel.cpp +++ b/source/LoadPanel.cpp @@ -25,17 +25,14 @@ this program. If not, see . #include "FillShader.h" #include "text/Font.h" #include "text/FontSet.h" -#include "text/Format.h" #include "GameData.h" #include "Information.h" #include "Interface.h" #include "text/layout.hpp" #include "MainPanel.h" -#include "Messages.h" #include "PlayerInfo.h" #include "Preferences.h" #include "Rectangle.h" -#include "ShipyardPanel.h" #include "StarField.h" #include "StartConditionsPanel.h" #include "text/truncate.hpp" diff --git a/source/MainPanel.cpp b/source/MainPanel.cpp index a3bc1b7277bb..19813f2a3198 100644 --- a/source/MainPanel.cpp +++ b/source/MainPanel.cpp @@ -37,7 +37,6 @@ this program. If not, see . #include "PlayerInfo.h" #include "PlayerInfoPanel.h" #include "Preferences.h" -#include "Random.h" #include "Screen.h" #include "Ship.h" #include "ShipEvent.h" diff --git a/source/MapPlanetCard.cpp b/source/MapPlanetCard.cpp index a43e8f9f5005..430a1635b288 100644 --- a/source/MapPlanetCard.cpp +++ b/source/MapPlanetCard.cpp @@ -26,7 +26,6 @@ this program. If not, see . #include "Planet.h" #include "Point.h" #include "PointerShader.h" -#include "Politics.h" #include "Screen.h" #include "SpriteShader.h" #include "StellarObject.h" diff --git a/source/MapSalesPanel.cpp b/source/MapSalesPanel.cpp index f29d74f40d9f..5d3f80d60648 100644 --- a/source/MapSalesPanel.cpp +++ b/source/MapSalesPanel.cpp @@ -26,18 +26,15 @@ this program. If not, see . #include "Government.h" #include "ItemInfoDisplay.h" #include "text/layout.hpp" -#include "Outfit.h" #include "PlayerInfo.h" #include "Point.h" #include "PointerShader.h" #include "Preferences.h" #include "RingShader.h" #include "Screen.h" -#include "Ship.h" #include "Sprite.h" #include "SpriteSet.h" #include "SpriteShader.h" -#include "StellarObject.h" #include "System.h" #include "text/truncate.hpp" #include "UI.h" diff --git a/source/Minable.cpp b/source/Minable.cpp index e396ee24d591..88a9074193a4 100644 --- a/source/Minable.cpp +++ b/source/Minable.cpp @@ -20,7 +20,6 @@ this program. If not, see . #include "Flotsam.h" #include "text/Format.h" #include "GameData.h" -#include "Mask.h" #include "Outfit.h" #include "pi.h" #include "Projectile.h" diff --git a/source/MissionAction.cpp b/source/MissionAction.cpp index 2133571b4ac3..282dddf39f76 100644 --- a/source/MissionAction.cpp +++ b/source/MissionAction.cpp @@ -20,7 +20,6 @@ this program. If not, see . #include "DataNode.h" #include "DataWriter.h" #include "Dialog.h" -#include "EsUuid.h" #include "text/Format.h" #include "GameData.h" #include "GameEvent.h" diff --git a/source/MissionPanel.cpp b/source/MissionPanel.cpp index e01f5810c499..9a30d4176190 100644 --- a/source/MissionPanel.cpp +++ b/source/MissionPanel.cpp @@ -45,7 +45,6 @@ this program. If not, see . #include "System.h" #include "text/truncate.hpp" #include "UI.h" -#include "Wormhole.h" #include #include diff --git a/source/NPC.cpp b/source/NPC.cpp index 153f1bc68b8a..2820475c2831 100644 --- a/source/NPC.cpp +++ b/source/NPC.cpp @@ -26,7 +26,6 @@ this program. If not, see . #include "Messages.h" #include "Planet.h" #include "PlayerInfo.h" -#include "Random.h" #include "Ship.h" #include "ShipEvent.h" #include "System.h" diff --git a/source/PlayerInfo.cpp b/source/PlayerInfo.cpp index 431a22844755..f2cabc0b4bea 100644 --- a/source/PlayerInfo.cpp +++ b/source/PlayerInfo.cpp @@ -26,7 +26,6 @@ this program. If not, see . #include "text/Format.h" #include "GameData.h" #include "Government.h" -#include "Hardpoint.h" #include "Logger.h" #include "Messages.h" #include "Outfit.h" diff --git a/source/Plugins.cpp b/source/Plugins.cpp index 3f499540821b..db43d3ea9e8e 100644 --- a/source/Plugins.cpp +++ b/source/Plugins.cpp @@ -22,7 +22,6 @@ this program. If not, see . #include "Logger.h" #include -#include #include using namespace std; diff --git a/source/Ship.cpp b/source/Ship.cpp index 8cea6e88f522..376398e51c11 100644 --- a/source/Ship.cpp +++ b/source/Ship.cpp @@ -42,7 +42,6 @@ this program. If not, see . #include "SpriteSet.h" #include "StellarObject.h" #include "System.h" -#include "TextReplacements.h" #include "Visual.h" #include "Wormhole.h" diff --git a/source/ShipJumpNavigation.cpp b/source/ShipJumpNavigation.cpp index 8d061bac2c50..52e4d869c6e3 100644 --- a/source/ShipJumpNavigation.cpp +++ b/source/ShipJumpNavigation.cpp @@ -20,7 +20,6 @@ this program. If not, see . #include "System.h" #include -#include #include using namespace std; diff --git a/source/ShipyardPanel.cpp b/source/ShipyardPanel.cpp index f51ec6811773..502ed37460de 100644 --- a/source/ShipyardPanel.cpp +++ b/source/ShipyardPanel.cpp @@ -31,7 +31,6 @@ this program. If not, see . #include "Planet.h" #include "PlayerInfo.h" #include "Point.h" -#include "PointerShader.h" #include "Screen.h" #include "Ship.h" #include "Sprite.h" diff --git a/source/Sound.cpp b/source/Sound.cpp index a5fc399d9d5c..d2811e22ddf1 100644 --- a/source/Sound.cpp +++ b/source/Sound.cpp @@ -16,7 +16,6 @@ this program. If not, see . #include "Sound.h" #include "File.h" -#include "Files.h" #include diff --git a/source/SpriteQueue.cpp b/source/SpriteQueue.cpp index d6e1c307060a..c03dadc3cd1d 100644 --- a/source/SpriteQueue.cpp +++ b/source/SpriteQueue.cpp @@ -15,9 +15,7 @@ this program. If not, see . #include "SpriteQueue.h" -#include "ImageBuffer.h" #include "ImageSet.h" -#include "Mask.h" #include "Sprite.h" #include "SpriteSet.h" diff --git a/source/StarField.cpp b/source/StarField.cpp index f0c4a00d6a28..fc2f6ffbca8f 100644 --- a/source/StarField.cpp +++ b/source/StarField.cpp @@ -18,7 +18,6 @@ this program. If not, see . #include "Angle.h" #include "Body.h" #include "DrawList.h" -#include "Engine.h" #include "pi.h" #include "Point.h" #include "Preferences.h" diff --git a/source/StartConditions.cpp b/source/StartConditions.cpp index 68cd9cd1e7ba..88e027ceae8b 100644 --- a/source/StartConditions.cpp +++ b/source/StartConditions.cpp @@ -16,7 +16,6 @@ this program. If not, see . #include "StartConditions.h" #include "DataNode.h" -#include "DataWriter.h" #include "text/Format.h" #include "GameData.h" #include "Logger.h" diff --git a/source/StartConditionsPanel.cpp b/source/StartConditionsPanel.cpp index 1cd941e9709d..15f99657c1eb 100644 --- a/source/StartConditionsPanel.cpp +++ b/source/StartConditionsPanel.cpp @@ -22,7 +22,6 @@ this program. If not, see . #include "FillShader.h" #include "text/Font.h" #include "text/FontSet.h" -#include "text/Format.h" #include "GameData.h" #include "Information.h" #include "Interface.h" diff --git a/source/TextReplacements.cpp b/source/TextReplacements.cpp index 4ab7a2e58dfc..c9d83ce0b39a 100644 --- a/source/TextReplacements.cpp +++ b/source/TextReplacements.cpp @@ -18,7 +18,6 @@ this program. If not, see . #include "ConditionSet.h" #include "ConditionsStore.h" #include "DataNode.h" -#include "PlayerInfo.h" #include diff --git a/source/UniverseObjects.cpp b/source/UniverseObjects.cpp index 582fae8d645b..7fea6dfe86cf 100644 --- a/source/UniverseObjects.cpp +++ b/source/UniverseObjects.cpp @@ -18,19 +18,10 @@ this program. If not, see . #include "DataFile.h" #include "DataNode.h" #include "Files.h" -#include "text/FontSet.h" -#include "ImageSet.h" #include "Information.h" #include "Logger.h" -#include "MaskManager.h" -#include "Music.h" -#include "PlayerInfo.h" -#include "Politics.h" -#include "Random.h" #include "Sprite.h" -#include "SpriteQueue.h" #include "SpriteSet.h" -#include "StarField.h" #include #include diff --git a/source/main.cpp b/source/main.cpp index 59149c070f57..da56ef5466e6 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -21,15 +21,12 @@ this program. If not, see . #include "ConversationPanel.h" #include "DataFile.h" #include "DataNode.h" -#include "DataWriter.h" -#include "Dialog.h" #include "Files.h" #include "text/Font.h" #include "FrameTimer.h" #include "GameData.h" #include "GameLoadingPanel.h" #include "GameWindow.h" -#include "Hardpoint.h" #include "Logger.h" #include "MenuPanel.h" #include "Panel.h" From d0ab6f50fba855ebbdb5e4e4d7d62743dafea3e8 Mon Sep 17 00:00:00 2001 From: warp-core Date: Sun, 17 Sep 2023 00:39:26 +0100 Subject: [PATCH 09/79] fix(content): Use correct brown dwarf sprite in system Ae Il A-3 (#9302) --- data/map systems.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/map systems.txt b/data/map systems.txt index 877bb506ffce..82379497a530 100644 --- a/data/map systems.txt +++ b/data/map systems.txt @@ -2448,7 +2448,7 @@ system "Ae Il A-3" period 60 offset 20 object - sprite planet/browndwarf-l-rouge + sprite planet/browndwarf-l distance 9784.96 period 1100 offset 270 From 7379ea7c27356ded3bb8ffc01e89adbb2bf7ff32 Mon Sep 17 00:00:00 2001 From: Timothy Date: Sun, 17 Sep 2023 22:50:01 -0400 Subject: [PATCH 10/79] feat(content): Add new pre-war missions that send the player south (#9097) --- .codespell.exclude | 6 + data/human/human missions.txt | 477 ++++++++++++++++++++++++++++++++++ 2 files changed, 483 insertions(+) diff --git a/.codespell.exclude b/.codespell.exclude index beb179ebe55b..999ebccda702 100644 --- a/.codespell.exclude +++ b/.codespell.exclude @@ -92,3 +92,9 @@ planet "Sies Upi" ` "No wait! Luf e ow, vai, luf e eh?"` "Vai" "Mis" + ` Torrey breaks out into a brilliant grin. "Well, that's great news, then. You'll find Irene at the militia base on - that's Gunnery Sergeant Irene Brower. I do appreciate this. You'll be paid upon receipt of the package, too, lest you think my appreciation is all I can give."` + `You arrive at the militia base on , and ask at the gate for Gunnery Sergeant Irene Brower. After a few minutes, a compact young woman with close-cropped blonde hair appears and walks over. When she sees the package at your feet, her face splits into a lopsided grin and her steps quicken. "I see you've brought me a package; this must be from Torrey! She said she was sending something."` + ` Staying carefully out of the way of the hurrying corpsmen and nurses, you watch as the triage tent begins to fill up with the walking wounded, the not-so-walking wounded... and a few gurneys that someone pulls a sheet over not long after they arrive. Before long, you spot someone you think you recognize: Irene Brower, the gunnery sergeant you delivered a care package to before the war.` + ` MSGT BROWER, IRENE` + `As you leave the quartermaster's building, you spot a familiar face coming in the other direction: Irene Brower, the gunnery sergeant you delivered a care package to before the war, though she seems to have master sergeant insignia now. She's on crutches, with what looks like a brand-new prosthetic leg. When she spots you, her pained face brightens. "Hey, I know you! You brought me that package from Tor before. Thanks!" She shifts her weight, then winces and shifts it back.` + log "Minor People" "Torrey and Irene" `Torrey Dupont, an activist, is friends with SMDP militia NCO Irene Brower. You delivered a package for them.` diff --git a/data/human/human missions.txt b/data/human/human missions.txt index 977aa1a62c58..22a9c687a4b6 100644 --- a/data/human/human missions.txt +++ b/data/human/human missions.txt @@ -6301,6 +6301,482 @@ mission "Blind Man from Martini" clear "Blind Man from Martini: label looking" ` With that, he grabs his cane and his luggage, and follows a hospital attendant toward his daughter's room, leaving you in the reception.` +mission "Care Package to South 1" + minor + name "Care package to " + description "An activist named Torrey has asked you to take a care package to her friend, an NCO named Irene in the Southern Mutual Defense Pact militia, stationed on ." + source + government "Republic" "Syndicate" + not attributes "rim" "south" "station" + destination + attributes "rim" "south" + not government "Pirate" + not system "Alniyat" "Atria" "Han" + not planet "Glaze" + to offer + not "event: war begins" + random < 30 + cargo "care package" 1 + on offer + conversation + `Among the bustle of the spaceport, one figure catches your attention. A woman stands alone on one side of the passageway with a bubble of space around her that is maintained by sheer force of personality. She doesn't seem to be saying anything, at least. As you get closer, you notice a large package at her feet. Something about you catches her attention, and she looks you in the eye and beckons.` + choice + ` (Go over to her and find out what this is about.)` + ` (Ignore her.)` + decline + ` You make your way through the crowd to the edge of her bubble. As soon as you do, she extends her hand. "I'm Torrey. Torrey Dupont."` + ` You take the hand and shake it. " ."` + ` "I can tell you're independent captain. I would like to hire you to transport a package." Torrey indicates the box beside her with a nudge of her toe.` + choice + ` "What's in the box?"` + ` "Wouldn't it be easier and cheaper to send it via a courier service?"` + goto commercial + ` She glances down at it. "It's nothing too special - some local stuff from around here. Mostly foods and things that you just can't get made the same anywhere else."` + ` "Wouldn't it be easier and cheaper to send it via a courier service?" you ask.` + label commercial + ` Torrey gives a sardonic smile. "Well, yes; the thing is, I'm sending it to a friend who's an NCO in the militia for the Southern Mutual Defense Pact. Normally, of course, that would be fine, but... then there's who I am." She reaches into a pocket and pulls out a piece of paper - a printout of a news headline. "Protests Block Access To Council Chambers For Fourth Straight Day." Underneath the headline is a picture of Torrey holding up a sign decrying recent actions by the government.` + ` "So you see," she continues, "I'm already being watched by the Republic government. What with the rumors lately, I really don't want to do anything that would throw any suspicion onto Irene, but..." She glances down at the box. "She's really been missing some of the stuff from home, and I don't want to make her life less pleasant because of what I've been doing."` + choice + ` "All right; I'll deliver the package."` + goto deliver + ` "No; I don't support those protests, or the people who participate in them."` + ` "No, if you're being watched, then this might get me in trouble too. Sorry."` + ` Torrey grimaces, but nods. "That's understandable. Well, have a good day, then." She turns back to looking out at the passing crowds, and you head back on your way.` + decline + label deliver + ` Torrey breaks out into a brilliant grin. "Well, that's great news, then. You'll find Irene at the militia base on - that's Gunnery Sergeant Irene Brower. I do appreciate this. You'll be paid upon receipt of the package, too, lest you think my appreciation is all I can give."` + ` She picks up the package and hands it to you; it's surprisingly heavy, but doesn't seem to shift or rattle at all as you settle it in your arms to carry to your ship.` + accept + on complete + payment 7500 750 + log "Minor People" "Torrey and Irene" `Torrey Dupont, an activist, is friends with SMDP militia NCO Irene Brower. You delivered a package for them.` + conversation + `You arrive at the militia base on , and ask at the gate for Gunnery Sergeant Irene Brower. After a few minutes, a compact young woman with close-cropped blonde hair appears and walks over. When she sees the package at your feet, her face splits into a lopsided grin and her steps quicken. "I see you've brought me a package; this must be from Torrey! She said she was sending something."` + ` You nod, introduce yourself, and briefly recount your meeting with her friend on . Irene laughs. "Yep, that's her. Well, thank you so much for bringing this." She hefts the heavy box with no apparent effort, gives you a firm nod, and turns to head back into the base.` + ` Before going more than three steps, she stops and turns back to you. "Oh, sorry - I'll authorize your payment as soon as I get back to my room. I don't have it with me."` + ` Sure enough, less than five minutes later, your communicator bleeps and reports that has been credited to your account.` + +mission "Care Package to South 2a" + landing + invisible + source "Greenrock" + to offer + has "FW Pirates: Attack 2: done" + has "Care Package to South 1: done" + on offer + conversation + `As Tomek heads toward Alondo's ship, you notice some other ships landing nearby - several of which look in much worse shape. Between them is a controlled panic, with militia soldiers setting up a large tent and bringing various supplies and tables into it. After a few minutes, it becomes clear that they are setting up a makeshift triage center.` + ` Staying carefully out of the way of the hurrying corpsmen and nurses, you watch as the triage tent begins to fill up with the walking wounded, the not-so-walking wounded... and a few gurneys that someone pulls a sheet over not long after they arrive. Before long, you spot someone you think you recognize: Irene Brower, the gunnery sergeant you delivered a care package to before the war.` + ` She is lying on a stretcher placed on what appears to be a folding cafeteria table, with an IV in one arm and a makeshift bandage over the other shoulder, already soaked through with blood. The lower half of her body is covered by a bloody sheet... and by the shape the sheet makes, you can tell immediately that there's something very wrong. Her eyelids flicker for a moment, then she opens her eyes and focuses on you. "Hey... I know you. You brought me that package from Tor... thanks. Meant a lot." She attempts to raise her head, then thinks better of it, though her eyes still flick downward. "Might be... the last of home I get to see." Her eyes close again, and a pair of nurses comes over and shoos you out of the way so they can start moving Irene. As they carry her off, careful to keep her IV bag held high, you hear her start coughing, and they head to what appears to be the largest of the ships nearby.` + decline + +mission "Care Package to South 3a" + landing + invisible + to offer + has "Care Package to South 3a: offered" + has "FW Pirates: Attack 3: done" + on offer + conversation + `Now that you have a minute to breathe, you stop to check your non-urgent messages. Among them you see the casualty lists from the Battle of Greenrock.` + choice + ` (Open the message.)` + ` (Delete it unread.)` + decline + `You only have to scroll through the lists for a few seconds before you see:` + ` ` + ` MSGT BROWER, IRENE` + ` KILLED IN ACTION` + ` POSTHUMOUS MEDAL OF VALOR` + `` + ` You kill the display and turn away.` + decline + +mission "Care Package to South 2b" + landing + invisible + source "Deep" + to offer + has "Care Package to South 1: done" + has "FW Pirates: Diplomacy 4: done" + on offer + conversation + `As you leave the quartermaster's building, you spot a familiar face coming in the other direction: Irene Brower, the gunnery sergeant you delivered a care package to before the war, though she seems to have master sergeant insignia now. She's on crutches, with what looks like a brand-new prosthetic leg. When she spots you, her pained face brightens. "Hey, I know you! You brought me that package from Tor before. Thanks!" She shifts her weight, then winces and shifts it back.` + ` She notices you looking at her leg, and grins lopsidedly. "Yeah, I was a casualty of the Battle of Greenrock. My CO thought it was a good idea to follow Voigt's plan to suppress the pirates there. To be honest, I agreed with him at the time." She pauses a moment. "Now, not so sure, and not just because a blown-out shield capacitor lost me a leg. I heard what happened on Thule, both the good and the bad of it. I'm not sure force was the best answer now."` + choice + ` "I'm so sorry for your loss."` + goto sorry + ` "So... that prosthetic is very new, then?"` + goto new + ` "With that prosthetic, soon you'll have a leg up on the rest of us, eh?"` + ` She grins broadly at your pun. "Yep! Just here to get a float chair for the first few weeks of adjustment."` + goto leave + label sorry + ` She waves it off, but her face softens. "Thanks. I'm here to pick up a float chair, for the first six weeks of adjustment."` + goto leave + label new + ` She nods. "Yep, just came from getting it fitted, and gotta check in at the quartermaster's to get myself a float chair for the first six weeks of adjustment to it."` + label leave + ` "Six months of medical leave, then I'll be back in action. And hopefully assigned to ships a little less eager to jump into the thick of it when it's not really necessary, eh?"` + ` You join in her wry chuckle, then she gives you a wave with one crutch and bids you farewell.` + + +mission "Moving House 1" + minor + name "Moving House" + description "An anarchist named Kris has asked you to help them move house from to ." + source + government "Republic" "Syndicate" + not attributes "rim" "south" + destination "Lichen" + stopover + distance 3 7 + government "Syndicate" + to offer + not "event: war begins" + random < 30 + passengers 1 + cargo "personal belongings" 5 + on offer + conversation + `As you walk through the spaceport, you see someone ahead making very obvious disruptions in the flow of the crowd. They're going up to various people and talking to them, usually very briefly, before moving on to someone else. Before you know it, "someone else" is you.` + ` "You, you're a captain. Will you give me a ride? I need to get back to , pack up my things, and travel to ." Their hair is slicked back to match their sharp suit.` + choice + ` "Sure, as long as you can pay."` + goto sure + ` "No, I've got better things to do."` + ` Just like with the others, as soon as you decline, they move on to someone else.` + decline + + label sure + ` They stop in surprise, then nod briefly. "I'll be at your ship within an hour.` + ` An hour later, you see them approach the carrying a small suitcase. They've exchanged their formal appearance for a button-down shirt and skirt with their hair loose, hanging down to their shoulders. They walk right up to you and stick out a hand. "Kris Brecht."` + choice + ` (Shake their hand.)` + goto shake + ` (Just stare at their odd outfit.)` + ` You stare at Kris' unorthodox getup while they stand there with their hand out for a few beats. Then they sigh and take it back. "Will this be a problem?" They gesture to themselves.` + choice + ` "No, I was just surprised."` + goto surprised + ` "Yeah, I don't think I can carry someone like you."` + ` Their expression turns cold. "Right. I get it. Someone like me." They turn and stalk away.` + decline + + label surprised + ` Their confident demeanor returns, and they nod. "I can have that effect on people. Glad to see you're not another of those stuck-up establishment types. Well, all the rest of my stuff is on , so we'd better get going!"` + goto establishment + + label shake + ` You shake their hand. " . That's all you've got with you?"` + ` Kris nods. "All the rest of my stuff is on . I was just here for a meeting with some others who feel like I do about the establishment."` + + label establishment + choice + ` "The... establishment?"` + ` (Just let it pass.)` + goto pass + ` Kris nods again. "Yeah, y'know, The Man!` + label pass + ` "I don't support government or any of its tools, and I've heard that the South is more open to this kind of philosophy and lifestyle."` + ` Before you can say more, they walk past you onto the . "Which did you say my berth was again...?"` + accept + + on stopover + conversation + `As you traveled to , you found yourself frequently listening to Kris' opinions on the subject of governments. While they had some very good points, other times they would spend hours ranting about things that seem completely impractical and without a solid foundation. If it weren't for the fact that they were unfailingly polite otherwise, and eager to help with chores around the ship, you would've declared the cockpit off-limits.` + ` Still, you are somewhat relieved that when you arrive, both of you are too out of breath from moving furniture to talk more.` + ` You soon have it loaded up, though, and start the trip south to .` + on complete + payment + payment 5000 + log "Minor People" "Kris Brecht" `An anarchist committed enough to their ideals to move to the South in hopes of finding a less statist community.` + conversation + `At last, you reach , and Kris enthusiastically unloads their possessions into a waiting transport van. Before they disappear, they press a credit chip for into your hands and assure you that you are a valuable ally to the "anti-statist movement."` + +mission "Moving House Timer" + invisible + landing + to offer + has "Moving House 1: done" + has "event: Thule becomes independent" + on offer + event "kris gets frustrated" 20 60 + fail + +event "kris gets frustrated" + +mission "Moving House 2" + minor + description "Kris is unsatisfied on and wants your help to move to instead." + landing + name "Moving House, Again" + source + near "Atria" 1 100 + destination "Lichen" + to offer + has "event: kris gets frustrated" + has "event: Thule becomes independent" + on offer + conversation + `When you check your messages upon landing, you notice one from an unfamiliar source. At first, you think it's a scam, because it tries to redirect you through three different servers, but then you see it calls you "ally of the anti-statist movement."` + ` Sure enough, it's from Kris Brecht, the anarchist. "You have to come and get me. I can't stand living here any longer!" It includes directions to a home somewhere on where you last saw Kris, but nothing more.` + accept + on complete + conversation + `You arrive on , rent a local transport, and make your way to the location specified. When you knock on the door, Kris bursts out almost instantly. This time, they've got on a ruffly skirt, a button-down shirt, and suspenders, and their hair is in a tight bun. "Finally!" they say. "Everything's packed already; we just need to load it in and get to the spaceport."` + ` It takes much less time to load everything this time than the last time you helped Kris move, and soon they hop in the driver's seat of the van, calling to you, "I'll meet you at the spaceport in an hour or two!"` + +mission "Moving House 3" + name "Moving House, Again" + source "Lichen" + destination "Thule" + passengers 1 + cargo "personal belongings" 4 + to offer + has "Moving House 2: done" + on offer + conversation + `Kris' possessions fit more easily into your hold this time - it seems like they really do have less than before. Once they're loaded in and Kris climbs aboard, they open their mouth to begin what is sure to be another of their interminable tirades on the power of the state.` + choice + ` (Try to change the subject.)` + goto weather + ` (Just let it happen.)` + ` Surprisingly, Kris begins by talking about how uncomfortable the ever-damp weather on is, and how they'll be glad to be properly dry for the first time in weeks. This doesn't last, though, as soon talk of the planet brings up the other people there.` + goto fire + + label weather + ` You ask, "So, what is it about you can't stand? Is it the damp weather?"` + + label fire + ` A fire kindles in Kris' eyes, and a righteous fury seems to possess them. "I thought when I came here that I'd be among like-minded souls. There's barely any government to speak of here! But then when the war started, they were aaaaall sooooo delighted with the so-called Free Worlds! 'Free!' They're just another state!"` + ` Kris continues in this vein as you complete your pre-flight checks. Fortunately, they do at least mention your destination is during their rant.` + accept + on complete + payment + payment 5000 + conversation + `You arrive at Thule, and Kris once more eagerly unloads their belongings into a local transport. As with the previous journey, they were a strange combination of genuinely polite and helpful and deeply aggravating.` + ` Now, though, they stand on the tarmac and take in great lungfuls of air, proclaiming it "the air of true freedom." You're somewhat more skeptical of how the locals will treat them, being an outsider, but... well, maybe they'll actually get along.` + ` Kris skips back up the ramp to hand you a credit chip for before taking their transport and heading off to whatever is awaiting them out there on .` + +mission "Stranded In Paradise 1" + minor + name "Stranded In Paradise" + description "The Burnbeck family was stranded by the bombings, and needs transport back home to ." + source + attributes "paradise" + destination + attributes "rim" "south" + not government "Pirate" + not system "Alniyat" "Atria" "Lesath" "Han" + not planet "Glaze" "Zug" "Bourne" + passengers 4 + to offer + has "event: war begins" + not "chosen sides" + random < 30 + on offer + conversation + `No sooner have you entered the spaceport than you are bowled over by a trio of adults, two women and a man, with a child trailing close behind them.` + ` "Oh - sorry!" the older of the two women exclaims. She puts out a hand to help you up, then gets a better look at you as you take it, stand, and dust yourself off. "Wait; are you a ship captain?" she says after a moment.` + ` " , captain of the ," you reply. "Why?"` + ` "Oh! You may be the answer to our prayers, dearie!" She and the others have now gotten themselves a bit more organized, and you can tell that they must be a family. Confirming this, the woman says, "We're the Burnbecks; I'm Shirley, and this is my husband Darren." She gestures towards the other, younger woman, then the child. "These are our kids, Erin and Leigh" Leigh's features are softer than you'd expect a boy of his age would have. "We were on vacation here on when news of the war and those awful bombings came out. Well, I don't need to tell you, it's caused us some trouble! Or, well, maybe I do, since I didn't say where we're from: , down in what they're now calling the Free Worlds!"` + ` Her husband cuts in, "Anyway, the short of it is that we really need to get home, and right now, none of the regular services are running from here to because of the war. Could you possibly take the four of us back home? We...can't pay a lot, right now, but we can pay."` + choice + ` "Of course. I wouldn't leave people stranded like this."` + goto help + ` "Sorry, I'm not headed that way. Best of luck."` + ` Four faces fall in front of you, and after a moment, they gather up their luggage again and start heading out the doors they crashed into you in. Shirley nods sadly as she goes, and says, "Well, I guess we understand. We'll find a way home somehow..."` + decline + + label help + ` Four faces light up in front of you, and after a moment, they gather up their luggage again, and stand expectantly. "Well, where should we go?"` + ` You direct them to the berth where your ship is currently being refueled, and they all bustle off, seeming much more hopeful and relieved.` + accept + on complete + payment + payment 5000 + log "Minor People" "The Burnbecks" `Shirley, Darren, Leigh, and Erin Burnbeck were vacationing in the Paradise Worlds when Gemini and Martini were bombed, stranding them. You helped them get back home.` + conversation + `The trip south with the Burnbecks was mostly quite pleasant, but while they stop short of openly blaming them for the bombings on Geminus and Martini, they are very angry at the Free Worlds for seceding from the Republic. "We were perfectly happy belonging to the Republic," Darren said one evening in the mess. "I mean, seriously, did those people way down in, where is it, Zug? Bourne? Did they even think about the regular people and how this would affect them? Affect us?"` + ` While some of their complaints seem a bit selfish, it's hard to argue with the fact that this has disrupted a lot of lives. After touching down on , Darren, Leigh, and Erin joyfully run into the arms of their friends and family here. Shirley hangs back to hand you a credit chip for and thank you warmly (and at some length) for your help in getting home, before heading out to join her family in their reunion.` + +mission "Stranded In Paradise 2" + minor + source + attributes "rim" "south" + not government "Pirate" + to offer + has "Stranded In Paradise 1: done" + has "FW Embassy 1B: done" + on offer + conversation + `While walking through the spaceport, you are surprised to see Shirley and Darren Burnbeck, along with a young man, who you recognize as Leigh after a few seconds. They greet you warmly, reassure you that Erin is just off to university on Zug, and so couldn't join them on this vacation, and invite you to have dinner with them at the spaceport cafe.` + choice + ` (Accept.)` + goto cafe + ` (Politely decline.)` + ` You apologize, and they reassure you it's fine and thank you once again.` + decline + + label cafe + ` You join them, and they listen raptly to your stories of participating in the Free Worlds' campaign to remain independent from the Republic. When you talk about transporting the Earth ambassadors to Bourne, Darren shakes his head in something like admiration.` + ` "You know," he says, "I was never quite sure that the Free Worlds hadn't really been behind those awful bombings, but now, it looks like I was wrong. In fact, I think I might have been wrong about a lot of things about the Free Worlds Council and Senate, back then. It's still true that they've upended our lives, but from what I've seen of their actions since, especially with the pirates, they really do seem to have the best interests of the people here in the South at heart."` + ` After a round of compliments and words of solidarity from the other members of the family, you finish up your dinners and bid them goodbye.` + decline + +mission "Southern Fiance 1" + name "Fiance to " + minor + description "Tom, formerly a marketer for the Syndicate, is going to live with his fiance on ." + source + attributes "core" + not government "Pirate" + destination "Cornucopia" + to offer + has "event: war begins" + not "chosen sides" + random < 30 + passengers 1 + on offer + conversation + `Walking through the spaceport, you see a man in a very neat suit standing by the side of the concourse holding a sign reading "Transport To " in beautiful lettering.` + choice + ` (Walk towards him.)` + ` (Ignore him.)` + decline + ` He turns a very professional smile on you and introduces himself. "My name is Tom Ardwright. My fiance is the Agriculture Minister on , down in the Free Worlds. We had planned to get married up here in a few months, but, well..." He gestures around at the general situation. "So I'm trying to get down to him, but I'm having trouble getting transport right now."` + choice + ` "Well, I'm the captain of the ; I can take you."` + goto take + ` "Wow, that sounds rough. Best of luck with that."` + ` Tom sighs and nods. "Thanks. Best of luck to you, too."` + decline + + label take + ` Tom's whole posture relaxes as his professional grin becomes a genuine smile. "Wow. This really means so much to me. You said it was the ? I'll be on board in an hour."` + accept + on complete + payment + payment 10000 + log "Minor People" "Tom and Carl" `Tom Ardwright was a marketer for the Syndicate, but moved south, with your help, to live with his government minister fiance Carl Chamberlain after war broke out.` + event "tom and carl's wedding" 60 + event "carl elected governor" 150 + event "tom and carl's child" 1500 + conversation + `During the trip to , you had several conversations with Tom, on a wide range of topics. The most common topic was his fiance, named Carl Chamberlain, sharing dozens of pictures of them together. He also presented some of his own portfolio, as a marketer and designer for a division of Syndicated Systems - at least until he quit his job for this. "I'm not worried, though," he remarks. "Money's fun, of course, but it's nothing compared to what we can do down there on Cornucopia."` + ` The trip south seems to fly by, and soon you are standing at the foot of the ramp shaking Tom's hand and bidding him farewell as Carl runs across the tarmac toward you. You step back as they practically leap into each other's arms, reuniting in spite of these tumultuous times.` + ` When you're back on board, you see an incoming message that informs you has been transferred to your account, along with a heartfelt thank-you note from both men.` + +event "tom and carl's wedding" + +event "carl elected governor" + +event "tom and carl's child" + +mission "Southern Fiance 2" + minor + landing + source + near "Kappa Centauri" 1 100 + to offer + has "event: tom and carl's wedding" + on offer + conversation + `After landing, you receive a message from Tom Ardwright and Carl Camberlain. Attached are photos of their wedding on Cornucopia, as well as a letter:` + `` + `Dear ,` + ` We are delighted to announce that despite the many hardships around us in these times, Tom Ardwright and Carl Chamberlain were married three days ago at the Hart's Hill Vineyard on Cornucopia. This would not have been possible without your willingness to help a man in need, so we thank you from the bottom of our hearts, and if you are ever on Cornucopia, we would be happy to host you. Please enjoy these photos from the wedding.` + ` Tom & Carl Ardwright-Chamberlain` + `` + ` You recognize Tom's style in the design of the photo set, which includes a photo of them on the tarmac at the Cornucopia spaceport where they were reunited after the uncertainty of the war parted them.` + decline + +mission "Southern Fiance 3" + landing + source "Cornucopia" + to offer + has "Southern Fiance 2: offered" + not "event: carl elected governor" + on offer + set "visited tom and carl" + conversation + `As you approach for a landing, you are surprised when the spaceport controller diverts you to a special pad. When you land, you find Tom, the man you brought south from the Core, and his husband Carl, the Agricultural Minister of Cornucopia, waiting for you.` + ` They greet you like an old friend (despite never having talked with Carl before), and insist on serving you dinner. Rather than the grand mansions of other politicians, their house is a simple bungalow that wouldn't look out of place in a suburb. The meal, on the other hand, is anything but modest: there are plates of kebabs, pastas, stir fries, and cakes, made from ingredients sourced from all over the planet. You swap stories for a while - you with your "thrilling adventures in space", as Tom describes them, and them with their much more ordinary, but no less interesting, times here on Cornucopia. They also hint at some big things coming, but reveal nothing more than a knowing look.` + ` After a while, you bid them farewell, and they promise once again that if you ever visit you'll be welcome.` + decline + +mission "Southern Fiance 4" + minor + source + government "Free Worlds" + to offer + has "event: carl elected governor" + on offer + conversation + `In the spaceport, you notice a news bulletin announcing the election of a new governor on Cornucopia. To your surprise, you recognize the man in the picture: it's Carl Ardwright-Chamberlain.` + ` While he did increase crop yields by 17% during his tenure as Agricultural Minister, the new governor's election owes much to the brilliant work of his campaign manager: his husband Tom. The bulletin goes on to list the bold plans for new initiatives on Cornucopia and the good the new senator is doing for the people there.` + decline + +mission "Southern Fiance 5" + minor + landing + source "Cornucopia" + to offer + has "event: carl elected governor" + not "event: tom and carl's child" + on offer + "visited tom and carl" ++ + conversation + branch already + has "visited tom and carl" + `As you approach for a landing, you are surprised when the spaceport controller diverts you to a special pad. When you land, you find Tom, the man you brought south from the Core, and his husband Carl, the new Governor of Cornucopia, waiting for you.` + ` They greet you like an old friend (despite never having talked with Carl before), and insist on serving you dinner. The Cornucopia governor's mansion is certainly befitting of the title, and Tom takes you on a tour through the premises while Carl fields some important phone calls. The meal is similarly grand: there are plates of kebabs, pastas, stir fries, and cakes, made from ingredients sourced from all over the planet. You swap stories for a while - you with your "thrilling adventures in space", as Tom describes them, and them with their much more ordinary, but no less interesting, times here on Cornucopia, including some of the challenges and highlights of their campaign. They also hint at something big coming, but reveal nothing more than a knowing look.` + goto end + + label already + `Like last time, the spaceport controller diverts you to the Governor's personal landing pad. Tom and Carl are waiting for you once more, and they greet you warmly. They take you in an official government vehicle to the governor's mansion, with a trying-to-be-subtle security detail always following just on the periphery.` + ` The official mansion is much more impressive than Carl's house as Agricultural Minister was, and Tom gives you a tour while Carl has to field some official phone calls. You're already looking forward to the food well before you sit down to dinner, and you are not disappointed: if anything, it's better than the last time you visited them. Carl confides that he's planning on pushing to open a government-sponsored culinary school in the capital, but he'll be sad to see his cook go: he knows it's been the woman's dream for ages to teach others to make food as amazing as this, too.` + ` After dinner, as before, you catch each other up on what you've been doing since your last visit, and once you've both shared most of what you can think of to tell, Tom and Carl once again hint that there's still something big in their plans.` + + label end + ` After a while, you bid them farewell, and they promise once again that if you ever visit you'll be welcome.` + decline + +mission "Southern Fiance 6" + landing + source "Cornucopia" + to offer + has "event: tom and carl's child" + on offer + conversation + branch already + has "visited tom and carl" + `As you approach for a landing, you are surprised when the spaceport controller diverts you to a special pad. When you land, you find Tom, the man you brought south from the Core, and his husband Carl, the new Governor of Cornucopia, waiting for you.` + ` They greet you like an old friend (despite never having talked with Carl before), and insist on serving you dinner. The Cornucopia governor's mansion is certainly befitting of the title, and Tom takes you on a tour through the premises while Carl fields some important phone calls. Partway through the tour, Tom gets a mischievous grin, and when he opens the next door, a small child races out and cannons into his legs, gripping them tightly with a glad cry of "Daddy!" Tom proudly introduces Nita, his and Carl's three-year-old daughter, who giggles and tries to run off with your communicator.` + ` When you sit down to dinner with the three of them, you're blown away: there are plates of kebabs, pastas, stir fries, and cakes, made from ingredients sourced from all over the planet. You swap stories for a while - you with your "thrilling adventures in space", as Tom describes them, and them with their much more ordinary, but no less interesting, times here on Cornucopia, including some of the challenges and highlights of their campaign and the joys and fears of fatherhood.` + goto end + + label already + `Like last time, the spaceport controller diverts you to the Governor's personal landing pad. Tom and Carl are waiting for you once more, and they greet you warmly. They take you in an official government vehicle to the governor's mansion, with a trying-to-be-subtle security detail always following just on the periphery.` + branch already2 + has "Take Me To The South D: Followup 2A: declined" + + ` The official mansion is much more impressive than Carl's house as Agricultural Minister was, and Tom gives you a tour while Carl has to field some official phone calls. Partway through the tour, Tom gets a mischievous grin, and when he opens the next door, a very small child races out and cannons into his legs, gripping them tightly with a glad cry of "Daddy!" Tom proudly introduces Nita, his and Carl's three-year-old daughter, who giggles and tries to run off with your communicator.` + ` You're already looking forward to the food well before you sit down to dinner, and you are not disappointed: if anything, it's better than the last time you visited them. Carl confides that it used to be even better, but a year ago his best cook left to become a star teacher at the new culinary institute whose funding he championed.` + ` After dinner, as before, you catch each other up on what you've been doing since your last visit. Tom and Carl's side of this, in between bouts of corralling their exuberant daughter, is mostly about the joys and fears of fatherhood, and their hopes for their, and Nita's, future.` + + label already2 + ` Even having seen it once before, you're still impressed with the governor's mansion. This time, though Carl still has to take an official call, Tom gets a mischievous grin and takes you upstairs to one particular room that you recall on the previous tour was a guest bedroom. When he opens the door, though, you have just time to see that it's been expertly redecorated as a nursery, before a very small child races out and cannons into his legs, gripping them tightly with a glad cry of "Daddy!" Tom proudly introduces Nita, his and Carl's three-year-old daughter, who giggles and tries to run off with your communicator.` + ` You brace yourself for the food as dinner approaches, and while it's still amazing, it does seem to have lost some of the spark it had on your last visit. Carl sighs and says that his worst fears were realized: when he successfully got the government to approve funding for the new culinary institute a year or so ago, his cook went off to become its star teacher.` + ` After dinner, as before, you catch each other up on what you've been doing since your last visit. Tom and Carl's side of this, in between bouts of corralling their exuberant daughter, is mostly about the joys and fears of fatherhood, and their hopes for their, and Nita's, future.` + + label end + action + "visited tom and carl" ++ + ` At length, you reluctantly say you have to get going, and you bid each other fond farewells (and reclaim your communicator from Nita), with a promise once again that if you ever visit you'll be welcome.` + decline mission "FW Refugees to Humanika" @@ -6369,3 +6845,4 @@ mission "FW Refugees to Humanika" payment 20000 dialog "Penny and Rosa thank you for getting them safely to , handing you for your troubles. You wish them and Eduardo the best of luck starting their new life away from a potential war in human space." log "Minor People" "Penny Little, Rosa Perkins, and Eduardo" `A young family who wanted to escape a potential war in human space. Took them to the planet Humanika, where the Quarg let humans settle.` + From d6e632650e16bf233209ad688e8b442785f3b2b9 Mon Sep 17 00:00:00 2001 From: warp-core Date: Wed, 20 Sep 2023 02:42:00 +0100 Subject: [PATCH 11/79] fix(typo): Rouge -> rogue (#9303) --- copyright | 6 +++--- data/_ui/landing messages.txt | 6 +++--- data/map systems.txt | 6 +++--- data/stars.txt | 6 +++--- ...rowndwarf-l-rouge.png => browndwarf-l-rogue.png} | Bin ...rowndwarf-t-rouge.png => browndwarf-t-rogue.png} | Bin ...rowndwarf-y-rouge.png => browndwarf-y-rogue.png} | Bin 7 files changed, 12 insertions(+), 12 deletions(-) rename images/planet/{browndwarf-l-rouge.png => browndwarf-l-rogue.png} (100%) rename images/planet/{browndwarf-t-rouge.png => browndwarf-t-rogue.png} (100%) rename images/planet/{browndwarf-y-rouge.png => browndwarf-y-rogue.png} (100%) diff --git a/copyright b/copyright index af1469eeb54c..50f4333bf0a1 100644 --- a/copyright +++ b/copyright @@ -1239,9 +1239,9 @@ Files: images/_menu/haze-blackbody+* images/_menu/haze-full+* images/_menu/haze-yellow+* - images/planet/browndwarf-l-rouge* + images/planet/browndwarf-l-rogue* images/planet/browndwarf-l* - images/planet/browndwarf-y-rouge* + images/planet/browndwarf-y-rogue* images/planet/browndwarf-y* Copyright: Lia Gerty (https://github.com/ravenshining) License: CC-BY-SA-4.0 @@ -1253,7 +1253,7 @@ License: CC-BY-SA-4.0 Comment: Derived from public domain work previously submitted to Endless Sky. Files: - images/planet/browndwarf-t-rouge* + images/planet/browndwarf-t-rogue* images/planet/browndwarf-t* images/planet/saturn* Copyright: Lia Gerty (https://github.com/ravenshining) diff --git a/data/_ui/landing messages.txt b/data/_ui/landing messages.txt index a7f0b9421de4..aafc0931d27d 100644 --- a/data/_ui/landing messages.txt +++ b/data/_ui/landing messages.txt @@ -99,8 +99,8 @@ "landing message" "You cannot land on a brown dwarf." "planet/browndwarf-l" - "planet/browndwarf-l-rouge" + "planet/browndwarf-l-rogue" "planet/browndwarf-t" - "planet/browndwarf-t-rouge" + "planet/browndwarf-t-rogue" "planet/browndwarf-y" - "planet/browndwarf-y-rouge" + "planet/browndwarf-y-rogue" diff --git a/data/map systems.txt b/data/map systems.txt index 82379497a530..4d4fd583e168 100644 --- a/data/map systems.txt +++ b/data/map systems.txt @@ -13728,7 +13728,7 @@ system Feraticus hazard "Ember Waste Base Heat" 100 hazard "Ember Waste Base Storm" 9000 object - sprite planet/browndwarf-l-rouge + sprite planet/browndwarf-l-rogue period 10 object sprite planet/rock0-b @@ -24879,7 +24879,7 @@ system Paeli hazard "Ember Waste Base Heat" 100 hazard "Ember Waste Base Storm" 9000 object - sprite planet/browndwarf-t-rouge + sprite planet/browndwarf-t-rogue period 10 object sprite planet/desert4-b @@ -25556,7 +25556,7 @@ system Perfica hazard "Ember Waste Base Heat" 100 hazard "Ember Waste Base Storm" 9000 object - sprite planet/browndwarf-y-rouge + sprite planet/browndwarf-y-rogue period 10 object sprite planet/ice5 diff --git a/data/stars.txt b/data/stars.txt index 5d9512184b95..3c024a520b0d 100644 --- a/data/stars.txt +++ b/data/stars.txt @@ -229,19 +229,19 @@ star "star/l-dwarf" star "planet/browndwarf-l" power 0.4 wind 0.5 -star "planet/browndwarf-l-rouge" +star "planet/browndwarf-l-rogue" power 0.4 wind 0.5 star "planet/browndwarf-t" power 0.3 wind 0.4 -star "planet/browndwarf-t-rouge" +star "planet/browndwarf-t-rogue" power 0.3 wind 0.4 star "planet/browndwarf-y" power 0.1 wind 0.3 -star "planet/browndwarf-y-rouge" +star "planet/browndwarf-y-rogue" power 0.1 wind 0.3 diff --git a/images/planet/browndwarf-l-rouge.png b/images/planet/browndwarf-l-rogue.png similarity index 100% rename from images/planet/browndwarf-l-rouge.png rename to images/planet/browndwarf-l-rogue.png diff --git a/images/planet/browndwarf-t-rouge.png b/images/planet/browndwarf-t-rogue.png similarity index 100% rename from images/planet/browndwarf-t-rouge.png rename to images/planet/browndwarf-t-rogue.png diff --git a/images/planet/browndwarf-y-rouge.png b/images/planet/browndwarf-y-rogue.png similarity index 100% rename from images/planet/browndwarf-y-rouge.png rename to images/planet/browndwarf-y-rogue.png From f606db9365320fb2ffeab16206ec6702028afaa2 Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 20 Sep 2023 06:15:03 +0200 Subject: [PATCH 12/79] perf: Limit the number of concurrent image loads on game startup (#9288) --- source/SpriteQueue.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/source/SpriteQueue.cpp b/source/SpriteQueue.cpp index c03dadc3cd1d..e9d250866a3c 100644 --- a/source/SpriteQueue.cpp +++ b/source/SpriteQueue.cpp @@ -24,6 +24,12 @@ this program. If not, see . using namespace std; +namespace { + // The maximum number of loaded images in the queue that are + // waiting to be uploaded to the GPU. + constexpr int MAX_QUEUE = 100; +} + // Constructor, which allocates worker threads. @@ -133,6 +139,12 @@ void SpriteQueue::operator()() return; if(toRead.empty()) break; + { + // Stop loading images so that the main thread can keep up. + unique_lock lock(loadMutex); + if(toLoad.size() > MAX_QUEUE) + break; + } // Extract the one item we should work on reading right now. shared_ptr imageSet = toRead.front(); @@ -174,7 +186,7 @@ void SpriteQueue::DoLoad(unique_lock &lock) lock.lock(); } - for(int i = 0; !toLoad.empty() && i < 100; ++i) + for(int i = 0; !toLoad.empty() && i < MAX_QUEUE; ++i) { // Extract the one item we should work on uploading right now. shared_ptr imageSet = toLoad.front(); @@ -183,6 +195,7 @@ void SpriteQueue::DoLoad(unique_lock &lock) // It's now safe to modify the lists. lock.unlock(); + readCondition.notify_one(); imageSet->Upload(SpriteSet::Modify(imageSet->Name())); lock.lock(); From 662903075a3bd72c22a39a424ed75ec32273f97b Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 20 Sep 2023 15:04:51 +0200 Subject: [PATCH 13/79] chore(docs): Update system requirements (#9242) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3eabe9844903..9b090dcdd04b 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,9 @@ Endless Sky has very minimal system requirements, meaning most systems should be || Minimum | Recommended | |---|----:|----:| -|RAM | 500 MB | 1 GB | +|RAM | 750 MB | 2 GB | |Graphics | OpenGL 3.0 | OpenGL 3.3 | -|Storage Free | 300 MB | 1 GB | +|Storage Free | 350 MB | 1.5 GB | ## Building from source From 88f0e8ace8f5ed51f98e33faa6df14c97adb3624 Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 20 Sep 2023 17:14:49 +0200 Subject: [PATCH 14/79] feat(docs): Update and improve the build instructions (#9235) --- docs/readme-cmake.md | 138 +++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 71 deletions(-) diff --git a/docs/readme-cmake.md b/docs/readme-cmake.md index 903e554fdfd4..53452c3a9e3c 100644 --- a/docs/readme-cmake.md +++ b/docs/readme-cmake.md @@ -1,76 +1,47 @@ -First you need a copy of the code (if you intend on working on the game use your fork's URL here): +# Build instructions + +First you need a copy of the code (if you intend on working on the game, use your fork's URL here): ```powershell > git clone https://github.com/endless-sky/endless-sky ``` -The game's root directory, where your `git clone`d files reside, will be your starting point for compiling the game. - -Next you will need to install a couple of dependencies to build the game. - -## Build Environment - -There are several different ways to build Endless Sky, depending on your operating system and preference. -- [Windows](#Windows) -- [MacOS](#MacOS) -- [Linux](#Linux) - -## Windows (Visual Studio) -We are currently switching to using VS with cmake. If you wish the older MingW build instructions, they are located at the end of the Windows section. - -Download Visual Studio, and make sure to install the following features: -- "Desktop Development with C++", -- "C++ Clang Compiler for Windows", -- "C++ clang-cl for vXXX build tools", and -- "C++ CMake tools for Windows". - -Please note that it is recommened to use VS 2022 (or higher) for its better CMake integration. - -### Windows Build Process - -1. Open the endless-sky folder that you cloned in the initial step. -2. Wait while Visual Studio loads everything. This may take a few minutes the first time, but should be relatively fast on subsequent loads. -3. On your toolbar there should be a pulldown menu that says "debug" or "release." Select the version you want to build. -4. Hit the "build" button, or find the "Build" menu and select "Build All" -5. In the status window it will give a scrolling list of actions being completed. Wait until it states "Build Complete" -6. At this point you should be able to launch the recently completed build by hitting the F5 key or the run button. The recently build executable and essential libraries can be found in your Endless-Sky folder, nested within a subfolder created by Visual Studio during the build process - -#### Notes +The game's root directory, where your `git clone`d files reside, will be your starting point for compiling the game. You can use `cd endless-sky` to enter the game's directory. -##### Earlier versions of Visual Studio +Next, you will need to install a couple of dependencies to build the game. There are several different ways to build Endless Sky, depending on your operating system and preference. -If you are on an earlier version of Visual Studio, or would like to use an actual VS solution, you will need to generate the solution manually as follows: +- [Windows](#windows) +- [Windows (MinGW)](#windows-mingw) +- [MacOS](#macos) +- [Linux](#linux) -```powershell -> cmake --preset clang-cl -G"Visual Studio 17 2022" -``` +## Installing build dependencies -This will create a Visual Studio 2022 solution. If you are using an older version of VS, you will need to adjust the version. Now you will find a complete solution in the `build/` folder. Find the solution and open it and you're good to go! +### Windows -#### Using Microsoft Visual C++ +We recommend using the toolchain from Visual Studio to build the game (regardless of the IDE you wish to use). -Using MSVC to compile Endless Sky is not supported. If you try, you will get a ton of warnings (and maybe even a couple of errors) during compilation. +Download [Visual Studio](https://visualstudio.microsoft.com/downloads/#visual-studio-community-2022) (if you do not want to install Visual Studio, you can alternatively download the [VS Build Tools](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022)), and make sure to install the following components: -
+- "Desktop Development with C++", +- "C++ Clang Compiler for Windows", +- "C++ CMake tools for Windows". -Building on Windows using MinGW +We recommend using Visual Studio 2022 or newer. If you are unsure of which edition to use, choose Visual Studio Community. +### Windows (MinGW) -You can download the [MinGW Winlibs](https://winlibs.com/#download-release) build, which also includes various tools you'll need to build the game as well. It is possible to use other MinGW builds as well. - -You'll need the MSVCRT runtime version, 64-bit. The latest version is currently gcc 12 ([direct download link](https://github.com/brechtsanders/winlibs_mingw/releases/download/12.1.0-14.0.4-10.0.0-msvcrt-r2/winlibs-x86_64-posix-seh-gcc-12.1.0-mingw-w64msvcrt-10.0.0-r2.zip)). +You can download the [MinGW Winlibs](https://winlibs.com/#download-release) build, which also includes various tools you'll need to build the game as well. It is possible to use other MinGW distributions too (like Msys2 for example). -Extract the zip file in a folder whose path doesn't contain a space (C:\ for example) and add the bin\ folder inside to your PATH (Press the Windows key and type "edit environment variables", then click on PATH and add it in the list). +You'll need the POSIX version of MinGW. For the Winlibs distribution mentioned above, the latest version is currently gcc 13 ([direct download link](https://github.com/brechtsanders/winlibs_mingw/releases/download/13.2.0-16.0.6-11.0.0-ucrt-r1/winlibs-x86_64-posix-seh-gcc-13.2.0-mingw-w64ucrt-11.0.0-r1.zip)). Download and extract the zip file in a folder whose path doesn't contain a space (C:\ for example) and add the bin\ folder inside to your PATH (Press the Windows key and type "edit environment variables", then click on PATH and add it to the list). -You will also need to install [CMake](https://cmake.org) (if you don't already have it). - -
+You will also need at least [CMake](https://cmake.org/download/) 3.21. You can check if you have CMake already installed by running `cmake -v` in command line window. -## MacOS +### MacOS Install [Homebrew](https://brew.sh). Once it is installed, use it to install the tools and libraries you will need: -``` +```bash $ brew install cmake ninja mad libpng jpeg-turbo sdl2 ``` @@ -78,11 +49,11 @@ $ brew install cmake ninja mad libpng jpeg-turbo sdl2 If you want to build the libraries from source instead of using Homebrew, you can pass `-DES_USE_SYSTEM_LIBRARIES=OFF` to CMake when configuring. -## Linux +### Linux You will need at least CMake 3.21. You can get the latest version from the [offical website](https://cmake.org/download/). -**Note**: If your distro does not provide up-to-date version of the needed libraries, you will need to tell CMake to build the libraries from source by passing `-DES_USE_SYSTEM_LIBRARIES=OFF` to the first cmake command under the command line build instructions. +**Note**: If your distro does not provide up-to-date version of the needed libraries, you will need to tell CMake to build the libraries from source by passing `-DES_USE_SYSTEM_LIBRARIES=OFF` while configuring. If you use a reasonably up-to-date distro, then you can use your favorite package manager to install the needed dependencies. @@ -104,20 +75,21 @@ gcc-c++ cmake ninja-build SDL2-devel libpng-devel libjpeg-turbo-devel mesa-libGL -# Building from the command line +## Building the game + +### Building from the command line Here's a summary of every command you will need for development: ```bash $ cmake --preset # configure project (only needs to be done once) -$ cmake --build --preset -debug # actually build Endless Sky (as well as any tests) -$ ./build//Debug/endless-sky # run the game +$ cmake --build --preset -debug # build Endless Sky (as well as any tests) $ ctest --preset -test # run the unit tests $ ctest --preset -benchmark # run the benchmarks $ ctest --preset -integration # run the integration tests (Linux only) ``` -If you'd like to debug a specific integration test (on any OS), you can do so as follows: +The executable will be located in `build//Debug/`. If you'd like to debug a specific integration test (on any OS), you can do so as follows: ```bash $ ctest --preset -integration-debug -R @@ -129,37 +101,61 @@ You can get a list of integration tests with `ctest --preset -integratio Replace `` with one of the following presets: -- Windows: `clang-cl` (builds with Clang for Windows), `mingw` (builds with MinGW) -- MacOS: `macos` or `macos-arm` (builds with the default compiler), `xcode` or `xcode-arm` (builds using the XCode toolchain) +- Windows: `clang-cl` (builds with Clang for Windows), `mingw` (builds with MinGW), `mingw32` (builds with x86 MinGW) +- MacOS: `macos` or `macos-arm` (builds with the default compiler, for x64 and ARM64 respectively) - Linux: `linux` (builds with the default compiler) -# Building with other IDEs +### Using an IDE -## Building with Visual Studio Code +Most IDEs have CMake support, and can be used to build the game. We recommend using [Visual Studio Code](#visual-studio-code). -Install the [C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools), [CMake Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools), [CMake Test explorer](https://marketplace.visualstudio.com/items?itemName=fredericbonnet.cmake-test-adapter) extensions and open the project folder under File -> Open Folder. +#### Visual Studio Code -You'll be asked to select a preset. Select the one you want (see the table above). If you get asked to configure the project, click on Yes. You can use the bar at the very bottom to select between different configurations (Debug/Release), build, start the game, and execute the unit tests. On the left you can click on the test icon to run individual integration tests. +After installing VS Code, install the [C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) and [CMake Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) extensions, and open the project folder under File -> Open Folder. -## Building with Code::Blocks +You'll be asked to select a preset. Select the one you want (see the list above in the previous section for help). If you get asked to configure the project, click on Yes. You can use the bar at the very bottom to select between different configurations (Debug/Release), build, start the game, and execute the unit tests. On the left you can click on the test icon to run individual integration tests. -If you want to use the Code::Blocks IDE, from the root of the project folder execute: +#### Visual Studio + +We recommend using [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/#visual-studio-community-2022) or newer, because of its better CMake integration. Once you have installed Visual Studio, you can simply open the root folder. + +
+Step-by-step instructions for Visual Studio 2022 or later + +1. Open the repository's root folder using Visual Studio ("Open Folder") +2. Wait while Visual Studio loads everything. This may take a few minutes the first time, but should be relatively fast on subsequent loads. +3. On the toolbar you're able to choose between Debug and Release. +4. You might need to select the target to launch in the dropdown menu of the Run button (it's the one with the green arrow). Select "Endless Sky (build/.../)" (not the one with install). +5. Hit the Run button (F5) to build and run the game. +6. In the status window it will give a scrolling list of actions being completed. Wait until it states "Build Complete" +7. You'll find the executables and libraries located inside the build directory in the root folder. + +
+ +If you are on an earlier version of Visual Studio, or would like to use an actual VS solution, you will need to generate the solution manually as follows: ```powershell -> cmake -G"CodeBlocks - Ninja" --preset +> cmake --preset clang-cl -G"Visual Studio 17 2022" ``` -With `` being one of the available presets (see above for a list). For Windows for example you'd want `mingw`. Now there will be a Code::Blocks project inside `build\mingw`. +This will create a Visual Studio 2022 solution. If you are using an older version of VS, you will need to adjust the version. Now you will find a complete solution in the `build/` folder. Find the solution and open it and you're good to go! + +#### Code::Blocks +If you want to use the [Code::Blocks](https://www.codeblocks.org/downloads/) IDE, from the root of the project folder execute: +```powershell +> cmake -G"CodeBlocks - Ninja" --preset +``` -## Building with XCode +With `` being one of the available presets (see above for a list). For Windows for example you'd want `clang-cl` or `mingw`. Now there will be a Code::Blocks project inside `build\`. + +#### XCode If you want to use the XCode IDE, from the root of the project folder execute: ```bash -$ cmake --preset macos -G Xcode # macos-arm for Apple Silicon +$ cmake -G Xcode --preset macos # macos-arm for Apple Silicon ``` The XCode project is located in the `build/` directory. - From 2f4186c6edf104dac88be0f950e8f920b9ff05ae Mon Sep 17 00:00:00 2001 From: Nick Date: Thu, 21 Sep 2023 16:30:46 +0200 Subject: [PATCH 15/79] fix(compiler compatibility): Include in various places for gcc 13 (#9318) --- source/ConditionSet.h | 1 + source/ConditionsStore.h | 1 + source/DataNode.h | 1 + source/Mortgage.h | 1 + source/text/Format.h | 1 + 5 files changed, 5 insertions(+) diff --git a/source/ConditionSet.h b/source/ConditionSet.h index f300f6abab11..3d1ae21c9d1b 100644 --- a/source/ConditionSet.h +++ b/source/ConditionSet.h @@ -16,6 +16,7 @@ this program. If not, see . #ifndef CONDITION_SET_H_ #define CONDITION_SET_H_ +#include #include #include #include diff --git a/source/ConditionsStore.h b/source/ConditionsStore.h index e441d3cd33e7..56e996d6d839 100644 --- a/source/ConditionsStore.h +++ b/source/ConditionsStore.h @@ -16,6 +16,7 @@ this program. If not, see . #ifndef CONDITIONS_STORE_H_ #define CONDITIONS_STORE_H_ +#include #include #include #include diff --git a/source/DataNode.h b/source/DataNode.h index 9b9f93ff9fe6..7e40a813fb5f 100644 --- a/source/DataNode.h +++ b/source/DataNode.h @@ -16,6 +16,7 @@ this program. If not, see . #ifndef DATA_NODE_H_ #define DATA_NODE_H_ +#include #include #include #include diff --git a/source/Mortgage.h b/source/Mortgage.h index a8480d9c05ec..766fa211b4ac 100644 --- a/source/Mortgage.h +++ b/source/Mortgage.h @@ -16,6 +16,7 @@ this program. If not, see . #ifndef MORTGAGE_H_ #define MORTGAGE_H_ +#include #include class DataNode; diff --git a/source/text/Format.h b/source/text/Format.h index 2aa62de42062..094add192873 100644 --- a/source/text/Format.h +++ b/source/text/Format.h @@ -16,6 +16,7 @@ this program. If not, see . #ifndef ES_TEXT_FORMAT_H_ #define ES_TEXT_FORMAT_H_ +#include #include #include #include From a576744235474c7c1c8055703e5bcc10bdc8da12 Mon Sep 17 00:00:00 2001 From: flowers9 Date: Thu, 21 Sep 2023 11:54:05 -0700 Subject: [PATCH 16/79] feat(ux): Better scrolling in the shop panels (#9091) Various improvements to the shop panels: - Smoother scrolling - Avoid scrolling down when using the arrow keys if the next item is still on screen - Better handling of vanished selected entries Co-authored-by: Dave Flowers Co-authored-by: Daniel <101683475+Koranir@users.noreply.github.com> --- source/OutfitterPanel.cpp | 21 +- source/OutfitterPanel.h | 2 +- source/ShipyardPanel.cpp | 6 +- source/ShipyardPanel.h | 2 +- source/ShopPanel.cpp | 492 +++++++++++++++++++++----------------- source/ShopPanel.h | 27 ++- 6 files changed, 300 insertions(+), 250 deletions(-) diff --git a/source/OutfitterPanel.cpp b/source/OutfitterPanel.cpp index 9672717fa11e..75356bc845f4 100644 --- a/source/OutfitterPanel.cpp +++ b/source/OutfitterPanel.cpp @@ -147,10 +147,10 @@ bool OutfitterPanel::HasItem(const string &name) const -void OutfitterPanel::DrawItem(const string &name, const Point &point, int scrollY) +void OutfitterPanel::DrawItem(const string &name, const Point &point) { const Outfit *outfit = GameData::Outfits().Get(name); - zones.emplace_back(point, Point(OUTFIT_SIZE, OUTFIT_SIZE), outfit, scrollY); + zones.emplace_back(point, Point(OUTFIT_SIZE, OUTFIT_SIZE), outfit); if(point.Y() + OUTFIT_SIZE / 2 < Screen::Top() || point.Y() - OUTFIT_SIZE / 2 > Screen::Bottom()) return; @@ -764,12 +764,6 @@ void OutfitterPanel::DrawKey() void OutfitterPanel::ToggleForSale() { showForSale = !showForSale; - - if(selectedOutfit && !HasItem(selectedOutfit->TrueName())) - { - selectedOutfit = nullptr; - } - ShopPanel::ToggleForSale(); } @@ -778,12 +772,6 @@ void OutfitterPanel::ToggleForSale() void OutfitterPanel::ToggleStorage() { showStorage = !showStorage; - - if(selectedOutfit && !HasItem(selectedOutfit->TrueName())) - { - selectedOutfit = nullptr; - } - ShopPanel::ToggleStorage(); } @@ -793,11 +781,6 @@ void OutfitterPanel::ToggleCargo() { showCargo = !showCargo; - if(selectedOutfit && !HasItem(selectedOutfit->TrueName())) - { - selectedOutfit = nullptr; - } - if(playerShip) { playerShip = nullptr; diff --git a/source/OutfitterPanel.h b/source/OutfitterPanel.h index cdaeab26b187..d0807d9406d5 100644 --- a/source/OutfitterPanel.h +++ b/source/OutfitterPanel.h @@ -50,7 +50,7 @@ class OutfitterPanel : public ShopPanel { virtual int TileSize() const override; virtual int VisibilityCheckboxesSize() const override; virtual bool HasItem(const std::string &name) const override; - virtual void DrawItem(const std::string &name, const Point &point, int scrollY) override; + virtual void DrawItem(const std::string &name, const Point &point) override; virtual int DividerOffset() const override; virtual int DetailWidth() const override; virtual int DrawDetails(const Point ¢er) override; diff --git a/source/ShipyardPanel.cpp b/source/ShipyardPanel.cpp index 502ed37460de..eacd539c42fc 100644 --- a/source/ShipyardPanel.cpp +++ b/source/ShipyardPanel.cpp @@ -126,10 +126,10 @@ bool ShipyardPanel::HasItem(const string &name) const -void ShipyardPanel::DrawItem(const string &name, const Point &point, int scrollY) +void ShipyardPanel::DrawItem(const string &name, const Point &point) { const Ship *ship = GameData::Ships().Get(name); - zones.emplace_back(point, Point(SHIP_SIZE, SHIP_SIZE), ship, scrollY); + zones.emplace_back(point, Point(SHIP_SIZE, SHIP_SIZE), ship); if(point.Y() + SHIP_SIZE / 2 < Screen::Top() || point.Y() - SHIP_SIZE / 2 > Screen::Bottom()) return; @@ -381,6 +381,7 @@ void ShipyardPanel::BuyShip(const string &name) playerShip = &*player.Ships().back(); playerShips.clear(); playerShips.insert(playerShip); + CheckSelection(); } @@ -399,5 +400,4 @@ void ShipyardPanel::SellShip() } if(playerShip) playerShips.insert(playerShip); - player.UpdateCargoCapacities(); } diff --git a/source/ShipyardPanel.h b/source/ShipyardPanel.h index 88bbc9673792..f680137d3003 100644 --- a/source/ShipyardPanel.h +++ b/source/ShipyardPanel.h @@ -43,7 +43,7 @@ class ShipyardPanel : public ShopPanel { protected: virtual int TileSize() const override; virtual bool HasItem(const std::string &name) const override; - virtual void DrawItem(const std::string &name, const Point &point, int scrollY) override; + virtual void DrawItem(const std::string &name, const Point &point) override; virtual int DividerOffset() const override; virtual int DetailWidth() const override; virtual int DrawDetails(const Point ¢er) override; diff --git a/source/ShopPanel.cpp b/source/ShopPanel.cpp index 6a71c61cfe16..7a336a56408e 100644 --- a/source/ShopPanel.cpp +++ b/source/ShopPanel.cpp @@ -62,6 +62,21 @@ namespace { { return ship.GetPlanet() == here; } + + // Update smooth scroll towards scroll. + void UpdateSmoothScroll(const double scroll, double &smoothScroll) + { + const double dy = scroll - smoothScroll; + if(dy) + { + // Handle small increments. + if(fabs(dy) < 6) + smoothScroll += copysign(1., dy); + // Keep scroll value an integer to prevent odd text artifacts. + else + smoothScroll = round(smoothScroll + dy * 0.2); + } + } } @@ -86,41 +101,20 @@ void ShopPanel::Step() // them how to reorder the ships in their fleet. if(player.Ships().size() > 1) DoHelp("multiple ships"); - // Perform autoscroll to bring item details into view. - if(scrollDetailsIntoView && mainDetailHeight > 0) - { - int mainTopY = Screen::Top(); - int mainBottomY = Screen::Bottom() - 40; - double selectedBottomY = selectedTopY + TileSize() + mainDetailHeight; - // Scroll up until the bottoms match. - if(selectedBottomY > mainBottomY) - DoScroll(max(-30., mainBottomY - selectedBottomY)); - // Scroll down until the bottoms or the tops match. - else if(selectedBottomY < mainBottomY - && (mainBottomY - mainTopY < selectedBottomY - selectedTopY && selectedTopY < mainTopY)) - DoScroll(min(30., min(mainTopY - selectedTopY, mainBottomY - selectedBottomY))); - // Details are in view. - else - scrollDetailsIntoView = false; - } } void ShopPanel::Draw() { - const double oldSelectedTopY = selectedTopY; - glClear(GL_COLOR_BUFFER_BIT); - // Clear the list of clickable zones. - zones.clear(); + // These get added by both DrawMain and DrawDetailsSidebar, so clear them here. categoryZones.clear(); - + DrawMain(); DrawShipsSidebar(); DrawDetailsSidebar(); DrawButtons(); - DrawMain(); DrawKey(); shipInfo.DrawTooltips(); @@ -163,17 +157,20 @@ void ShopPanel::Draw() } } - if(sameSelectedTopY) + // Check to see if we need to scroll things onto the screen. + if(delayedAutoScroll) { - sameSelectedTopY = false; - if(selectedTopY != oldSelectedTopY) - { - // Redraw with the same selected top (item in the same place). - mainScroll = max(0., min(maxMainScroll, mainScroll + selectedTopY - oldSelectedTopY)); - Draw(); - } + delayedAutoScroll = false; + const auto selected = Selected(); + if(selected != zones.end()) + MainAutoScroll(selected); } - mainScroll = min(mainScroll, maxMainScroll); + if(mainScroll > maxMainScroll) + mainScroll = maxMainScroll; + if(infobarScroll > maxInfobarScroll) + infobarScroll = maxInfobarScroll; + if(sidebarScroll > maxSidebarScroll) + sidebarScroll = maxSidebarScroll; } @@ -270,21 +267,24 @@ int ShopPanel::VisibilityCheckboxesSize() const void ShopPanel::ToggleForSale() { - sameSelectedTopY = true; + CheckSelection(); + delayedAutoScroll = true; } void ShopPanel::ToggleStorage() { - sameSelectedTopY = true; + CheckSelection(); + delayedAutoScroll = true; } void ShopPanel::ToggleCargo() { - sameSelectedTopY = true; + CheckSelection(); + delayedAutoScroll = true; } @@ -292,12 +292,12 @@ void ShopPanel::ToggleCargo() // Only override the ones you need; the default action is to return false. bool ShopPanel::KeyDown(SDL_Keycode key, Uint16 mod, const Command &command, bool isNewPress) { - scrollDetailsIntoView = false; bool toStorage = selectedOutfit && (key == 'r' || key == 'u'); if(key == 'l' || key == 'd' || key == SDLK_ESCAPE || (key == 'w' && (mod & (KMOD_CTRL | KMOD_GUI)))) { - player.UpdateCargoCapacities(); + if(!isOutfitter) + player.UpdateCargoCapacities(); GetUI()->Pop(this); } else if(command.Has(Command::MAP)) @@ -310,16 +310,19 @@ bool ShopPanel::KeyDown(SDL_Keycode key, Uint16 mod, const Command &command, boo else if(key == 'b' || key == 'i' || key == 'c') { const auto result = CanBuy(key == 'i' || key == 'c'); - if(!result) - { - if(result.HasMessage()) - GetUI()->Push(new Dialog(result.Message())); - } - else + if(result) { Buy(key == 'i' || key == 'c'); - player.UpdateCargoCapacities(); + // Ship-based updates to cargo are handled when leaving. + // Ship-based selection changes are asynchronous, and handled by ShipyardPanel. + if(isOutfitter) + { + player.UpdateCargoCapacities(); + CheckSelection(); + } } + else if(result.HasMessage()) + GetUI()->Push(new Dialog(result.Message())); } else if(key == 's' || toStorage) { @@ -330,7 +333,11 @@ bool ShopPanel::KeyDown(SDL_Keycode key, Uint16 mod, const Command &command, boo int modifier = CanSellMultiple() ? Modifier() : 1; for(int i = 0; i < modifier && CanSell(toStorage); ++i) Sell(toStorage); - player.UpdateCargoCapacities(); + if(isOutfitter) + { + player.UpdateCargoCapacities(); + CheckSelection(); + } } } else if(key == SDLK_LEFT) @@ -476,10 +483,7 @@ bool ShopPanel::Click(int x, int y, int /* clicks */) else { collapsed.insert(zone.Value()); - if(selectedShip && selectedShip->Attributes().Category() == zone.Value()) - selectedShip = nullptr; - if(selectedOutfit && selectedOutfit->Category() == zone.Value()) - selectedOutfit = nullptr; + CategoryAdvance(zone.Value()); } } else @@ -492,35 +496,36 @@ bool ShopPanel::Click(int x, int y, int /* clicks */) return true; } - // Handle clicks anywhere else by checking if they fell into any of the - // active click zones (main panel or side panel). + // Check for clicks in the main zones. for(const Zone &zone : zones) if(zone.Contains(clickPoint)) { if(zone.GetShip()) - { - // Is the ship that was clicked one of the player's? - for(const shared_ptr &ship : player.Ships()) - if(ship.get() == zone.GetShip()) - { - dragShip = ship.get(); - dragPoint.Set(x, y); - SideSelect(dragShip); - return true; - } - selectedShip = zone.GetShip(); - } else selectedOutfit = zone.GetOutfit(); - // Scroll details into view in Step() when the height is known. - scrollDetailsIntoView = true; - mainDetailHeight = 0; - mainScroll = max(0., mainScroll + zone.ScrollY()); return true; } + // Check for clicks in the sidebar zones. + for(const ClickZone &zone : shipZones) + if(zone.Contains(clickPoint)) + { + const Ship *clickedShip = zone.Value(); + for(const shared_ptr &ship : player.Ships()) + if(ship.get() == clickedShip) + { + dragShip = ship.get(); + dragPoint.Set(x, y); + SideSelect(dragShip); + break; + } + + return true; + } + + return true; } @@ -558,9 +563,9 @@ bool ShopPanel::Drag(double dx, double dy) { isDraggingShip = true; dragPoint += Point(dx, dy); - for(const Zone &zone : zones) + for(const ClickZone &zone : shipZones) if(zone.Contains(dragPoint)) - if(zone.GetShip() && zone.GetShip()->IsYours() && zone.GetShip() != dragShip) + if(zone.Value() != dragShip) { int dragIndex = -1; int dropIndex = -1; @@ -569,7 +574,7 @@ bool ShopPanel::Drag(double dx, double dy) const Ship *ship = &*player.Ships()[i]; if(ship == dragShip) dragIndex = i; - if(ship == zone.GetShip()) + if(ship == zone.Value()) dropIndex = i; } if(dragIndex >= 0 && dropIndex >= 0) @@ -577,10 +582,7 @@ bool ShopPanel::Drag(double dx, double dy) } } else - { - scrollDetailsIntoView = false; DoScroll(dy); - } return true; } @@ -598,7 +600,6 @@ bool ShopPanel::Release(int x, int y) bool ShopPanel::Scroll(double dx, double dy) { - scrollDetailsIntoView = false; return DoScroll(dy * 2.5 * Preferences::ScrollSpeed()); } @@ -629,15 +630,15 @@ int64_t ShopPanel::LicenseCost(const Outfit *outfit, bool onlyOwned) const -ShopPanel::Zone::Zone(Point center, Point size, const Ship *ship, double scrollY) - : ClickZone(center, size, ship), scrollY(scrollY) +ShopPanel::Zone::Zone(Point center, Point size, const Ship *ship) + : ClickZone(center, size, ship) { } -ShopPanel::Zone::Zone(Point center, Point size, const Outfit *outfit, double scrollY) - : ClickZone(center, size, nullptr), scrollY(scrollY), outfit(outfit) +ShopPanel::Zone::Zone(Point center, Point size, const Outfit *outfit) + : ClickZone(center, size, nullptr), outfit(outfit) { } @@ -657,19 +658,13 @@ const Outfit *ShopPanel::Zone::GetOutfit() const -double ShopPanel::Zone::ScrollY() const -{ - return scrollY; -} - - - void ShopPanel::DrawShipsSidebar() { const Font &font = FontSet::Get(14); const Color &medium = *GameData::Colors().Get("medium"); const Color &bright = *GameData::Colors().Get("bright"); - sideDetailHeight = 0; + + UpdateSmoothScroll(sidebarScroll, sidebarSmoothScroll); // Fill in the background. FillShader::Fill( @@ -683,13 +678,13 @@ void ShopPanel::DrawShipsSidebar() // Draw this string, centered in the side panel: static const string YOURS = "Your Ships:"; - Point yoursPoint(Screen::Right() - SIDEBAR_WIDTH, Screen::Top() + 10 - sidebarScroll); + Point yoursPoint(Screen::Right() - SIDEBAR_WIDTH, Screen::Top() + 10 - sidebarSmoothScroll); font.Draw({YOURS, {SIDEBAR_WIDTH, Alignment::CENTER}}, yoursPoint, bright); // Start below the "Your Ships" label, and draw them. Point point( Screen::Right() - SIDEBAR_WIDTH / 2 - 93, - Screen::Top() + SIDEBAR_WIDTH / 2 - sidebarScroll + 40 - 93); + Screen::Top() + SIDEBAR_WIDTH / 2 - sidebarSmoothScroll + 40 - 93); const Planet *here = player.GetPlanet(); int shipsHere = 0; @@ -702,6 +697,7 @@ void ShopPanel::DrawShipsSidebar() const auto flightChecks = player.FlightCheck(); Point mouse = GetUI()->GetMouse(); warningType.clear(); + shipZones.clear(); static const Color selected(.8f, 1.f); static const Color unselected(.4f, 1.f); @@ -741,7 +737,7 @@ void ShopPanel::DrawShipsSidebar() } } - zones.emplace_back(point, Point(ICON_TILE, ICON_TILE), ship.get()); + shipZones.emplace_back(point, Point(ICON_TILE, ICON_TILE), ship.get()); const auto checkIt = flightChecks.find(ship); if(checkIt != flightChecks.end()) @@ -749,10 +745,10 @@ void ShopPanel::DrawShipsSidebar() const string &check = (*checkIt).second.front(); const Sprite *icon = SpriteSet::Get(check.back() == '!' ? "ui/error" : "ui/warning"); SpriteShader::Draw(icon, point + .5 * Point(ICON_TILE - icon->Width(), ICON_TILE - icon->Height())); - if(zones.back().Contains(mouse)) + if(shipZones.back().Contains(mouse)) { warningType = check; - warningPoint = zones.back().TopLeft(); + warningPoint = shipZones.back().TopLeft(); } } @@ -771,8 +767,8 @@ void ShopPanel::DrawShipsSidebar() DrawShip(*playerShip, point, true); Point offset(SIDEBAR_WIDTH / -2, SHIP_SIZE / 2); - sideDetailHeight = DrawPlayerShipInfo(point + offset); - point.Y() += sideDetailHeight + SHIP_SIZE / 2; + const int detailHeight = DrawPlayerShipInfo(point + offset); + point.Y() += detailHeight + SHIP_SIZE / 2; } else if(player.Cargo().Size()) { @@ -783,7 +779,7 @@ void ShopPanel::DrawShipsSidebar() font.Draw({space, {SIDEBAR_WIDTH - 20, Alignment::RIGHT}}, point, bright); point.Y() += 20.; } - maxSidebarScroll = max(0., point.Y() + sidebarScroll - Screen::Bottom() + BUTTON_HEIGHT); + maxSidebarScroll = max(0., point.Y() + sidebarSmoothScroll - Screen::Bottom() + BUTTON_HEIGHT); PointerShader::Draw(Point(Screen::Right() - 10, Screen::Top() + 10), Point(0., -1.), 10.f, 10.f, 5.f, Color(sidebarScroll > 0 ? .8f : .2f, 0.f)); @@ -798,6 +794,9 @@ void ShopPanel::DrawDetailsSidebar() // Fill in the background. const Color &line = *GameData::Colors().Get("dim"); const Color &back = *GameData::Colors().Get("shop info panel background"); + + UpdateSmoothScroll(infobarScroll, infobarSmoothScroll); + FillShader::Fill( Point(Screen::Right() - SIDEBAR_WIDTH - INFOBAR_WIDTH, 0.), Point(1., Screen::Height()), @@ -809,11 +808,11 @@ void ShopPanel::DrawDetailsSidebar() Point point( Screen::Right() - SIDE_WIDTH + INFOBAR_WIDTH / 2, - Screen::Top() + 10 - infobarScroll); + Screen::Top() + 10 - infobarSmoothScroll); int heightOffset = DrawDetails(point); - maxInfobarScroll = max(0., heightOffset + infobarScroll - Screen::Bottom()); + maxInfobarScroll = max(0., heightOffset + infobarSmoothScroll - Screen::Bottom()); PointerShader::Draw(Point(Screen::Right() - SIDEBAR_WIDTH - 10, Screen::Top() + 10), Point(0., -1.), 10.f, 10.f, 5.f, Color(infobarScroll > 0 ? .8f : .2f, 0.f)); @@ -898,11 +897,12 @@ void ShopPanel::DrawMain() const Font &bigFont = FontSet::Get(18); const Color &dim = *GameData::Colors().Get("medium"); const Color &bright = *GameData::Colors().Get("bright"); - mainDetailHeight = 0; const Sprite *collapsedArrow = SpriteSet::Get("ui/collapsed"); const Sprite *expandedArrow = SpriteSet::Get("ui/expanded"); + UpdateSmoothScroll(mainScroll, mainSmoothScroll); + // Draw all the available items. // First, figure out how many columns we can draw. const int TILE_SIZE = TileSize(); @@ -915,11 +915,11 @@ void ShopPanel::DrawMain() const Point begin( (Screen::Width() - columnWidth) / -2, - (Screen::Height() - TILE_SIZE) / -2 - mainScroll); + (Screen::Height() - TILE_SIZE) / -2 - mainSmoothScroll); Point point = begin; const float endX = Screen::Right() - (SIDE_WIDTH + 1); double nextY = begin.Y() + TILE_SIZE; - int scrollY = 0; + zones.clear(); for(const auto &cat : categories) { const string &category = cat.Name(); @@ -940,19 +940,13 @@ void ShopPanel::DrawMain() bool isEmpty = true; for(const string &name : it->second) { - bool isSelected = (selectedShip && GameData::Ships().Get(name) == selectedShip) - || (selectedOutfit && GameData::Outfits().Get(name) == selectedOutfit); - - if(isSelected) - selectedTopY = point.Y() - TILE_SIZE / 2; - if(!HasItem(name)) continue; isEmpty = false; if(isCollapsed) break; - DrawItem(name, point, scrollY); + DrawItem(name, point); point.X() += columnWidth; if(point.X() >= endX) @@ -960,7 +954,6 @@ void ShopPanel::DrawMain() point.X() = begin.X(); point.Y() = nextY; nextY += TILE_SIZE; - scrollY = -mainDetailHeight; } } @@ -976,7 +969,6 @@ void ShopPanel::DrawMain() point.X() = begin.X(); point.Y() = nextY; nextY += TILE_SIZE; - scrollY = -mainDetailHeight; } point.Y() += 40; nextY += 40; @@ -992,7 +984,8 @@ void ShopPanel::DrawMain() // What amount would mainScroll have to equal to make nextY equal the // bottom of the screen? (Also leave space for the "key" at the bottom.) - maxMainScroll = max(0., nextY + mainScroll - Screen::Height() / 2 - TILE_SIZE / 2 + VisibilityCheckboxesSize() + 40.); + maxMainScroll = max(0., nextY + mainSmoothScroll - Screen::Height() / 2 - TILE_SIZE / 2 + + VisibilityCheckboxesSize() + 40.); PointerShader::Draw(Point(Screen::Right() - 10 - SIDE_WIDTH, Screen::Top() + 10), Point(0., -1.), 10.f, 10.f, 5.f, Color(mainScroll > 0 ? .8f : .2f, 0.f)); @@ -1016,20 +1009,12 @@ int ShopPanel::DrawPlayerShipInfo(const Point &point) bool ShopPanel::DoScroll(double dy) { - double *scroll = &mainScroll; - double maximum = maxMainScroll; if(activePane == ShopPane::Info) - { - scroll = &infobarScroll; - maximum = maxInfobarScroll; - } + infobarScroll = max(0., min(maxInfobarScroll, infobarScroll - dy)); else if(activePane == ShopPane::Sidebar) - { - scroll = &sidebarScroll; - maximum = maxSidebarScroll; - } - - *scroll = max(0., min(maximum, *scroll - dy)); + sidebarScroll = max(0., min(maxSidebarScroll, sidebarScroll - dy)); + else + mainScroll = max(0., min(maxMainScroll, mainScroll - dy)); return true; } @@ -1080,6 +1065,7 @@ void ShopPanel::SideSelect(int count) if(playerShip) playerShips.insert(playerShip); + CheckSelection(); return; } @@ -1142,194 +1128,272 @@ void ShopPanel::SideSelect(Ship *ship) playerShips.erase(ship); if(playerShip == ship) playerShip = playerShips.empty() ? nullptr : *playerShips.begin(); + CheckSelection(); return; } playerShip = ship; playerShips.insert(playerShip); - sameSelectedTopY = true; + CheckSelection(); +} + + + +// If selected item is offscreen, scroll just enough to put it on. +void ShopPanel::MainAutoScroll(const vector::const_iterator &selected) +{ + const int TILE_SIZE = TileSize(); + const int topY = selected->Center().Y() - TILE_SIZE / 2; + const int offTop = topY + Screen::Bottom(); + if(offTop < 0) + mainScroll += offTop; + else + { + const int offBottom = topY + TILE_SIZE - Screen::Bottom(); + if(offBottom > 0) + mainScroll += offBottom; + } } void ShopPanel::MainLeft() { - vector::const_iterator start = MainStart(); - if(start == zones.end()) + if(zones.empty()) return; vector::const_iterator it = Selected(); - // Special case: nothing is selected. Go to the last item. - if(it == zones.end()) + + if(it == zones.end() || it == zones.begin()) { + it = zones.end(); --it; mainScroll = maxMainScroll; - selectedShip = it->GetShip(); - selectedOutfit = it->GetOutfit(); - return; - } - - if(it == start) - { - mainScroll = 0; - selectedShip = nullptr; - selectedOutfit = nullptr; + mainSmoothScroll = maxMainScroll; } else { - int previousY = it->Center().Y(); --it; - mainScroll += it->Center().Y() - previousY; - if(mainScroll < 0) - mainScroll = 0; - selectedShip = it->GetShip(); - selectedOutfit = it->GetOutfit(); + MainAutoScroll(it); } + + selectedShip = it->GetShip(); + selectedOutfit = it->GetOutfit(); } void ShopPanel::MainRight() { - vector::const_iterator start = MainStart(); - if(start == zones.end()) + if(zones.empty()) return; vector::const_iterator it = Selected(); - // Special case: nothing is selected. Select the first item. - if(it == zones.end()) - { - // Already at mainScroll = 0, no scrolling needed. - selectedShip = start->GetShip(); - selectedOutfit = start->GetOutfit(); - return; - } - int previousY = it->Center().Y(); - ++it; - if(it == zones.end()) + if(it == zones.end() || ++it == zones.end()) { + it = zones.begin(); mainScroll = 0; - selectedShip = nullptr; - selectedOutfit = nullptr; + mainSmoothScroll = 0; } else - { - if(it->Center().Y() != previousY) - mainScroll += it->Center().Y() - previousY - mainDetailHeight; - if(mainScroll > maxMainScroll) - mainScroll = maxMainScroll; - selectedShip = it->GetShip(); - selectedOutfit = it->GetOutfit(); - } + MainAutoScroll(it); + + selectedShip = it->GetShip(); + selectedOutfit = it->GetOutfit(); } void ShopPanel::MainUp() { - vector::const_iterator start = MainStart(); - if(start == zones.end()) + if(zones.empty()) return; vector::const_iterator it = Selected(); - // Special case: nothing is selected. Go to the last item. + // Special case: nothing is selected. Start from the first item. if(it == zones.end()) + it = zones.begin(); + + const double previousX = it->Center().X(); + const double previousY = it->Center().Y(); + while(it != zones.begin() && it->Center().Y() == previousY) + --it; + if(it == zones.begin() && it->Center().Y() == previousY) { + it = zones.end(); --it; mainScroll = maxMainScroll; - selectedShip = it->GetShip(); - selectedOutfit = it->GetOutfit(); - return; + mainSmoothScroll = maxMainScroll; } + else + MainAutoScroll(it); - int previousX = it->Center().X(); - int previousY = it->Center().Y(); - while(it != start && it->Center().Y() == previousY) - --it; - while(it != start && it->Center().X() > previousX) + while(it->Center().X() > previousX) --it; - if(it == start && it->Center().Y() == previousY) - { - mainScroll = 0; - selectedShip = nullptr; - selectedOutfit = nullptr; - } - else - { - mainScroll += it->Center().Y() - previousY; - if(mainScroll < 0) - mainScroll = 0; - selectedShip = it->GetShip(); - selectedOutfit = it->GetOutfit(); - } + selectedShip = it->GetShip(); + selectedOutfit = it->GetOutfit(); } void ShopPanel::MainDown() { - vector::const_iterator start = MainStart(); - if(start == zones.end()) + if(zones.empty()) return; vector::const_iterator it = Selected(); // Special case: nothing is selected. Select the first item. if(it == zones.end()) { - // Already at mainScroll = 0, no scrolling needed. - selectedShip = start->GetShip(); - selectedOutfit = start->GetOutfit(); + mainScroll = 0; + mainSmoothScroll = 0; + selectedShip = zones.begin()->GetShip(); + selectedOutfit = zones.begin()->GetOutfit(); return; } - int previousX = it->Center().X(); - int previousY = it->Center().Y(); + const double previousX = it->Center().X(); + const double previousY = it->Center().Y(); + ++it; while(it != zones.end() && it->Center().Y() == previousY) ++it; if(it == zones.end()) { + it = zones.begin(); mainScroll = 0; - selectedShip = nullptr; - selectedOutfit = nullptr; - return; + mainSmoothScroll = 0; } + else + MainAutoScroll(it); - int newY = it->Center().Y(); + // Overshoot by one in case this line is shorter than the previous one. + const double newY = it->Center().Y(); + ++it; while(it != zones.end() && it->Center().X() <= previousX && it->Center().Y() == newY) ++it; --it; - mainScroll = min(mainScroll + it->Center().Y() - previousY - mainDetailHeight, maxMainScroll); selectedShip = it->GetShip(); selectedOutfit = it->GetOutfit(); } -vector::const_iterator ShopPanel::Selected() const +// If the selected item is no longer displayed, advance selection until we find something that is. +void ShopPanel::CheckSelection() { - // Find the object that was clicked on. - vector::const_iterator it = MainStart(); + if((!selectedOutfit && !selectedShip) || + (selectedShip && HasItem(selectedShip->VariantName())) || + (selectedOutfit && HasItem(selectedOutfit->TrueName()))) + return; + + vector::const_iterator it = Selected(); + if(it == zones.end()) + return; + const vector::const_iterator oldIt = it; + + // Advance to find next valid selection. for( ; it != zones.end(); ++it) - if(it->GetShip() == selectedShip && it->GetOutfit() == selectedOutfit) + { + const Ship *ship = it->GetShip(); + const Outfit *outfit = it->GetOutfit(); + if((ship && HasItem(ship->VariantName())) || (outfit && HasItem(outfit->TrueName()))) break; + } - return it; + // If that didn't work, try the other direction. + if(it == zones.end()) + { + it = oldIt; + while(it != zones.begin()) + { + --it; + const Ship *ship = it->GetShip(); + const Outfit *outfit = it->GetOutfit(); + if((ship && HasItem(ship->VariantName())) || (outfit && HasItem(outfit->TrueName()))) + { + ++it; + break; + } + } + + if(it == zones.begin()) + { + // No displayed objects, apparently. + selectedShip = nullptr; + selectedOutfit = nullptr; + return; + } + --it; + } + + selectedShip = it->GetShip(); + selectedOutfit = it->GetOutfit(); + MainAutoScroll(it); } -vector::const_iterator ShopPanel::MainStart() const +// The selected item's category has collapsed, to advance to next displayed item. +void ShopPanel::CategoryAdvance(const string &category) { - // Find the first non-player-ship click zone. - int margin = Screen::Right() - SHIP_SIZE; - vector::const_iterator start = zones.begin(); - while(start != zones.end() && start->Center().X() > margin) - ++start; + vector::const_iterator it = Selected(); + if(it == zones.end()) + return; + const vector::const_iterator oldIt = it; - return start; + // Advance to find next valid selection. + for( ; it != zones.end(); ++it) + { + const Ship *ship = it->GetShip(); + const Outfit *outfit = it->GetOutfit(); + if((ship && ship->Attributes().Category() != category) || (outfit && outfit->Category() != category)) + break; + } + + // If that didn't work, try the other direction. + if(it == zones.end()) + { + it = oldIt; + while(it != zones.begin()) + { + --it; + const Ship *ship = it->GetShip(); + const Outfit *outfit = it->GetOutfit(); + if((ship && ship->Attributes().Category() != category) || (outfit && outfit->Category() != category)) + { + ++it; + break; + } + } + + if(it == zones.begin()) + { + // No displayed objects, apparently. + selectedShip = nullptr; + selectedOutfit = nullptr; + return; + } + --it; + } + + selectedShip = it->GetShip(); + selectedOutfit = it->GetOutfit(); +} + + + +// Find the currently selected item. +vector::const_iterator ShopPanel::Selected() const +{ + vector::const_iterator it = zones.begin(); + for( ; it != zones.end(); ++it) + if(it->GetShip() == selectedShip && it->GetOutfit() == selectedOutfit) + break; + + return it; } diff --git a/source/ShopPanel.h b/source/ShopPanel.h index 402820d0318e..0278e45697a2 100644 --- a/source/ShopPanel.h +++ b/source/ShopPanel.h @@ -79,7 +79,7 @@ class ShopPanel : public Panel { virtual int TileSize() const = 0; virtual int VisibilityCheckboxesSize() const; virtual bool HasItem(const std::string &name) const = 0; - virtual void DrawItem(const std::string &name, const Point &point, int scrollY) = 0; + virtual void DrawItem(const std::string &name, const Point &point) = 0; virtual int DividerOffset() const = 0; virtual int DetailWidth() const = 0; virtual int DrawDetails(const Point ¢er) = 0; @@ -106,20 +106,19 @@ class ShopPanel : public Panel { int64_t LicenseCost(const Outfit *outfit, bool onlyOwned = false) const; + void CheckSelection(); + protected: class Zone : public ClickZone { public: - explicit Zone(Point center, Point size, const Ship *ship, double scrollY = 0.); - explicit Zone(Point center, Point size, const Outfit *outfit, double scrollY = 0.); + explicit Zone(Point center, Point size, const Ship *ship); + explicit Zone(Point center, Point size, const Outfit *outfit); const Ship *GetShip() const; const Outfit *GetOutfit() const; - double ScrollY() const; - private: - double scrollY = 0.; const Outfit *outfit = nullptr; }; @@ -162,20 +161,19 @@ class ShopPanel : public Panel { // (It may be worth moving the above pointers into the derived classes in the future.) double mainScroll = 0.; + double mainSmoothScroll = 0; double sidebarScroll = 0.; + double sidebarSmoothScroll = 0.; double infobarScroll = 0.; + double infobarSmoothScroll = 0.; double maxMainScroll = 0.; double maxSidebarScroll = 0.; double maxInfobarScroll = 0.; ShopPane activePane = ShopPane::Main; - int mainDetailHeight = 0; - int sideDetailHeight = 0; - bool scrollDetailsIntoView = false; - double selectedTopY = 0.; - bool sameSelectedTopY = false; char hoverButton = '\0'; std::vector zones; + std::vector> shipZones; std::vector> categoryZones; std::map> catalog; @@ -202,15 +200,20 @@ class ShopPanel : public Panel { bool SetScrollToBottom(); void SideSelect(int count); void SideSelect(Ship *ship); + void MainAutoScroll(const std::vector::const_iterator &selected); void MainLeft(); void MainRight(); void MainUp(); void MainDown(); + void CategoryAdvance(const std::string &category); std::vector::const_iterator Selected() const; - std::vector::const_iterator MainStart() const; // Check if the given point is within the button zone, and if so return the // letter of the button (or ' ' if it's not on a button). char CheckButton(int x, int y); + + +private: + bool delayedAutoScroll = false; }; From 633ef96d8cf4dd6e410071ad6235acae48ac178c Mon Sep 17 00:00:00 2001 From: warp-core Date: Sat, 23 Sep 2023 00:57:59 +0100 Subject: [PATCH 17/79] fix: Fix departure if the player has less crew than required (#9326) --- source/PlanetPanel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/PlanetPanel.cpp b/source/PlanetPanel.cpp index de7150638ed2..97f5416f060c 100644 --- a/source/PlanetPanel.cpp +++ b/source/PlanetPanel.cpp @@ -305,7 +305,7 @@ void PlanetPanel::CheckWarningsAndTakeOff() const CargoHold &cargo = player.DistributeCargo(); // Are you overbooked? Don't count fireable flagship crew. // (If your ship can't support its required crew, it is counted as having no fireable crew.) - const int overbooked = cargo.Passengers() - flagship->Crew() + flagship->RequiredCrew(); + const int overbooked = cargo.Passengers() - max(0, flagship->Crew() - flagship->RequiredCrew()); const int missionCargoToSell = cargo.MissionCargoSize(); // Will you have to sell something other than regular cargo? const int commoditiesToSell = cargo.CommoditiesSize(); From 994d3504414d8ea7102e00313e8da00f7d3dc3dd Mon Sep 17 00:00:00 2001 From: warp-core Date: Sat, 23 Sep 2023 01:03:29 +0100 Subject: [PATCH 18/79] chore: Add editorconfig entry for credits.txt (#9328) --- .editorconfig | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.editorconfig b/.editorconfig index 8a9770da9b93..fa1e1f9fbd68 100644 --- a/.editorconfig +++ b/.editorconfig @@ -23,6 +23,11 @@ indent_style = unset indent_style = space indent_size = 2 +# Credits file +[credits.txt] +indent_style = space +indent_size = 2 + # Markdown [*.md] trim_trailing_whitespace = false From 6c4669611ff4184eeead3ce68aafe1e51dce3045 Mon Sep 17 00:00:00 2001 From: warp-core Date: Sat, 23 Sep 2023 01:42:58 +0100 Subject: [PATCH 19/79] feat(mechanics): Allow auto-refilling ammo from storage (#9327) --- source/OutfitterPanel.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/source/OutfitterPanel.cpp b/source/OutfitterPanel.cpp index 75356bc845f4..13f9d1511db5 100644 --- a/source/OutfitterPanel.cpp +++ b/source/OutfitterPanel.cpp @@ -891,16 +891,21 @@ void OutfitterPanel::CheckRefill() for(const Outfit *outfit : toRefill) { int amount = ship->Attributes().CanAdd(*outfit, numeric_limits::max()); - if(amount > 0 && (outfitter.Has(outfit) || player.Stock(outfit) > 0 || player.Cargo().Get(outfit))) - needed[outfit] += amount; + if(amount > 0) + { + bool available = outfitter.Has(outfit) || player.Stock(outfit) > 0; + available = available || player.Cargo().Get(outfit) || player.Storage()->Get(outfit); + if(available) + needed[outfit] += amount; + } } } int64_t cost = 0; for(auto &it : needed) { - // Don't count cost of anything installed from cargo. - it.second = max(0, it.second - player.Cargo().Get(it.first)); + // Don't count cost of anything installed from cargo or storage. + it.second = max(0, it.second - player.Cargo().Get(it.first) - player.Storage()->Get(it.first)); if(!outfitter.Has(it.first)) it.second = min(it.second, max(0, player.Stock(it.first))); cost += player.StockDepreciation().Value(it.first, day, it.second); @@ -931,8 +936,11 @@ void OutfitterPanel::Refill() int neededAmmo = ship->Attributes().CanAdd(*outfit, numeric_limits::max()); if(neededAmmo > 0) { - // Fill first from any stockpiles in cargo. - int fromCargo = player.Cargo().Remove(outfit, neededAmmo); + // Fill first from any stockpiles in storage. + const int fromStorage = player.Storage()->Remove(outfit, neededAmmo); + neededAmmo -= fromStorage; + // Then from cargo. + const int fromCargo = player.Cargo().Remove(outfit, neededAmmo); neededAmmo -= fromCargo; // Then, buy at reduced (or full) price. int available = outfitter.Has(outfit) ? neededAmmo : min(neededAmmo, max(0, player.Stock(outfit))); @@ -942,7 +950,7 @@ void OutfitterPanel::Refill() player.Accounts().AddCredits(-price); player.AddStock(outfit, -available); } - ship->AddOutfit(outfit, available + fromCargo); + ship->AddOutfit(outfit, available + fromStorage + fromCargo); } } } From 38e460af6c795307d41581806f9228630615df8b Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 23 Sep 2023 13:13:58 +0200 Subject: [PATCH 20/79] docs: Clarify what tools are needed if using another MinGW distribution (#9321) --- docs/readme-cmake.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/readme-cmake.md b/docs/readme-cmake.md index 53452c3a9e3c..401eb15c2daf 100644 --- a/docs/readme-cmake.md +++ b/docs/readme-cmake.md @@ -31,12 +31,10 @@ We recommend using Visual Studio 2022 or newer. If you are unsure of which editi ### Windows (MinGW) -You can download the [MinGW Winlibs](https://winlibs.com/#download-release) build, which also includes various tools you'll need to build the game as well. It is possible to use other MinGW distributions too (like Msys2 for example). +We recommend the [MinGW Winlibs](https://winlibs.com/#download-release) distribution, which also includes various tools you'll need to build the game as well. It is possible to use other MinGW distributions too (like Msys2 for example), but you'll need to make sure to install [CMake](https://cmake.org/) (3.21 or later) and [Ninja](https://ninja-build.org/). You'll need the POSIX version of MinGW. For the Winlibs distribution mentioned above, the latest version is currently gcc 13 ([direct download link](https://github.com/brechtsanders/winlibs_mingw/releases/download/13.2.0-16.0.6-11.0.0-ucrt-r1/winlibs-x86_64-posix-seh-gcc-13.2.0-mingw-w64ucrt-11.0.0-r1.zip)). Download and extract the zip file in a folder whose path doesn't contain a space (C:\ for example) and add the bin\ folder inside to your PATH (Press the Windows key and type "edit environment variables", then click on PATH and add it to the list). -You will also need at least [CMake](https://cmake.org/download/) 3.21. You can check if you have CMake already installed by running `cmake -v` in command line window. - ### MacOS Install [Homebrew](https://brew.sh). Once it is installed, use it to install the tools and libraries you will need: @@ -113,6 +111,13 @@ Most IDEs have CMake support, and can be used to build the game. We recommend us After installing VS Code, install the [C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) and [CMake Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) extensions, and open the project folder under File -> Open Folder. +
+Other recommended extensions + +- [EditorConfig](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) + +
+ You'll be asked to select a preset. Select the one you want (see the list above in the previous section for help). If you get asked to configure the project, click on Yes. You can use the bar at the very bottom to select between different configurations (Debug/Release), build, start the game, and execute the unit tests. On the left you can click on the test icon to run individual integration tests. #### Visual Studio From 1d4402cf39e5468ddadc89421d5f92888304821a Mon Sep 17 00:00:00 2001 From: Arachi-Lover <82293490+Arachi-Lover@users.noreply.github.com> Date: Sat, 23 Sep 2023 12:18:56 -0300 Subject: [PATCH 21/79] fix(typo): Remove an erroneous "and" from an on visit dialog (#9323) --- data/human/free worlds side plots.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/human/free worlds side plots.txt b/data/human/free worlds side plots.txt index 2dd100835c52..a57e3ded5fff 100644 --- a/data/human/free worlds side plots.txt +++ b/data/human/free worlds side plots.txt @@ -357,7 +357,7 @@ mission "FW Flamethrower 2" ship "Doombat" "Doombat" on visit - dialog `You've landed on , but you have not disabled the yet. Disable it and before returning.` + dialog `You've landed on , but you have not disabled the yet. Disable it before returning.` on complete event "flamethrower available" 30 log "Assisted Barmy Edward with another weapon test: this time, a flamethrower weapon that works by overheating and disabling its target rather than dealing lots of damage to it. It may or may not be useful in actual combat." From 9eb74d26b3570b74382ca88d61c684682423a805 Mon Sep 17 00:00:00 2001 From: warp-core Date: Sun, 24 Sep 2023 00:32:06 +0100 Subject: [PATCH 22/79] fix: Invalidate travel plan if it became invalid (#9289) Also make sure that systems with a custom jump range correctly check if a neighboring system is in range. --- source/Engine.cpp | 25 +++++++++++++++++++++++++ source/ShipJumpNavigation.cpp | 30 +++++++++++++++++++++++++++--- source/ShipJumpNavigation.h | 3 +++ 3 files changed, 55 insertions(+), 3 deletions(-) diff --git a/source/Engine.cpp b/source/Engine.cpp index b1f596d23a7c..9570afc1cf96 100644 --- a/source/Engine.cpp +++ b/source/Engine.cpp @@ -600,6 +600,31 @@ void Engine::Step(bool isActive) // Update this here, for thread safety. if(player.HasTravelPlan() && currentSystem == player.TravelPlan().back()) player.PopTravel(); + // Check if the first step of the travel plan is valid. + if(flagship && player.HasTravelPlan()) + { + bool travelPlanIsValid = false; + const System *system = player.TravelPlan().back(); + for(const StellarObject &object : flagship->GetSystem()->Objects()) + if(object.HasSprite() && object.HasValidPlanet() && object.GetPlanet()->IsWormhole() + && object.GetPlanet()->IsAccessible(flagship.get()) && player.HasVisited(*object.GetPlanet()) + && player.HasVisited(*system)) + { + const auto *wormhole = object.GetPlanet()->GetWormhole(); + if(&wormhole->WormholeDestination(*flagship->GetSystem()) != system) + continue; + + travelPlanIsValid = true; + break; + } + travelPlanIsValid |= flagship->JumpNavigation().CanJump(flagship->GetSystem(), system); + if(!travelPlanIsValid) + { + if(flagship->GetTargetSystem() == player.TravelPlan().back()) + flagship->SetTargetSystem(nullptr); + player.TravelPlan().clear(); + } + } if(doFlash) { flash = .4; diff --git a/source/ShipJumpNavigation.cpp b/source/ShipJumpNavigation.cpp index 52e4d869c6e3..64572db7eaed 100644 --- a/source/ShipJumpNavigation.cpp +++ b/source/ShipJumpNavigation.cpp @@ -140,11 +140,13 @@ pair ShipJumpNavigation::GetCheapestJumpType(const System *fro double hyperFuelNeeded = HyperdriveFuel(); // If these two systems are linked, or if the system we're jumping from has its own jump range, // then use the cheapest jump drive available, which is mapped to a distance of 0. + const double distance = from->Position().Distance(to->Position()); double jumpFuelNeeded = JumpDriveFuel((linked || from->JumpRange()) - ? 0. : from->Position().Distance(to->Position())); - if(linked && hasHyperdrive && (!jumpFuelNeeded || hyperFuelNeeded <= jumpFuelNeeded)) + ? 0. : distance); + bool canJump = jumpFuelNeeded && (!from->JumpRange() || from->JumpRange() >= distance); + if(linked && hasHyperdrive && (!canJump || hyperFuelNeeded <= jumpFuelNeeded)) return make_pair(JumpType::HYPERDRIVE, hyperFuelNeeded); - else if(hasJumpDrive) + else if(hasJumpDrive && canJump) return make_pair(JumpType::JUMP_DRIVE, jumpFuelNeeded); else return make_pair(JumpType::NONE, 0.); @@ -152,6 +154,28 @@ pair ShipJumpNavigation::GetCheapestJumpType(const System *fro +// Get if this ship can make a hyperspace or jump drive jump directly from one system to the other. +bool ShipJumpNavigation::CanJump(const System *from, const System *to) const +{ + if(!from || !to) + return false; + + if(from->Links().count(to) && (hasHyperdrive || hasJumpDrive)) + return true; + + if(!hasJumpDrive) + return false; + + const double distanceSquared = from->Position().DistanceSquared(to->Position()); + if(from->JumpRange() && from->JumpRange() * from->JumpRange() < distanceSquared) + return false; + + const double maxRange = jumpDriveCosts.rbegin()->first; + return maxRange * maxRange >= distanceSquared; +} + + + // Check what jump methods this ship has. bool ShipJumpNavigation::HasHyperdrive() const { diff --git a/source/ShipJumpNavigation.h b/source/ShipJumpNavigation.h index 67107ad991d7..546e32bb2f62 100644 --- a/source/ShipJumpNavigation.h +++ b/source/ShipJumpNavigation.h @@ -60,6 +60,9 @@ class ShipJumpNavigation { // Get the cheapest jump method between the two given systems. std::pair GetCheapestJumpType(const System *from, const System *to) const; + // Get if this ship can make a hyperspace or jump drive jump directly from one system to the other. + bool CanJump(const System *from, const System *to) const; + // Check what jump methods this ship has. bool HasHyperdrive() const; bool HasScramDrive() const; From cfd5e030e415d3690c10cafaff8a5b0cb5998e73 Mon Sep 17 00:00:00 2001 From: Arachi-Lover <82293490+Arachi-Lover@users.noreply.github.com> Date: Sat, 23 Sep 2023 23:18:53 -0300 Subject: [PATCH 23/79] feat(content): Coalition: Lunarium Intro (#6646) --- copyright | 20 + data/coalition/coalition jobs.txt | 294 +++- data/coalition/coalition news.txt | 35 + data/coalition/coalition outfits.txt | 60 + data/coalition/coalition ships.txt | 20 + data/coalition/coalition.txt | 462 +++++ data/coalition/lunarium intro.txt | 2033 ++++++++++++++++++++++ data/governments.txt | 23 + data/map planets.txt | 4 +- data/quarg/quarg missions.txt | 2 +- images/outfit/anti-materiel gun.png | Bin 0 -> 24150 bytes images/outfit/decoy plating.png | Bin 0 -> 21176 bytes images/outfit/refuelling module.png | Bin 0 -> 18118 bytes images/outfit/shield refactor module.png | Bin 0 -> 37443 bytes images/outfit/small recovery module.png | Bin 0 -> 31800 bytes 15 files changed, 2948 insertions(+), 5 deletions(-) create mode 100644 data/coalition/lunarium intro.txt create mode 100644 images/outfit/anti-materiel gun.png create mode 100644 images/outfit/decoy plating.png create mode 100644 images/outfit/refuelling module.png create mode 100644 images/outfit/shield refactor module.png create mode 100644 images/outfit/small recovery module.png diff --git a/copyright b/copyright index 50f4333bf0a1..c28a01297ea9 100644 --- a/copyright +++ b/copyright @@ -1124,6 +1124,7 @@ Files: images/outfit/swatter* images/outfit/thorax?cannon* images/outfit/*rift* + images/outfit/decoy?plating* images/planet/dyson1* images/planet/dyson2* images/planet/dyson3* @@ -1447,6 +1448,12 @@ Copyright: Becca Tommaso License: CC-BY-SA-4.0 Comment: Derived from works by Nate Graham (under the same license). +Files: + images/outfit/refuelling?module* +Copyright: Becca Tommaso +License: CC-BY-SA-4.0 +Comment: Derived from works by Michael Zahniser (under the same license). + Files: images/outfit/tripulse?shredder* images/outfit/value?detector* @@ -1655,6 +1662,7 @@ License: CC-BY-SA-3.0 Comment: Derived from works by Becca Tommaso (under the same license). Files: + images/outfit/shield?refactor?module* images/ship/carrier* images/ship/combat?drone* images/ship/cruiser* @@ -2051,6 +2059,18 @@ Copyright: Becca Tommaso License: CC0 Comment: Derived from works by ESA/Rosetta spacecraft (under the same license). + +Files: + images/outfit/small?recovery?module* +Copyright: 1010todd +License: CC-BY-SA-4.0 +Comment: Derived from works by Michael Zahniser (under the same license). + +Files: + images/outfit/anti-materiel?gun* +Copyright: 1010todd +License: CC-BY-SA-4.0 + Files: images/outfit/android* images/outfit/skadetear* diff --git a/data/coalition/coalition jobs.txt b/data/coalition/coalition jobs.txt index e9d260bc6263..e861579515f7 100644 --- a/data/coalition/coalition jobs.txt +++ b/data/coalition/coalition jobs.txt @@ -385,7 +385,7 @@ mission "Coalition: Peacekeepers 1" job repeat name "Peacekeepers to " - description "Transport this corps of peacekeepers to to investigate reports of Resistance activity. Payment is ." + description "Transport this corps of peacekeepers to to investigate reports of Lunarium activity. Payment is ." passengers 10 10 .2 to offer has "known to the heliarchs" @@ -406,7 +406,7 @@ mission "Coalition: Peacekeepers 2" job repeat name "Peacekeepers to " - description "Transport this corps of peacekeepers to to investigate reports of Resistance activity. Payment is ." + description "Transport this corps of peacekeepers to to investigate reports of Lunarium activity. Payment is ." passengers 10 5 .1 to offer has "known to the heliarchs" @@ -1393,3 +1393,293 @@ mission "Heliarchs Buy Jump Drive Job 2" outfit "Jump Drive" -1 payment 5000000 fail + + +mission "Evacuate Lunarium True" + job + repeat + name "Rescue Lunarium Members" + description "Pick up Lunarium members on , then bring them to by ." + deadline + to offer + random < 10 + has "Lunarium Evacuation 6: done" + not "Heliarch Investigation 2: active" + not "Heliarch License: done" + to fail + has "Heliarch Investigation 2: active" + has "Heliarch License: done" + passengers 24 65 + source + government "Coalition" + stopover + government "Coalition" + distance 2 6 + destination + government "Coalition" + distance 3 5 + on stopover + dialog `The Lunarium members rush to your ship once it touches down on the hangars, and you swiftly open your hatch for them to come in. One of the calmer members asks that you head to as soon as possible.` + on visit + dialog phrase "generic missing stopover or passengers" + on complete + payment + payment 33000 + dialog `Each of the Lunarium members comes to thank you before they leave your ship, expressing their gratitude. The last one hands you , and heads off with the others.` + +mission "Evacuate Lunarium Fail" + job + repeat + name "Rescue Lunarium Members" + description "Pick up the Lunarium members on , then bring them to by ." + deadline + to offer + random < 5 + has "Lunarium Evacuation 6: done" + not "Heliarch Investigation 2: active" + not "Heliarch License: done" + to fail + has "Heliarch Investigation 2: active" + has "Heliarch License: done" + passengers 24 65 + source + government "Coalition" + stopover + government "Coalition" + distance 2 6 + destination + government "Coalition" + distance 3 5 + on stopover + dialog `You touch down on the hangars, and wait for a few minutes for the Lunarium members. Many minutes pass, however, and none arrive. Instead the docks become increasingly filled with Heliarch agents. A message appears on your monitor, saying that the Heliarchs got to the members here first, but thanking you for your efforts anyway.` + fail + + +mission "Lunarium: Armageddon Core Delivery" + job + repeat + name "Armageddon Core Delivery" + description "The Lunarium is offering for you to deliver an Armageddon Core to ." + to offer + random < 4 + has "Lunarium: Reactors: done" + not "Lunarium: Armageddon Core Delivery: active" + not "Heliarch Investigation 2: active" + not "Heliarch License: done" + to fail + has "Heliarch Investigation 2: active" + has "Heliarch License: done" + source + government "Coalition" + destination + distance 5 12 + not government "Heliarch" + not attributes "coalition station" + on visit + dialog phrase "generic cargo on visit" + on complete + outfit "Armageddon Core" -1 + payment 13500000 + dialog `Some Lunarium members unload the Armageddon Core after you land on an isolated part of as instructed. They hand you before quietly transporting the reactor away.` + +mission "Lunarium: Fusion Reactor Delivery" + job + repeat + name "Fusion Reactor Delivery" + description "The Lunarium is offering for you to deliver a Fusion Reactor to ." + to offer + random < 7 + has "Lunarium: Reactors: done" + not "Lunarium: Fusion Reactor Delivery: active" + not "Heliarch Investigation 2: active" + not "Heliarch License: done" + to fail + has "Heliarch Investigation 2: active" + has "Heliarch License: done" + source + government "Coalition" + destination + distance 3 8 + not government "Heliarch" + not attributes "coalition station" + on visit + dialog phrase "generic cargo on visit" + on complete + outfit "Fusion Reactor" -1 + payment 7500000 + dialog `Some Lunarium members unload the Fusion Reactor after you land on an isolated part of as instructed. They hand you before quietly transporting the reactor away.` + +mission "Lunarium: Breeder Reactor Delivery" + job + repeat + name "Breeder Reactor Delivery" + description "The Lunarium is offering for you to deliver a Breeder Reactor to ." + to offer + random < 10 + has "Lunarium: Reactors: done" + not "Lunarium: Breeder Reactor Delivery: active" + not "Heliarch Investigation 2: active" + not "Heliarch License: done" + to fail + has "Heliarch Investigation 2: active" + has "Heliarch License: done" + source + government "Coalition" + destination + distance 3 6 + not government "Heliarch" + not attributes "coalition station" + on visit + dialog phrase "generic cargo on visit" + on complete + outfit "Breeder Reactor" -1 + payment 3250000 + dialog `Some Lunarium members unload the Breeder Reactor after you land on an isolated part of as instructed. They hand you before quietly transporting the reactor away.` + +mission "Lunarium: Torpedo Delivery" + job + repeat + name "Torpedo Delivery" + description "The Lunarium is offering for you to deliver a Torpedo Launcher, complete with 30 torpedoes, to ." + to offer + random < 12 + has "Lunarium: Torpedoes: done" + not "Lunarium: Torpedo Delivery: active" + not "Heliarch Investigation 2: active" + not "Heliarch License: done" + to fail + has "Heliarch Investigation 2: active" + has "Heliarch License: done" + source + government "Coalition" + destination + distance 6 12 + not government "Heliarch" + on visit + dialog phrase "generic cargo on visit" + on complete + outfit "Torpedo Launcher" -1 + outfit "Torpedo" -30 + payment 183000 + dialog `Some Lunarium members unload the Torpedo Launcher and its ammunition after you land on an isolated part of as instructed. They hand you before quietly transporting the cargo away.` + +mission "Lunarium: Typhoon Delivery" + job + repeat + name "Typhoon Delivery" + description "The Lunarium is offering for you to deliver a Typhoon Launcher, complete with 30 Typhoon Torpedoes, to ." + to offer + random < 7 + has "Lunarium: Torpedoes: done" + not "Lunarium: Typhoon Delivery: active" + not "Heliarch Investigation 2: active" + not "Heliarch License: done" + to fail + has "Heliarch Investigation 2: active" + has "Heliarch License: done" + source + government "Coalition" + destination + distance 6 12 + not government "Heliarch" + on complete + outfit "Typhoon Launcher" -1 + outfit "Typhoon Torpedo" -30 + payment 511500 + dialog `Some Lunarium members unload the Typhoon Launcher and its ammunition after you land on an isolated part of as instructed. They hand you before quietly transporting the cargo away.` + +mission "Lunarium: Plasma Delivery" + job + repeat + name "Plasma Turret Delivery" + description "The Lunarium is offering for you to deliver a Plasma Turret to ." + to offer + random < 6 + has "Lunarium: Heat: done" + not "Lunarium: Plasma Delivery: active" + not "Heliarch Investigation 2: active" + not "Heliarch License: done" + to fail + has "Heliarch Investigation 2: active" + has "Heliarch License: done" + source + government "Coalition" + destination + distance 4 9 + not government "Heliarch" + on complete + outfit "Plasma Turret" -1 + payment 780000 + dialog `Some Lunarium members unload the Plasma Turret after you land on an isolated part of as instructed. They hand you before quietly transporting the turret away.` + +mission "Lunarium: Flamethrower Delivery" + job + repeat + name "Flamethrower Delivery" + description "The Lunarium is offering for you to deliver a pair of Flamethrowers to ." + to offer + random < 8 + has "Lunarium: Heat: done" + not "Lunarium: Flamethrower Delivery: active" + not "Heliarch Investigation 2: active" + not "Heliarch License: done" + to fail + has "Heliarch Investigation 2: active" + has "Heliarch License: done" + source + government "Coalition" + destination + distance 2 6 + not government "Heliarch" + on complete + outfit "Flamethrower" -2 + payment 570000 + dialog `Some Lunarium members unload the Flamethrowers after you land on an isolated part of as instructed. They hand you before quietly transporting the Flamethrowers away.` + +mission "Lunarium: Grenade Delivery" + job + repeat + name "Grenade Delivery" + description "The Lunarium is offering for you to deliver a dozen Fragmentation Grenades to ." + to offer + random < 11 + has "Lunarium: Grenades: done" + not "Lunarium: Grenade Delivery: active" + not "Heliarch Investigation 2: active" + not "Heliarch License: done" + to fail + has "Heliarch Investigation 2: active" + has "Heliarch License: done" + source + government "Coalition" + destination + distance 7 13 + not government "Heliarch" + on complete + outfit "Fragmentation Grenades" -12 + payment 306000 + dialog `Some Lunarium members unload the Fragmentation Grenades after you land on an isolated part of as instructed. They hand you before quietly transporting the grenades away.` + +mission "Lunarium: Anti-Missile Delivery" + job + repeat + name "Anti-Missile Delivery" + description "The Lunarium is are offering for you to deliver a Heavy Anti-Missile Turret to ." + to offer + random < 10 + has "Lunarium: AM: done" + not "Lunarium: Anti-Missile Delivery: active" + not "Heliarch Investigation 2: active" + not "Heliarch License: done" + to fail + has "Heliarch Investigation 2: active" + has "Heliarch License: done" + source + government "Coalition" + destination + distance 9 14 + not government "Heliarch" + on complete + outfit "Heavy Anti-Missile Turret" -1 + payment 225000 + dialog `Some Lunarium members unload the Heavy Anti-Missile Turret after you land on an isolated part of as instructed. They hand you before quietly transporting the turret away.` diff --git a/data/coalition/coalition news.txt b/data/coalition/coalition news.txt index 2bfd5c4e29e9..1997192efbdf 100644 --- a/data/coalition/coalition news.txt +++ b/data/coalition/coalition news.txt @@ -23,6 +23,9 @@ news "heliarch news" "A sizable crowd is watching one of the monitors in the spaceport where an interviewer is speaking to a Heliarch agent. You learn from someone in the crowd that the agent was a professional athlete until recently." "A news broadcast shows footage of many Heliarch agents arresting a group of terrorists. The Heliarch who was supervising the operation is later interviewed, explaining that the now prisoners were found to have stolen government equipment." "The news show a Heliarch consul giving a short speech in a ship launching ceremony. After they finish, the brand new Heliarch warships are shown heading to their first patrol." + "All the spaceport screens momentarily swap to a broadcast from the Heliarch government, where they show a video of several dozens of arrested criminals. The Heliarch host describing the event mentions their sentences range from 40 years to life, prompting varying reactions from the civilian spectators." + "During one of the more busy hours on the spaceport, the news details the crimes of a recently arrested terrorist group: arson, kidnapping, theft of government equipment, possession of weapons, conspiring against the Coalition, attacking both government and civilian properties, subversion... The list goes on for a few more minutes." + `After the latest report on how the Heliarchs arrested some terrorists on a nearby world, the news shows various short clips with the same message, asking the public to "stay vigilant" and report any and all suspicious activity.` news "heliarch propaganda" location @@ -89,6 +92,7 @@ news "heliarch agent" "An agent is trying to calm down a small crowd outside a local bar. After some minutes, the more agitated drunkards are convinced to accompany the agent to a nearby Heliarch office." "A pair of agents passes by you. Most of the spaceport crowd gives them a wide berth." `"A pilot, I once was. Learned from an older sibling, I did."` + `"Seen those charity workers in blue on some of our worlds, have you? Noble intentions they may have, but understand it I do not. Why trouble themselves with it when taking care of everyone, we already are?"` news "heliarch candidate" location @@ -431,3 +435,34 @@ news "coalition games crowd" "The lines of people heading to the Coalition Games seem to have stopped moving abruptly. Upon further investigation, you see some young Kimek have fallen on their backs and are being helped back to their feet one by one by both Heliarch agents and others from the crowd." "This is a particularly crowded part of the spaceport today. The lines of people waiting for admission into the Games have started crossing and looping in on themselves. Some even head inside shops and restaurants while others stretch into docking areas. Battalions of Heliarch agents work as hard as they can to bring everyone back into orderly lines." "Several children coming to see the Coalition Games are running and playing simplified versions of the events, sporting different colors and assets for different games. Their parents struggle to get them to settle down while keeping their spots in the waiting lines." + +news "lunarium charity" + location + government "Coalition" + not planet "Fourth Shadow" + name + word + "Charitable Organization" + message + word + "Several workers in blue uniforms are loading up cargo crates and containers full of charity goods into Coalition merchant ships." + "A few civilian captains in the spaceport are discussing their recent jobs for a charity organization. It seems they operate mostly in Kimek space." + "The spaceport has a few flyers glued to the entrance walls. You ask one of the locals, and they tell you they're for promoting a charity organization." + "Coalition families have formed a line to a large cargo ship. Brought by their parents, the children are one by one giving away blankets, outdated electronics, and all sorts of toys, which are all carefully packed into cargo containers. It seems they are donating to a charity organization." + "Charity workers are meeting with a few wealthy-looking individuals in the spaceport. Apparently all the expenses of the endeavor are paid by donations, and they are trying to bring in some new patrons to expand the efforts." + +news "lunarium charity worker" + to show + not "Heliarch License: offered" + location + government "Coalition" + name + word + "Charity worker" + message + word + `"Help bring amenity goods and services to those who can't afford them, we do. Operate mostly in Kimek space we do, if interested in helping you are."` + `"Interested in contributing to the charity, are you? Take every sort of donation, we do. Credits, winter supplies, trinkets, old tech devices. Whatever it is, if willing to donate you are, drop them here you can."` + `"Just finished filling up an entire Arach fleet's cargo holds with school supplies, we have. Very tiring, the job is, but glad I am that making a difference, our charity efforts are."` + `"Get most of our funding from some of the Arach Houses and rich Saryd families, we do. Meant only to acquire part of the charity goods and the means to transport them, the credits are, for voluntary work, this is."` + `Standing by the spaceport entrance, a worker is distributing flyers to those who come in and out. "Hello human visitor. Part of a charity group, I am, raising awareness to our cause. Aware were you, that lack the electronics for many educational activities, children on poor Kimek worlds do? Together, make a difference we can!"` diff --git a/data/coalition/coalition outfits.txt b/data/coalition/coalition outfits.txt index 64807d8d684d..a82625b7e19f 100644 --- a/data/coalition/coalition outfits.txt +++ b/data/coalition/coalition outfits.txt @@ -214,6 +214,57 @@ outfit "Fuel Module" description "In their early days of space exploration, the Saryds developed the Fuel Module to travel far from Saros without worrying about becoming stranded without fuel, or sudden fuel leaks." description " Nowadays, nearly every system in the Coalition has refueling facilities, but some captains still find use in the extra jumps these modules offer." +outfit "Decoy Plating" + category "Systems" + cost 93000 + thumbnail "outfit/decoy plating" + "mass" 7 + "outfit space" -7 + "scan interference" 2 + "radar jamming" 5 + description "This plating takes advantage of a ship's scan logs and reproduces the data of other ships nearby, effectively deflecting attempts to scan a ship's true cargo and equipment." + description " Out of a need to protect themselves against destructive Heliarch torpedoes, the Lunarium incorporated small, independent radar jamming systems in each section of the plating, if only to act as a last line of defense." + +outfit "Refuelling Module" + category "Systems" + cost 822000 + thumbnail "outfit/refuelling module" + "mass" 10 + "outfit space" -10 + "fuel capacity" -100 + "fuel generation" .1 + "energy consumption" .02 + description "To avoid the risk of being inspected by the Heliarchs as they refuel on planets, Lunarium captains employ this outfit when carrying supplies or stolen outfits." + description " The outfit's mechanisms need a partitioned amount of fuel set aside to allow it to work properly, so a ship can only install so many of these before becoming incapable of jumping to another system." + +outfit "Shield Refactor Module" + category "Systems" + cost 2843000 + thumbnail "outfit/shield refactor module" + "mass" 7 + "outfit space" -7 + "hull repair rate" -.2 + "shield energy" .2 + "shield heat" .24 + "shield generation multiplier" .25 + "hull repair multiplier" -.2 + description "In theory, all shield generators can operate at a much faster rate than normal, if pushed to their true limit. However, the constant need to reform shields during a heated battle quickly overloads shield generators and damages them in the process. By relocating dedicated hull repair systems to focus exclusively on repairing such damage, this compact device allows shield generators to reach their true potential." + description " A much needed boon against the Heliarch torpedoes' devastating effects on hull plating, the Lunarium highly favors production of this expensive piece due to its advantages over other shield generators." + +outfit "Small Recovery Module" + category "Systems" + cost 625000 + thumbnail "outfit/small recovery module" + "mass" 25 + "outfit space" -25 + "shield generation" .97 + "shield energy" .43 + "shield heat" .7 + "hull repair rate" .43 + "hull energy" .97 + "hull heat" .07 + description "By combining the Coalition's shield generation and hull repair technologies into one piece of equipment, the Lunarium has increased the effectiveness of both, allowing for better defenses against Heliarch weaponry." + outfit "Scanning Module" category "Systems" licenses @@ -366,6 +417,15 @@ outfit "Enforcer Riot Staff" "unplunderable" 1 description "Made to deal with the occasional dissidents that pop up around Coalition space in a non-lethal manner, these weapons see minimal use in shipbound combat, but are carried anyway in the event a dissident gets aboard." +outfit "Anti-Materiel Gun" + category "Hand to Hand" + cost 128600 + thumbnail "outfit/anti-materiel gun" + "capture attack" 3.6 + "capture defense" 1.8 + "unplunderable" 1 + description "Easy to use and relatively cheap to manufacture, these weapons were born by refurbishing the Heliarchs' favored arms, with the new barrel shaping the energy into deadly blasts that make short work of even the toughest body armor." + outfit "Coalition License" category "Licenses" thumbnail "outfit/coalition license" diff --git a/data/coalition/coalition ships.txt b/data/coalition/coalition ships.txt index e0b40563c2ff..a2b883c6e481 100644 --- a/data/coalition/coalition ships.txt +++ b/data/coalition/coalition ships.txt @@ -270,6 +270,7 @@ ship "Arach Spindle" "final explode" "final explosion large" description `The Arach Hulk is an ungainly, lumbering behemoth of a ship, but with its side pods removed it becomes the much more maneuverable Spindle. Because of its much lower cargo space, usually the only reason a fleet would include a Spindle is if they are planning on picking up new cargo pods at their destination.` + ship "Arach Spindle" "Arach Spindle (Miner)" outfits "MCS Extractor" 2 @@ -291,6 +292,25 @@ ship "Arach Spindle" "Arach Spindle (Miner)" "Small Steering Module" "Hyperdrive" +ship "Arach Spindle" "Arach Spindle (Jump Drive)" + outfits + "Large Collector Module" 3 + "Small Collector Module" 2 + "Large Battery Module" + "Large Shield Module" + "Small Shield Module" + "Large Repair Module" + "Small Repair Module" 2 + "Cooling Module" 2 + "Fuel Module" 4 + + "Large Thrust Module" 2 + "Small Thrust Module" 3 + "Large Steering Module" 2 + "Small Steering Module" + "Jump Drive" + + ship "Arach Transport" sprite "ship/arach transport" thumbnail "thumbnail/arach transport" diff --git a/data/coalition/coalition.txt b/data/coalition/coalition.txt index 4546124476e0..369154189bc9 100644 --- a/data/coalition/coalition.txt +++ b/data/coalition/coalition.txt @@ -395,6 +395,13 @@ outfitter "Heliarch" "Ion Rain Gun" "Local Map" +outfitter "Lunarium Basics" + "Refuelling Module" + "Decoy Plating" + "Shield Refactor Module" + "Small Recovery Module" + "Anti-Materiel Gun" + "Local Map" shipyard "Arach" "Arach Courier" @@ -1200,3 +1207,458 @@ phrase "hostile disabled heliarch" "You can only wonder what they're saying" word ".)" + +phrase "friendly coalition" + word + "The Coalition Games" + "A longcow ranch" + "Gentle Rain's rainforests" + "Saros' moons" + "Refuge of Belugt" + "Cold Horizon" + "Second Cerulean" + "Deep Treasure's coral reefs" + "Celestial Third's farms" + "Second Viridian's arcologies" + word + ", " + word + "last year I did" + "I'd like to" + "one day I will" + word + " " + word + "visit" + "travel to" + "see" + "spectate" + "watch" + "observe" + word + "." + +phrase "friendly coalition" + word + "Sponsored by" + "Courtesy of" + "A gift from" + "Funded by" + "Patronized by" + word + " " + word + "House Mallob" + "House Ablomab" + "House Debdo" + "House Idriss" + "House Garbarag" + "House Chamgar" + "House Bebliss" + word + ", " + word + "my ship is" + "my fleet is" + "this vessel is" + "my last ship was" + "my first ship was" + "my brother's ship is" + "my sister's ship is" + word + "." + +phrase "friendly coalition" + word + "In a longcow ranch" + "On ringworld construction" + "On station maintenance" + "In a Kimek farm" + "In an Arach mine" + "In a Saryd laboratory" + "In a Kimek hunger tower" + "In a Saryd retirement home" + "In an Arach resort" + word + ", " + word + "I used to work" + "my family works" + "my parents worked" + "my co-pilot worked" + word + "." + +phrase "hostile coalition" + word + "Regret this" + "Pay for this" + "Be chastised for this" + "Wish you'd never done that" + word + ", " + word + "you will" + word + ", " + word + "" + "you " + word + "pitiful" + "foolish" + "detestable" + "despicable" + "lousy" + "deplorable" + word + " " + word + "human" + "outsider" + "raider" + "pirate" + "criminal" + "lowlife" + "bully" + word + "." + "!" + +phrase "hostile disabled coalition" + word + "(" + word + "The Coalition ship hails you, speaking in a language you do not understand." + "The ship's captain yells at you in an alien language." + word + " " + word + "You can only wonder what they're saying" + word + ".)" + +phrase "friendly lunarium" + word + "To" + word + " " + word + "free" + "liberate" + "unchain" + "emancipate" + "release" + "rescue" + "save" + "unshackle" + word + " " + word + "our" + word + " " + word + "great" + "noble" + "good" + "grand" + "honorable" + "righteous" + word + " " + word + "Coalition" + "union" + word + ", " + word + "we" + word + " " + word + "fight for" + "must" + "strive for" + word + "." + "!" + +phrase "friendly lunarium" + word + "To" + word + " " + word + "overthrow" + "defeat" + "eliminate" + "destroy" + "topple" + "depose" + "unseat" + word + " " + word + "the" + word + " " + word + "oppressors" + "Heliarchs" + "unjust rulers" + "Tyrant House" + "overlords" + word + " " + word + "we" + word + " " + word + "fight for" + "must" + "strive for" + "struggle for" + word + "." + "!" + +phrase "friendly disabled lunarium" + word + "Repairs, we do need" + "Disabled, our ship has become" + "Disabled, our ship is" + word + ". " + word + "Board our ship, you must" + "Help, you must" + "Appreciated, assistance would be" + word + "." + +phrase "hostile lunarium" + word + "Attacked" + "Opposed" + "Betrayed" + "Countered" + "Violated" + word + " " + word + "the" + word + " " + word + "Coalition's freedom" + "freedom of the Coalition" + "hope of the Coalition" + "good of the Coalition" + "Coalition's hope" + word + ", " + word + "you have" + word + "." + "!" + word + " " + word + "Fight" + "Battle" + "Struggle" + "Clash" + "Duel" + word + "to the end" + "to the last" + "until our deaths" + "until our ends" + word + ", " + word + "we will" + "we must" + word + "." + "!" + +phrase "hostile lunarium" + word + "Sided with" + "Allied yourself with" + "Aligned yourself with" + word + " " + word + "injustice" + "oppression" + "the oppressors" + "unjust rulers" + "the Tyrant House" + "the Heliarchs" + word + ", " + word + "you have" + word + ". " + word + "For" + "To preserve" + "To ensure" + word + " " + word + "the good of" + "the future of" + "the freedom of" + word + " " + word + "the Coalition" + "our Coalition" + "our society" + "our people" + word + ", " + word + "oppose" + "fight" + "defeat" + "destroy" + word + " " + word + "you" + word + ", " + word + "I" + "we" + word + " " + word + "must" + "shall" + word + "." + "!" + +phrase "hostile disabled lunarium" + word + "(" + word + "The Lunarium ship hails you, speaking in a language you do not understand." + "The Lunarium yell at you in an alien language." + word + " " + word + "Their translation device must be broken" + "You can only wonder what they're saying" + word + ".)" + +phrase "hostile disabled lunarium" + word + "Live on" + "Continue" + "Persist" + "Carry on" + "Cling on" + word + ", " + word + "our" + word + " " + word + "fight" + "struggle" + "battle" + "cause" + word + " " + word + "will" + "shall" + word + ", " + word + "even after" + word + " " + word + "gone" + "destroyed" + "dead" + "eliminated" + word + " " + word + "I am" + "we are" + word + "." + "!" + +phrase "hostile disabled lunarium" + word + "To" + word + " " + word + "know that" + "understand that" + word + " " + word + "you" + "the Heliarchs" + "the oppressors" + "the tyrants" + "the Tyrant House" + "your hunger for power" + word + " " + word + "will" + word + " " + word + "inevitably" + "necessarily" + "unavoidably" + "surely" + word + " " + word + "fall" + "be defeated" + "be overthrown" + word + ", " + word + "my" + "our" + word + " " + word + "only" + "final" + word + " " + word + "solace" + "hope" + "comfort" + "consolation" + "relief" + word + "is" + word + "." + "!" diff --git a/data/coalition/lunarium intro.txt b/data/coalition/lunarium intro.txt new file mode 100644 index 000000000000..476b4345b326 --- /dev/null +++ b/data/coalition/lunarium intro.txt @@ -0,0 +1,2033 @@ +# Copyright (c) 2022 by Arachi-Lover +# +# Endless Sky is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later version. +# +# Endless Sky is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program. If not, see . + +mission "Lunarium Initial Log" + invisible + landing + to offer + has "Lunarium introduced" + on offer + log "Factions" "Lunarium Redoubt" "The Lunarium Redoubt is a resistance movement within the Coalition that is opposed to the Heliarchs, aiming to free it from their rule." + fail + +mission "Lunarium: Smuggling: Charity 1" + name "Charity Delivery" + description "Deliver a care package of to , as part of a charity initiative." + minor + cargo "charity supplies" 22 + source + near "3 Spring Rising" 2 6 + not government "Heliarch" + destination "Fourth Shadow" + to offer + random < 40 + has "Coalition: First Contact: done" + not "Heliarch License: done" + not "Lunarium: Questions: active" + not "assisting heliarchy" + on offer + conversation + branch chiree + has "Lunarium: Questions: done" + `A Kimek in a blue uniform approaches you. "Good day, Captain. Interested in helping with some charity work, would you be?" she asks.` + choice + ` "What sort of charity work?"` + ` "Sorry, I'm busy right now."` + decline + ` "Very prosperous, many Kimek worlds have become, but still lagging behind, a few of our planets are," she explains. "Very poor, the people of are, and many amenities such as computers and communicators, they lack. To help them, our more fortunate want, and offered up many supplies, they have. In need of captains to transport them to , we are. Offer for your assistance, we can," she finishes, looking at your ship.` + choice + ` "I'd be glad to help you. Have the supplies loaded into my ship."` + ` "That's a noble cause, but I don't work as a cargo hauler, sorry."` + decline + ` Her mouth produces something of a chirping, clicking sound. "Grateful I am, Captain. Pay you as well as some other jobs, we may not, but know that helping many, you will be. Of that you I assure."` + ` She signals to some workers with similar uniforms, and in a few minutes they bring the cargo crates to your ship. She explains that more of her colleagues are already on working with more captains and suggests you look for them when you arrive. She thanks you again, and wishes you a good trip to .` + accept + label chiree + action + log "People" "Chiree" `One of the things Chiree does for the Lunarium is to maintain and operate a "charity" in Kimek space, both to help the less fortunate of the Coalition and also obfuscate the Lunarium's activities from the Heliarchs and their agents.` + `A Kimek in a blue uniform approaches you, and you recognize her as Chiree, the Lunarium leader you met when joining them. She asks to speak in private, and you two go inside your ship. "Much better," she says once the hatch is closed. "Easier to explain to you the job, it will be, if speak freely and truly of it, I can.` + ` "A 'charity' of sorts in Kimek space, me and other members maintain. True and honest, the donations we receive are, and glad to help those in need within our region, we are. But, also a great cover for certain Lunarium cargo transfers, it is. Wish to enlist your help in that, we do."` + choice + ` "What will I be transporting?"` + ` "Sorry, I'm not available for that now."` + decline + ` "A regular delivery, this one is. Some tech and amenity goods, to , a poorer world, you would transport. Wish to risk your valuable aid with a dangerous smuggling task right away, we do not, so help you build a background with the charity, we will. Paid only for this, you would be, but promise you much greater bounties further down the line, I do."` + choice + ` "Alright, I'll do what I can."` + ` "I actually have some more pressing missions I need to get to, sorry."` + decline + ` Her mouth produces something of a chirping, clicking sound. "Good. Very good. Have the goods brought in shortly, I will." She leaves your ship, signals to some workers with similar uniforms, and in a few minutes they bring the cargo crates to your ship. She explains that more of her colleagues are already on working with more captains and suggests you look for them when you arrive. She thanks you again, and wishes you a good trip to .` + accept + on accept + "assisting lunarium" ++ + log "Agreed to help a Kimek charity by transporting some supplies to one of their poorer worlds." + on visit + dialog `You land on , but realize that your escort carrying the charity supplies hasn't entered this system yet. Better depart and wait for it.` + on complete + "assisting lunarium" -- + payment 44000 + conversation + branch chiree + has "Lunarium: Questions: done" + `You find the local charity workers, and they begin unloading the supplies from your ship. When they're about done, you receive a transmission from the Kimek who gave you the job.` + ` "Grateful for your services I am, Captain. As simple as the job may seem to you, a great help for those in need, these deliveries are. Contact you again, we shall, if interested in helping more, you are," she says. Once the workers are done, they hand you and move the crates to a building where Kimek are lining up to receive the supplies. Other workers continue to unload more cargo from arriving ships.` + decline + label chiree + `You find the local charity workers, and they begin unloading the supplies from your ship. When they're about done, you receive a transmission from Chiree.` + ` "A simple job it was, Captain, but important nonetheless. More work for you, we'll have, so ask that you keep watch for more members in Kimek space, I do." Once the workers are done, they hand you , and move the crates to a building where Kimek are lining up to receive the supplies. Other workers continue to unload more cargo from arriving ships.` + on fail + "assisting lunarium" -- + +mission "Lunarium: Smuggling: Charity 2" + name "Charity Delivery" + description "Bring and doctors to , to aid the poor Kimek on the planet who are suffering through harsh winter conditions." + passengers 5 + cargo "charity supplies" 39 + source + near "5 Winter Above" 1 3 + destination "Into White" + to offer + random < 50 + has "Lunarium: Smuggling: Charity 1: done" + not "Heliarch License: done" + not "Lunarium: Questions: active" + not "assisting heliarcy" + on offer + conversation + branch chiree + has "Lunarium: Questions: done" + `As you make your way through the spaceport on , a Kimek in a blue uniform sees you and approaches. You recognize her as the charity worker who had you deliver some supplies to the poor Kimek world of Fourth Shadow.` + ` "Again we meet, Captain ! In some more charity work, are you interested?"` + choice + ` "I'd love to. What do you need me to do?"` + ` "Sorry, charity doesn't pay much and I'm kind of in need of cash."` + decline + ` "An ever-colder world, is. Left the planet, many have, but wish to abandon their homes, lots of Kimek there do not," she explains. "Lacking proper winter clothing for the harsher weather, many are, and led to many job losses, the snowfall has, so delivering various coats and warm clothing pieces, we are."` + ` She slowly raises up one leg, struggles for footing with her other five, and waves to a group of other Kimek with the same blue uniform. They come to you and she continues. "Unsuited for such cold climates, we Kimek are, so fall to illnesses, many on also do. Agreed to help them, these fine doctors have," she says, pointing to the Kimek doctors, who all greet you briefly with nods and some leg movement. "Received more incentive funds, we have, so as thanks for your continued assistance, paid more than last time you will be. Help compensate you enough for how much this helps, hopefully will."` + ` Some workers bring into your ship, while you show the Kimek doctors their bunks. The Kimek who met you here wishes you all a safe trip to , and moves on to speak with some other captains.` + accept + label chiree + `As you make your way through the spaceport on , a Kimek in a blue uniform sees you and approaches. You quickly recognize Chiree, and gesture for her to follow you into your ship. "Thank you, Captain," she says once you're both inside. "Another 'charity' job for you, I have. With some passengers, this time."` + choice + ` "Just a normal delivery again?"` + ` "I'm sorry, but I'm not interested in helping with this kind of work anymore."` + decline + ` "No," she is quick to respond. "Well, not entirely. In need of more winter clothing, citizens on are. Also in need of doctors to combat many illnesses the cold there brings, they are. Transport passengers there, you also would. Doctors, two of them are. Headed there to help treat the sick in a hospital. As for the other three... 'researchers' of ours, the best way to describe them is. Of course, if questioned, say that all of them are doctors, you must."` + choice + ` "Alright, I'll take them there."` + ` "I'm sorry, but I'm not interested in helping with this kind of work anymore."` + decline + ` She leaves your ship, and meets with a nearby group of other Kimek - your passengers, you imagine - before having some workers load up the cargo into your ship. The Kimek greet you briefly with nods and some leg movement as you meet them, and after the cargo is ready, you show them to their bunks.` + ` "Paid for this job, you will be. Have a safe trip, Captain," Chiree says before leaving.` + accept + on accept + "assisting lunarium" ++ + on visit + dialog `You land on , but realize that your escort carrying the charity supplies and Kimek doctors hasn't entered this system yet. Better depart and wait for it.` + on complete + "assisting lunarium" -- + payment 132000 + conversation + branch chiree + has "Lunarium: Questions: done" + `More blue-uniformed workers are waiting when you land, though these uniforms consist of incredibly thick, bulky coats. They take the crates out of your ship while the doctors are directed to a hospital building, and are transferred to you when the workers are done. They thank you for your help and ask that you look for them in Kimek worlds if you wish to continue helping.` + decline + label chiree + `More blue-uniformed workers are waiting when you land, though these uniforms consist of incredibly thick, bulky coats. They take the crates out of your ship while the "doctors" are directed to a hospital building, and are transferred to you when the workers are done. They thank you for your help, and come in close as they're about to leave, quietly asking that you look for more members on worlds in northern Kimek space.` + on fail + "assisting lunarium" -- + +mission "Lunarium: Smuggling: Charity 3" + name "Charity Delivery" + description "Bring to " + cargo "charity supplies" 46 + source + near "14 Pole" 3 5 + destination "Remote Blue" + to offer + random < 70 + has "Lunarium: Smuggling: Charity 2: done" + not "Heliarch License: done" + not "Lunarium: Questions: active" + not "assisting heliarchy" + on offer + conversation + branch chiree + has "Lunarium: Questions: done" + `A group of Kimek approach you in the spaceport. They are all in the blue uniforms of the charity you have been helping by transporting supplies and people. "Greetings, Captain ," one of them says. "Helped our charity before, you have. Interested in more work, are you?"` + choice + ` "What do you need me to do?"` + ` "Sorry, I'm not interested in helping anymore."` + decline + ` "Lack many of their preferred diet options, the Arachi and Saryds on do," they explain. "Enough to order it from off-world, the poorer of them do not have, so sending them a care package, our group is."` + ` They show you to a pile of containers and crates near the hangars, and you have them loaded into your ship. "Once on , you are, pay you , we will. Thankful of your help, we are, Captain." They wish you a safe trip, and vanish into the spaceport halls.` + accept + label chiree + `A group of Kimek approach you in the spaceport. They are all in the blue uniforms of Chiree's "charity" group, and one of them signals to your ship once they're close. You get the hint, and bring them aboard. "More work for you, Chiree has. To ," one of them begins the moment you close the hatch. "Prepared an important job, she has. One only you can do. Paid to deliver to , you will be, and once there, tell you the details about the main mission, she can."` + choice + ` "Understood. I'll go there right away."` + ` "I'm sorry, but I don't think this line of work is for me."` + decline + ` They nod, and you all leave your ship. They show you a pile of containers and crates near the hangars, and load them in your cargo hold.` + accept + on accept + "assisting lunarium" ++ + on complete + "assisting lunarium" -- + payment 261000 + on fail + "assisting lunarium" -- + +mission "Lunarium: Smuggling: Grenades" + name "Grenade Smuggling" + description "Bring 100 Fragmentation Grenades from human space to ." + landing + source "Remote Blue" + destination "Mebla's Portion" + to offer + has "Lunarium: Smuggling: Charity 3: done" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + log "Been providing transport services for a charity that is actually the Lunarium, a resistance group within the Coalition aiming to free it from the Heliarchs' rule. Some of the work was genuinely charity, apparently, but some was to support the resistance." + set "Lunarium introduced" + conversation + `You drop off the crates full of charity goods, and the spaceport workers start getting them up on vehicles to transport them to the poor. One of the workers transfers 261,000 credits to your account, thanking you for the help.` + branch chiree + has "Lunarium: Questions: done" + ` As they move the last few crates, you hear a rapid tapping approaching from behind, and as you turn to investigate a Kimek tackles you. Some more join in, covering your head with some dark sack, and start shoving you around once they restrain you. You call out for help, but nobody comes. The Kimek keep pushing and tugging at you as they bring you around the city. After many minutes, you hear some doors close behind you, and your captors force you into some cramped room or compartment. You try to stand up straight, but hit your head against the ceiling. It soon becomes clear you're in a descending elevator, and when it stops, you're walked around for a while longer. Finally, the Kimek seat you and remove the sack from your head.` + ` The insides remind you of an office building or call center; several Kimek are working in cubicles, most examining computer screens while others speak into communicators. You look back to where you reckon you came from, seeing the entrance to a short elevator by the end of a hallway. Coming around the corner, a Kimek you recognize approaches to sit opposite to you - the Kimek who first contacted you about the charity missions. A group of the blue uniformed Kimek follow after her as they bring a crate: one of the crates you transported here. "Forgive us for the discomfort you must, Captain," she says, as the workers open up the crate, revealing several Heliarch guns stuffed inside. "Wished to speak away from prying eyes, I did. Rest easy, you may, harm you, we will not."` + choice + ` "What do you want from me?"` + goto want + ` "So that's the 'charity work' I've been doing? Smuggling weapons?"` + ` "The first time? No, in need of help, Fourth Shadow really is, and do proper charity work, we must, if to keep that disguise, we wish," she explains. "The second time, truly carrying winter clothing, you were, only... doctors, three of the Kimek you transported were not. This time, helped supply our cause, you have."` + label want + ` She signals for the Kimek in blue uniforms, and they come to her sides, carefully managing the base of some of her legs. You hear a click, followed by a snap. They pull the prosthetics away from her body, removing the "leg" closest to her head on her left side, and the one furthest from her head on her right side. The Kimek on her left side works on her middle leg, revealing that as a prosthetic as well. "Factory accident," she says, gesturing her head to her right side. "Heroic Heliarch patrols, blasting at the teen Kimek," she gestures to her left side. "Guns of my own, I wanted, to ensure no more legs to them, I lost. Some... rarer equipment, my group needs, though. Help us get that equipment, only you can."` + choice + ` "Your group?"` + goto group + ` "What sort of equipment?"` + goto equipment + ` "And if I refuse?"` + ` "Then put that sack on your head again, we will, and brought back to your ship, you will be," she says. "Harming you, we are not. Tell on us, you could, but not very... willing to investigate here, most Heliarchs are."` + goto equipment + label group + ` "Heard of us in the news, you must have? Terrorists, bandits, outlaws, criminals... many nicknames, the Heliarchs give us." She looks at the weapons inside the crate. "The Lunarium Redoubt, this is. A group of thugs, or whatever they call us, we are not. Trying to rescue our Coalition from the Heliarchs, we are."` + label equipment + ` A pair of Kimek walk past the table where you're seated, headed for the elevator. The Kimek seated in front of you stays silent as she watches them leave. "No criminal, I was, when these two, I lost," she gestures to the stubs on her left side. "Make sure the Heliarchs can never do that again, we will. Greatly appreciated, your help would be." She asks that one of the weapons from the crate be put on the table, and taps it with her leg. "Powerful, the blasts from these are, but in need of some more broad, wider-impacting equipment, we are. Explosives. Fetch for us some grenades from human space, you could."` + choice + ` "Alright, I'll help you. How many grenades do you need?"` + goto accept + ` "No, I want no part in this. Bring me back to my ship."` + ` ". Pay you twice their cost, we would," she says as you're getting up. "A lot of money, you could make, if help us, you do."` + choice + ` "Fine. How many grenades?"` + ` "No. Get me back to my ship."` + goto decline + label accept + ` Her mandibles click together for a few seconds. "100 boxes. Brought to , they must be. The exact coordinates, upon arrival, you will receive." She pauses as the other Kimek put her prosthetics back on. "Chiree, my name is. Hoping, I am, that help us a great deal you will, Captain ."` + ` She heads back into the strange grouping of cubicles, and the Kimek behind you have you get up, putting the sack back on your head. After another ride in the unpleasantly tight elevator, and some more pushing and tugging at your body, they have you back at your ship. The sack is removed from your head and the Kimek walk off as if nothing happened. Nobody around the hangar seems to have noticed anything unusual.` + accept + label decline + ` She breathes deeply for a moment, then asks the other Kimek to put her prosthetics back on. "Very well," she says, before walking back into the strange grouping of cubicles. The Kimek behind you have you get up, putting the sack back on your head. After another ride in the unpleasantly tight elevator, and some more pushing and tugging at your body, they have you back at your ship. The sack is removed from your head and the Kimek walk off as if nothing happened. Nobody around the hangar seems to have noticed anything unusual.` + decline + label chiree + ` While they're removing the crates from your hold, a familiar Kimek approaches you: it's Chiree, the local Lunarium leader. "Speak in your ship, may we, Captain?" You bring her inside , and she continues. "Since one of us, you now are, to help with acquiring some equipment, you I'd like to ask."` + choice + ` "What sort of equipment?"` + goto equipment2 + ` "Was this 'charity' job just to get me here for this?"` + ` "This last one? Yes, wished to speak about this away from prying eyes, I did," she says. "Really in need of help, the people of Fourth Shadow were. Actual charity work, we still need to perform, if to keep up the disguise, we want. The second one... well, as you know, doctors, three of the Kimek were not."` + label equipment2 + ` She explains that the crates you brought in were filled with Heliarch assault guns, meant to supply the members here with better weaponry. "Used the charity as a means of smuggling, for decades we have," she explains. "But difficult to acquire, larger Heliarch outfits are. Difficult to transport in secret. Capable of leaving, you are, so bring in outfits from the outside, you could." She tells you the Lunarium needs some explosives they could reproduce with relative ease, and use against the Heliarchs in boarding operations. They've been informed that not far from the Coalition, there are human worlds selling Fragmentation Grenades, which would do the job. "100 boxes of them, to , you must bring," she says. "Paid twice their value, you will be, ."` + ` A communicator on her beeps, and she gets word that the workers have finished unloading the smuggled guns. She tells you you'll receive coordinates for delivering the grenades once you arrive at , and wishes you good luck.` + accept + on accept + "assisting lunarium" ++ + log "Agreed to acquire some grenades for the Lunarium from human space. They've offered to pay quite well." + on visit + dialog `You've arrived on , but you haven't brought all the grenades you needed to yet. Make sure you have them all in your cargo before you land.` + on complete + "assisting lunarium" -- + outfit "Fragmentation Grenades" -100 + payment 3400000 + conversation + `As you approach the standard docking bay, a message pops up on your monitor telling you to go to the edge of the city. You follow the instructions and find yourself in the middle of several dozen warehouses. Another message arrives and asks that you unload the grenades and bring them to a specific warehouse. As this information comes in, you notice that a few Arachi have arrived just outside your ship with some cargo loaders, seemingly waiting for you to begin moving the smuggled weapons. You open up your hatch, and help them get the grenade crates out of your ship and into the designated warehouse as fast as you can, worried that someone might see you. The door is open, with a few more Arachi waiting inside by a staircase. They say nothing to you and simply take the grenade crates, lifting them off of the cargo loader and bringing them down the stairs, crate by crate.` + ` When you're done with the last one, one of the Arachi hands you several credit chips, worth in total. "Contact you for more deliveries of this kind, we will," they say as they head down with the final grenade box. You head back to your ship, and leave for the usual hangars.` + on fail + "assisting lunarium" -- + +mission "Lunarium: Smuggling: AM" + name "Anti-Missile Smuggling" + description "Bring three Heavy Anti-Missile Turrets to ." + landing + source + attributes arach + not planet "Mebla's Portion" + destination "Fourth Shadow" + to offer + has "Lunarium: Smuggling: Grenades: done" + random < 15 + 3 * "assisted lunarium" * "assisted lunarium" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + `Shortly after you land, an Arach approaches your ship, waiting for you to come out. When you do, she pulls out a Heliarch badge. "Forgive me for this intrusion, you must, Captain , but orders to inspect your ship, I have." She heads inside your ship and rushes to the cockpit before you can say anything, and asks you to close the door once you get there too. Her eyes trail the interior for a while, then she approaches you. "Helped the Lunarium with supplies before, you have," she whispers. "In need of more such services, we are. Means to defend ourselves against the Heliarch missiles, we require, so sent to ask you for three of the largest human anti-missile turrets, I was."` + choice + ` "Where should I take them to?"` + ` "I'm not sure human anti-missiles will be very effective against your missiles."` + goto effective + ` "Brought to , they must be. The factories there, numerous and alike, they are. Hopes to produce our own, in secret, we have."` + goto accept + label effective + ` "The simpler their mechanisms, the faster that replicate them, we can," she says. "Strong enough to stop the Finishers, I hope they are... Bring the turrets to , you must."` + label accept + ` She asks for your monitor, and, after tinkering with the controls for a minute, plugs a small, round device into it. "Allow us to more easily contact you, this will. Accessed by a separate network entirely, the device is. Simply a means to receive our messages, it is. Leave traces on its hardware, communications will not, and gain access to the network on its own, it cannot. Traced back to us, you won't be, unless caught by the Heliarchs during our communications, you are," she explains. "After delivered the goods to , you have, message you for more missions, we shall. Good luck I wish you, and my thanks you have, Captain." Once the "inspection" is done, she leaves your ship and scurries off.` + accept + on accept + "assisting lunarium" ++ + log "Agreed to smuggle three of the largest human anti-missile turrets to the Lunarium. They hope to reverse-engineer them to defend against Heliarch weaponry, though the effectiveness of human designs here is dubious." + log "Given what appears to be some sort of communication device by a Lunarium representative to facilitate easier contact." + on visit + dialog `You've arrived on , but you haven't brought all the anti-missile turrets you needed to yet. Make sure you have them all in cargo before you land.` + on complete + "assisting lunarium" -- + outfit "Heavy Anti-Missile Turret" -3 + payment 900000 + conversation + `Your monitor beeps loudly as you prepare for your descent onto , indicating that you have a message. The message details instructions on how to complete your delivery. Under the guise that you're transporting heavy factory equipment, you stop on a landing pad adjacent to a massive automated compound. A gantry crane moves the turrets down to ground levels, setting them on cargo platforms, which are then pulled into a large warehouse. Once all is done, you see that have been added to your account.` + ` You look to your monitor again, and see a message explaining the Lunarium would happily take more copies of smuggled equipment, if you wish to help further. The message details that they've prepared a method of integrating their missions into your job board. The device installed in your ship will include them in your list of regular jobs whenever they're available.` + on fail + "assisting lunarium" -- + +mission "Lunarium: Smuggling: Torpedoes" + landing + name "Torpedo Smuggling" + description "Bring two Torpedo and two Typhoon Launchers to , along with the maximum ammunition each can carry." + source + attributes kimek + not planet "Fourth Shadow" + not planet "Into White" + destination "Into White" + to offer + has "Lunarium: Smuggling: AM: done" + has "event: deep sky tech available" + random < 20 + 3 * "assisted lunarium" * "assisted lunarium" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + `Once you land on , the little round drive the Lunarium member plugged into your ship beeps quietly. Your monitor begins to flicker, eventually changing to some sort of messaging interface. A few seconds pass, and some text pops up. "Greetings Captain! Chiree, it is. In need of your 'delivery services' again, we are. Told, we have been, that developed some torpedoes of their own, humans have, and while not as dangerous as Finishers, still provide us much needed offensive power against Heliarch ships, they would. Issued anti-missile defenses, they are not, so a great boon to us, these weapons would be."` + ` After you've read the message, you see a blinking circle at the bottom of your monitor, prompting you for some sort of response.` + choice + ` "What weapons do you need?"` + ` "Where am I delivering the weapons?"` + ` You input the message, and get a response almost immediately; it seems Chiree's prosthetics don't negate the advantage of having so many legs typing in unison. "Two 'Torpedo Launchers' and two 'Typhoon Launchers' are what we need, along with the ammo to fill all of them. Brought to , they must be. There, our most adequate facilities for torpedoes are. Receive once you've delivered them there, you will."` + ` The interface blinks off, and the round drive stops beeping as your monitor returns to normal.` + accept + on accept + "assisting lunarium" ++ + log "Agreed to provide the Lunarium with some Torpedo and Typhoon Launchers. The lack of anti-missile systems on Heliarch ships means missile technology will be highly beneficial for the Lunarium." + on visit + dialog `You've arrived on , but you haven't brought all the launchers and ammo you needed to yet. Make sure you have them all in your cargo before you land.` + on complete + "assisting lunarium" -- + outfit "Torpedo Launcher" -2 + outfit "Typhoon Launcher" -2 + outfit "Torpedo" -60 + outfit "Typhoon Torpedo" -60 + payment 1852000 + conversation + `Once again, your monitor beeps, and some coordinates appear on the screen. You follow them, arriving to a snowfield close to the base of a mountain. Donning your heavy winter clothing, you open the hatch to find several Saryds waiting for you, ready to take the launchers and the ammunition out of your ship. "A better fighting chance, these should give us," one of them tells you as she hands you , and others work on getting the launchers and their ammunition out of your ship. "Not as mighty as their own Finishers, these are, but still hurt their hulls good, they should."` + choice + ` "Are you sure they won't find you here?"` + goto find + ` "Why is it that their ships don't have anti-missiles?"` + ` She seems puzzled by the question, then her face sparks up as if remembering something. "Right, well-versed in our history, you are not," she begins. "Developed their arsenal to fight the Quarg, the Heliarchs have, and while possible, it was, to shoot down their projectiles, far too difficult a task, it proved. Favored more offensive turrets due to that, they historically have."` + goto end + label find + ` "A calm world, this is, and many Heliarch patrols, it does not get," she explains. "Hidden many things here for long, we have. Continue to remain hidden, I hope we can."` + label end + ` The final torpedo is brought out of your ship, and the Saryds start bringing them inside a cave leading into the mountain. The Saryd who paid you thanks you again, and follows after the others. You head back to your ship and fly it to the hangars, hoping to find something warm to drink.` + on fail + "assisting lunarium" -- + +mission "Lunarium: Smuggling: Heat" + landing + name "Heated Smuggling" + description "Deliver two Plasma Turrets and ten Flamethrowers to ." + source + attributes saryd + not planet "Secret Sky" + destination "Secret Sky" + to offer + has "Lunarium: Smuggling: Torpedoes: done" + has "event: flamethrower available" + random < 25 + 3 * "assisted lunarium" * "assisted lunarium" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + `Once again, the Lunarium's device starts beeping as you land, and your monitor flickers to the same messaging screen as last time. "Hello again Captain. Chiree, it is. Thank you for the torpedoes, I must, already at work on producing more like them, we are. Win us battles, however, they alone will not, so asking you to help us once again, I am. Received word, we have, of some more weapons developed by humans. Quickly heat up ships, they can, and so a great help against Heliarch attacks, they would be."` + choice + ` "What do you need me to do?"` + goto accept + ` "You have 'received word' of that? From whom? Who's telling you of these weapons?"` + ` For how fast she typed before, Chiree takes a long time to answer. "Know that, we do not," is what first appears on the screen. "First contacted centuries ago, we were. Unsure, we still are, if trustworthy, whoever is sending the messages is, but always right they are on their information. The first to bring us human outfits, you are not; whoever they are, brought us caches of some human platings and guns, decades ago, they did. Seen, their ships never were, only the crates and containers, we found."` + choice + ` "So why do you trust these mystery informants so much?"` + ` "Whatever the case, just tell me what you need me to do."` + goto accept + ` "Because helped us, they always have, and in dire need of help, we are," she shoots back in an instant. "Given us a fighting chance, they have," she adds.` + label accept + ` She quickly types out another message. "A larger delivery, this will be, so a good hiding spot, we'll need. To , bring two 'Plasma Turrets' and ten 'Flamethrowers' you must. Paid , you will be."` + ` The beeping stops and your monitor screen goes back to normal.` + accept + on accept + "assisting lunarium" ++ + log "Agreed to bring the Lunarium some Plasma Turrets and Flamethrowers. They seem to believe heat damage will be effective against Heliarch ships." + on visit + dialog `You've arrived on , but you haven't brought all the Plasma Turrets and Flamethrowers you needed to yet. Make sure to have them all in your cargo before you land.` + on complete + "assisting lunarium" -- + outfit "Plasma Turret" -2 + outfit "Flamethrower" -10 + payment 5880000 + conversation + `As you enter the planet's atmosphere you can't help but notice that much of the planet is covered in a dense, heavy fog. As you contemplate such an oddity, you get a message that guides you to land on a rocky beach, where a large cargo barge is waiting. Stepping off your ship, you're met by a few Saryds with the right equipment to get the Plasma Turrets and Flamethrowers out of your cargo hold. They do so with haste, handing you as they carry the turrets, and then Flamethrower after Flamethrower, off of your ship.` + ` "For your participation in our conjoined efforts, we thank you, ," one of them says when they are almost done. "If right, the information is, a tremendous boon to us, these weapons will be."` + choice + ` "Are you sure this planet is an appropriate hiding spot? It doesn't seem to be exactly isolated."` + ` "How are the turrets and flamethrowers going to help, exactly?"` + goto heat + ` He smiles at your question. "Lie hidden in the fog, many secrets do," he says, as if it were some adage. "Unknown even to most Saryds, parts of this planet are. Well hidden, the weapons will be. Worry about them, you need not."` + goto end + label heat + ` "If to fight the Heliarchs, we are, an advantage against their mighty vessels, we need," he explains. "When long in combat, close to their heat limit, their ships are. Greatly cripple them, we hope that these weapons will."` + label end + ` He bids you farewell once the last Flamethrower is loaded onto the barge, and gets on it with the others to sail away. The barge is fully encompassed by the planet's ever-present fog within minutes of raising the anchor. You get inside your ship, and head to the usual hangars.` + on fail + "assisting lunarium" -- + +mission "Lunarium: Smuggling: Reactors" + landing + name "Reactor Smuggling" + description "Bring an Armageddon Core, a Fusion Reactor, and a Breeder Reactor to . To avoid the risk of larger Heliarch patrols you must deliver them before the fifth day of any month." + source + attributes arach + not planet "Mebla's Portion" + destination "Mebla's Portion" + to offer + has "Lunarium: Smuggling: Heat: done" + random < 40 + 3 * "assisted lunarium" * "assisted lunarium" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + `Landing on , the Lunarium's device starts beeping once again. Your monitor's screen shifts as you receive Chiree's message. "Captain , a more complicated task for you, I have. Some better power generation, our ships will need, if to fight Heliarch warships, we are. Simpler to mass-produce, human ones should be, but only on , large enough facilities exist."` + choice + ` "Why is that a problem? I already delivered the grenades to that planet."` + ` "Did something change about ?"` + ` "Larger than other equipment you've brought us, these generators are," the next message says. "The 'Armageddon Core,' 'Fusion Reactor' and 'Breeder Reactor', what we need are, but take a long time to move such large pieces, it will. Risk being seen, we cannot, so only in some days, delivered they may be. Switch every month, the rotating patrols do. Arrive on the fifth, new patrols usually do, so delivered during that window before the fifth, the reactors must be. Pay you well for this, we will, ."` + ` She signs off, the beeping stops, and your monitor screen returns to normal.` + accept + on accept + "assisting lunarium" ++ + log "The Lunarium will need more power than the Coalition solar panels and fuel cells can provide to take on the Heliarchs. Agreed to provide them samples of human shipboard nuclear reactors to reproduce to this end." + on visit + dialog `You land on , but don't receive any instructions from the local Lunarium members. Either one or more of the reactors aren't with you in the system, or you're past the delivery window. You should prepare to bring in the three reactors before the fifth day of the month, and try again.` + to complete + day < 5 + on complete + "assisting lunarium" -- + outfit "Armageddon Core" -1 + outfit "Fusion Reactor" -1 + outfit "Breeder Reactor" -1 + payment 33000000 + "assisted lunarium" ++ + log "After delivering some nuclear reactors, Chiree says she won't make further contact via the usual communicator, but others of the Lunarium on Coalition worlds may offer similar work." + log "Factions" "Lunarium Redoubt" "Apparently, some Arach Houses are not entirely happy with the status of the Coalition under the Heliarchs, and so they help fund the Lunarium." + conversation + `When you come in to land, the local Lunarium contacts direct you to a site far away from any of the cities. You are led close to a gigantic cave entrance, on a valley already blanketed by the planet's typical heavy downpours. Dozens of Arachi and Kimek are waiting for you, and once you land they use hulking cargo loaders to carefully take each reactor from your ship, slowly bringing them inside the cave. They repeat this slow, arduous process with each reactor that you were tasked to bring to them.` + ` Most of those not working on moving the reactors are heavily armed, keeping careful watch of the skies and occasionally tuning into a communicator for any signs of Heliarch ships that may be approaching. After over an hour, once the last reactor is finally taken out of your cargo hold, one of the Arachi comes up to you and hands you , thanking you for your service to their cause. "A lot of money, this is, but worth it, the reactors should be."` + choice + ` "Where do you even get all this money from?"` + ` "What are you even going to do with those reactors? It would be really hard to install them in a ship out here."` + goto reactors + ` "Word of our existence, the Heliarchs muffle, and distorted and twisted, their versions of our actions are, but enough to drive away our supporters, that is not," he says. "Not entirely... happy, some Arach Houses are, with the direction of things. Help fund us, they do."` + goto end + label reactors + ` "Fit for battle, solar panels and fuel cells are not. Come to fight the Heliarchs, we eventually will, so better power generation for our weapons, we'll need," he says, and then points in the direction of the spaceport. "More efficient, Heliarch reactors are, but too difficult to steal them, it is. Too risky. Only provide energy for our facilities, they do. Studied and reproduced for use in our ships, the reactors you brought us will be."` + label end + ` They bid you farewell and head into the cave, and you get back inside your ship. Once you land back at the city hangars, the device installed in your monitor beeps again with a message from Chiree. "Helped us a great deal you have, Captain . Contact you like this again, I may not, but find more offers for smuggling jobs, you will. Appreciated, any more equipment you bring us will be, and of course, pay well we would." She signs off, and the beeps stop.` + on fail + "assisting lunarium" -- + + + +mission "House Bebliss 1-A" + name "Meet with House Bebliss" + description "Head to , where members of House Bebliss wish to discuss a job offer." + minor + to offer + random < 10 + has "license: Coalition" + not "Heliarch License: done" + not "assisting heliarchy" + # This mission is to offer when the player has the Epilogue for whatever character of FW, Navy or Syndicate stays in Deneb. + # When the Navy and Syndicate campaigns get in, they'll need their own versions of missions 2 through 7 written. + or + has "FW Epilogue: Freya: offered" + source + government "Coalition" + not planet "Factory of Eblumab" + destination "Factory of Eblumab" + on offer + conversation + `An Arach stops you by the spaceport and invites you to a free meal at a local bar. "A business proposal, my employers for you have."` + choice + ` "Very well, lead the way."` + goto bar + ` "Can't you just give me the details here? I'm not hungry."` + ` He seems somewhat disappointed, but agrees. "A messenger from the great House Bebliss, I am. Wish to see you, my employers do, for a great aid to one of their projects, you would be."` + choice + ` "What do they want?"` + ` "Did they mention how much I would get paid?"` + ` "Know such exact details, I do not, but certain, I am, that answer any of your questions, they will. Much interest in your resourcefulness, my superiors have," he says. "On , they wait. Now, told to tell you, I was, that only to speak with you, they want. To make an offer. If uninterested, you are, pressure you any further, they will not."` + choice + ` "Fair enough. Tell them I'll be heading there to hear them out."` + ` "I won't go out of my way just to hear about a job offer. Tell them to come in person next time."` + decline + ` He nods in some quick gesture, and gives you some coordinates. "To an estate, these will bring you. Thankful for your understanding, House Bebliss is." He runs off, and heads into an office building to inform his superiors that you'll be on your way to .` + label bar + ` You follow him into the establishment and order something. "To business, then," he says. "A messenger from the great House Bebliss, I am. Wish to see you, my employers do, for a great aid to one of their projects, you would be."` + choice + ` "What do they want?"` + ` "Did they mention how much I would get paid?"` + ` "Know such exact details, I do not, but certain, I am, that answer any of your questions, they will. Much interest in your resourcefulness, my superiors have," he says. "On , they wait. Now, told to tell you, I was, that only to speak with you, they want. To make an offer. If uninterested, you are, pressure you any further, they will not."` + choice + ` "Fair enough. Tell them I'll be heading there to hear them out."` + ` "I won't go out of my way just to hear about a job offer. Tell them to come in person next time."` + decline + ` He nods in some quick gesture, and gives you some coordinates. "To an estate, these will bring you. Thankful for your understanding, House Bebliss is." He finishes up his drink quickly, and leaves the bar to inform his superiors that you'll be on your way to .` + accept + on accept + "assisting lunarium" ++ + on complete + "assisting lunarium" -- + on fail + "assisting lunarium" -- + +mission "House Bebliss 1-B" + name "Meet with House Bebliss" + description "Head to , where representatives from an Arach House that supports the Lunarium wish to discuss a job offer." + to offer + random < 40 + has "House Bebliss 1-A: declined" + not "Heliarch License: done" + not "assisting heliarchy" + source + attributes arach + not planet "Factory of Eblumab" + destination "Factory of Eblumab" + on offer + conversation + `On your way to the spaceport, you're stopped by a duo who seem to be Arachi businessmen, surrounded by half a dozen bulky, taller Arachi. "In person, as per your request, we have come, Captain," one of the two in fancy suits says.` + choice + ` "My request? What are you talking about?"` + ` "You've got the wrong person. I don't know either of you."` + ` "House Bebliss, right? Thank you for finally finding the time."` + goto remember + ` "To our employee, what you said, it is," they answer. "To 'come in person next time,' you requested."` + label remember + ` They "invite" you to follow you into what looks like an expensive restaurant, serving typical Arach cuisine. The bulky Arachi don't give you much of a choice, barring you from going elsewhere and only letting up when you are seated. The two Arachi businessmen say they will pay for your meal, though you can't quite find much in the menu appealing to the human palate.` + ` "Usually more... respectful about such requests from our House, people are, but hasty of us to approach a human Captain like we would an Arach one, it may have been," one of them says, going through the menu. "Still interested, the House is, so to entertain your request, we came."` + ` "Interested in your assistance, that is," the other continues, as he signals for one of the bodyguards to get a waiter. "An important job for you, we have."` + choice + ` "Alright, you have my interest. What's this job about?"` + ` "Well, if you want me to work with you so much, why don't you just tell me what the job is?"` + ` "I'm sorry, I understand you've taken the effort to come meet me in person, but I've got pressing business outside of Coalition space."` + goto decline + ` "Second chance, tenth chance, I really don't care how many you give me. I'm not interested."` + goto decline + ` "Say much, here we cannot," he answers. "If interested, you are, to , you must go. There, our House's private estate is."` + ` "That it concerns recent human events, we can say. Events that involved in, you were," the other says, handing you some coordinates to their estate on .` + ` The waiter arrives, and they suggest some dishes, seeing as you didn't pick anything from the menu. The smell coming from the other tables, however, tells you to decline, so you politely leave the establishment. It seems the only way to find out what these Arachi want is to head to .` + accept + label decline + ` The two of them eye you up for a very uncomfortable minute, but never provide some response or acknoweldgement. You try and move away and leave the restaurant, but their bodyguards block you. One of the two Arachi from the table appears to grunt, then signals for the guards to let you pass through. You leave the restaurant, and return to your ship.` + decline + on accept + "assisting lunarium" ++ + on complete + "assisting lunarium" -- + on fail + "assisting lunarium" -- + +mission "House Bebliss 2-FW" + name "Find Freya" + description "Go to and look for Freya to see if she is willing to let the members of House Bebliss study the Pug artifacts with her." + landing + to offer + not "Heliarch License: done" + not "assisting heliarchy" + or + has "House Bebliss 1-A: done" + has "House Bebliss 1-B: done" + source "Factory of Eblumab" + destination "Pugglemug" + on offer + conversation + `You follow the coordinates given to you and land on top of a mountain at a set of private hangars. Nearby is an estate, covered by a dome similar to the one over the spaceport city. You are received by who you assume are Arachi butlers and maids, given their tidy, well-kept uniforms, and follow one of them into the mansion.` + ` They bring you to a large, wide room where three preoccupied Arachi are pouring over schematics and blueprints scattered across a table.` + ` "Captain !" One of them comes to greet you, after the servant announces your arrival. "A rare opportunity, it is, to such an exquisite guest entertain. For a drink, would you care?" Without waiting for a response, one of the maids brings over a platter with several cups, and you're pleasantly surprised to discover familiar smells like coffee and tea coming from the silver dish. You notice that there are also some alcoholic beverages as well as just plain water in the middle of the platter.` + ` "Difficult to replicate, some of these human drinks were, but for a special guest, the least we could do, it is," another one approaches, gesturing for you to pick one of the drinks, while signaling for another maid to bring him and the other two some drinks of their own.` + choice + ` "Thank you, but why exactly did you want to talk to me so badly?"` + ` "You asked me to come here for a job. What is the job?"` + branch lunarium + has "Lunarium: Questions: done" + ` "The great House Bebliss, we represent. Maintain the local hyperspace communication network, our House does," he says as he swirls the drink in his cup before taking a sip.` + ` The other one jumps in. "Studied hyperspace links, for millennia we have. More recently, an application of such phenomena that would help the Coalition, we have searched for."` + goto choice + label lunarium + ` "To be trusted, you are. Assured us of that, Chiree has," the one Arach still by the blueprints chimes in. "The Lunarium's guardian angels, we are," she boasts. "Safeguard them against the Heliarchs, our meddling in the communication network does. To better serve that purpose, look further into this field, we must."` + label choice + ` Still gently swirling his drink in between periodic sips, the other Arach beside you asks, "Knowledge, we have acquired, of a certain conflict in human space. Invaded by aliens, were you? Aliens with such technology?"` + choice + ` "Yes, they're called Pug."` + goto pug + ` "Wait, how do you know of this?"` + ` "Know it, the Heliarchs do, so learned about it, we have."` + ` "Many resources, our great House possesses," the Arach still by the table adds. "Trivial to acquire such information, for us it is."` + choice + ` "I see. Well, yes, we were invaded by aliens known as the Pug."` + goto pug + ` "And how did the Heliarchy know?"` + branch "lunarium 2" + has "Lunarium: Questions: done" + ` "In 'their' space, are you not? Scanned by their ships, you were. Subtly amassed, your flight records, your charted map of the galaxy, were," she finishes, and her and the other two look to you, waiting for your answer.` + goto "pug reveal" + label "lunarium 2" + ` "In 'their' space, are you not? Scanned by their ships, you were. Subtly amassed, your flight records, your charted map of the galaxy, were," she finishes. "Of course, register any such logs, your ship does not, when running tasks or simply coming to meet us like this, you are. Permit them find our bases that easily, we must not. But, digress I do. Please Captain, intrigued about these aliens, we very much are." She gestures toward you with one leg, as the other Bebliss members eye you eagerly.` + label "pug reveal" + choice + ` "Human space was invaded by a species known as the Pug."` + label pug + ` Thankfully, the ones that were downing drinks weren't that close when you said the word "Pug," or else you'd need a new set of clothes. One of them signals for a maid to clean up their simultaneous spit takes, and the Arach by the blueprints finally comes closer.` + ` "'Pug,' were they called?" she asks as the maid behind her quickly scrubs the floor. You affirm her question, and she calls for a servant, asking them to ready a ship. She whispers something to the other two members of House Bebliss, which the translation devices don't pick up, and starts gathering her belongings. "Forgive me, Captain, but leave at once, I must."` + ` Once she's left, one of the other two asks for more details, so you give them a brief rundown of the Pug invasion and how humanity managed to fight them off. They ask you to further detail the moments where you had to fight off waves of Pug as Freya worked the graviton transmitters and reflectors to link back to other human systems.` + ` "Promising, this Freya woman sounds. Know her location, do you, Captain?"` + ` You say that she is probably still on , and that when you saw her last, she was studying what artifacts the Pug left on the planet.` + ` "Speak with this woman, would you, Captain? If willing to work with us, she is, greatly rewarded, you would be."` + choice + ` "I'll go talk with her and see what I can do."` + ` "Sorry, but I don't want to bother her by pulling her into the Coalition's business."` + goto decline + ` They thank you, and head to another room asking you to wait. One of the maids offers you a choice of another one of the human drinks, while the one holding the platter with drinks that the House Bebliss members were savoring stands like a statue near a corner.` + choice + ` (Taste some of the human drinks.)` + goto human + ` (Ask for one of the Arach drinks.)` + goto arach + ` (Just wait for your hosts to come back.)` + ` You politely decline the drinks, and the maid gives you a brief nod, silently going back to her post to stand still like the other. You go over to the table to look at the blueprints, seeing many charts drawn and symbols resembling calculations on one corner, but you can't understand what's written. You sit as best as you can on what you guess is an Arach equivalent to an armchair, looking around the room for a few minutes.` + goto accept + label human + ` Though House Bebliss seemed surprised with your talk about the Pug, they seem to know human drinks all too well. The coffee, while not too strong, still holds that distinct, slightly bitter taste. The tea, which appears to be chamomile, is as soothing as you remember it being the last time you had the drink. The variety of juices available all have a natural, sweet taste to them, save for the peach juice, which you avoided given that its consistency seemed to be closer to pudding than juice and oozed over the lip as you tilted the cup.` + goto accept + label arach + ` You wave for the maid with the Arach drinks, and she looks to the other maid in surprise. She tries explaining to you that she isn't sure if these drinks are meant for human consumption. Regardless, you insist, so she reluctantly walks over, handing you one of the cups. You bring it to your nose, and an overwhelming aroma hits your nostrils. The drink somehow smells oddly similar to the feeling you have in your mouth after waking up extremely parched after a long night of sleep. You carefully sip some of it, bringing the cup away from your mouth once the liquid hits your tongue. The sweetness has a sting to it, as if it's lightly biting your tongue as it travels through your mouth. Swallowing it, your throat feels a worrying numbing sensation for several seconds. You put the cup back on the platter, and the maids move away. After about a minute, you start struggling to keep your eyes open. Your surroundings suddenly appear much brighter than before, as if the lights in the ceiling have somehow intensified their output and the colors on everything around you have sharpened their image. You close your eyes for a few minutes to gain your bearings, and everything seems to go back to normal.` + label accept + ` When your hosts return, they hand you a small suitcase of sorts. "Translated our proposal into your language, we have," one of them says. "Bring that to Miss Freya, you must. Hopeful, we are, that willing to share the research material with us, she is."` + branch "lunarium 3" + has "Lunarium: Questions: done" + ` "Also inside, certain... research papers are. A gift, she may consider it," the other adds.` + goto end + label "lunarium 3" + ` "Also inside, certain... research papers are. A gift, she may consider it," the other adds. "And, Captain, one last thing. Realize we do that in order to explain it all to her, inevitably tell Miss Freya of the Coalition, you will. Only, ask of you, I must, that reveal anything about the Lunarium, you do not. A bordering human world the Heliarchs periodically visit, and no means of culling what information they there gain, we have. Safer, it will be, if keep the Redoubt a secret, you do."` + label end + ` They say they will be waiting in the estate for her response, and have the servants escort you back to your ship.` + accept + label decline + ` They stare at you in surprise for a bit, glancing at one another a few times. They sigh. "Very well, understandable, that is," one of them says. They ask for some more drinks, and have some servants escort you back to your ship.` + decline + on accept + "assisting lunarium" ++ + on complete + "assisting lunarium" -- + on fail + "assisting lunarium" -- + +mission "House Bebliss 3-FW" + name "Tell the Free Worlds about the Coalition" + description "Go to with Freya and tell JJ all you've learned about the Coalition." + landing + to offer + has "House Bebliss 2-FW: done" + not "assisting heliarchy" + source "Pugglemug" + destination "Bourne" + passengers 1 + blocked `You have reached , but you need in order to take on the next mission. Return here when you have the required space free.` + on offer + conversation + `You look around for Freya, asking the local dock workers where the people researching the Pug tech left on the planet are. They direct you to a quieter, less crowded place, where some warehouse complexes have been set up. Some are painted in the usual Syndicate colors, some are guarded by a few Navy troops, and a Free Worlds flag flies by the entrance of the one you enter. Inside, you see groups of people surrounding the various artifacts the Pug left behind. Some of them are running complicated looking tests, but it seems that they are mostly discussing what to do with the artifacts next. One of the graviton transmitters sits opposite to the entrance, half intact, half dismantled, with an array of scientists poking and prodding the inside machinery.` + ` Freya is atop a ladder near the transmitter when she sees you. She quickly hops down from her perch and runs towards you. "! It's nice to see you again. What brings you here?" You tell her you have some important matters to discuss, and she has you follow her to an office-like room packed with tools and components.` + branch lunarium + has "Lunarium: Questions: done" + label "don't tell" + ` You give her a rundown of the Coalition, explaining about the three species, the Heliarchs and their fight against the Quarg, and about who House Bebliss is, handing her the suitcase when you're done.` + goto suitcase + label lunarium + choice + ` (Tell her everything, including the Lunarium.)` + ` (Don't mention the Lunarium.)` + goto "don't tell" + ` You give her a quick rundown of the Coalition, explaining about the three species, the Heliarchs and their fight against the Quarg, the Lunarium Redoubt and their intentions to overthrow the Heliarchy, and the part House Bebliss plays in that, handing her the suitcase when you're done.` + label suitcase + ` "Well, at least these ones are asking if they can come invade us," she jokes as she lays the suitcase on a table, opening it. "Three alien species, huh? We were picking up some degraded radio signals from these systems, before the war even, so I figured there was someone out there." She begins to read the message House Bebliss prepared for her, frowning right at the start. "You didn't write this, did you?" You shake your head. "Thought so. The words are... jumbled?"` + choice + ` "Oh, that. You get used to it."` + ` "It's not so bad when you're talking with them in person."` + ` She gives the message an odd look, lets out an "if you say so," and continues to read it. "If this 'House Bebliss' is as advanced as they claim in this, I don't see how I could help them with anything, but they're offering to share their knowledge with me in return, so I won't complain. If nothing else it'll be an experience, working with giant spiders."` + choice + ` "So you're fine with letting them study the Pug artifacts with you?"` + ` "I can go back and tell them you've agreed then?"` + ` "Have you told the others about this?" Freya asks, and you tell her you haven't. "Alondo, JJ... they need to know about this 'Coalition,'" continues Freya, "even if they've no intention of invading us. JJ is stationed on currently, so I'll send word to him that we'll be heading there to meet with him. You can give us the whole situation, all details you've found out, there."` + ` You follow her back out of the room, and she tells the workers there she'll be heading away with you to to discuss some matters with JJ. They wish you a good trip, and you head out of the building and into a small residential area near the warehouse, built for the workers during their stay here. You help Freya pack her things while she messages JJ, and you two head to your ship. "When you're done, you can go pick up these Arachi and bring them here. On our way to , and while you're away getting them, I'll have some time to look at what they've sent me."` + ` You show her to her bunk once you're inside your ship, and plot a course for .` + accept + on accept + "assisting lunarium" ++ + on visit + dialog `You land on , but realize that your escort carrying Freya hasn't entered the system yet. Better depart and wait for it to arrive.` + on complete + "assisting lunarium" -- + on fail + "assisting lunarium" -- + +mission "House Bebliss 4-FW" + name "An Answer to House Bebliss" + description "Head back to to tell House Bebliss that Freya has agreed with their proposal." + landing + to offer + has "House Bebliss 3-FW: done" + not "assisting heliarchy" + source "Bourne" + destination "Factory of Eblumab" + on offer + conversation + `JJ is waiting for you two when you land, wearing a uniform with various medals and honors on his chest. He greets Freya with a handshake, then turns to you. "It was nice to hear from Freya that you'd be stopping to pay us a visit. Well, until she started going on about how you had some 'critical' information, that is," he says as he shakes your hand, sighing gently. "So much for taking a break from managing fleets."` + choice + ` "Sorry about that. It's nice to see you too, JJ."` + goto nice + ` "Well, you won't need to worry about anything being 'critical' too much when it comes to these aliens. Hopefully."` + ` "Hopefully? Wait, aliens?!" He gives you a mix between a worried look and a stern face. "Let's just go talk in my office. I'm guessing this is going to be a long story."` + label nice + ` He beckons you to follow him to a traffic shuttle, which eventually brings you to a towering government building. As you get closer, you notice the main courtyard is home to a multitude of different colored flags, all of them situated around the Free Worlds' own. "Planetary flags," JJ says as you both get out of the shuttle. "Some of our planets created their own recently, and some of the more diplomatic folks decided to set them up around the major government buildings." Leaving the flags waving in the breeze, the three of you head inside the building and go up an elevator, arriving on a floor with a couple rooms to the side and a larger one opposite the elevator. You enter the larger room and see a nice wooden desk, which JJ heads to, sitting behind it, as Freya takes a seat on the sofa.` + ` "Well, here we are. What is this 'critical information' you've found, Captain ?"` + branch lunarium + has "Lunarium: Questions: done" + choice + ` "Some more aliens."` + goto standard + ` "I hope none of you are afraid of spiders."` + goto standard + label lunarium + choice + ` (Explain everything, including the Lunarium.)` + goto tell + ` (Don't mention the Lunarium.)` + label standard + ` JJ quietly listens as you explain to him all you've learned about the Coalition. You bring up a map of the Free Worlds and show him and Freya the rough area of Coalition space and where it borders Free Worlds territory. As you gesture towards the map, you tell them of the three species, about the Heliarchs and how they've taken the three Quarg rings. Eventually you get to the Arach Houses, explaining that House Bebliss are the ones who wish to go study the Pug artifacts with Freya.` + ` When you're done, JJ is the first to speak up. "So far, we seem to be getting along better with these aliens than we did with the Pug. It's good that they're trying to be diplomatic, though I'm not sure it'd be a good idea for the general public to know of them, given past experiences. At least for right now."` + ` "Do they have jump drives?" Freya asks. You nod, but say that they can't make their own. "Well, as long as what stockpile they have isn't too large, we shouldn't be in too much trouble."` + ` "Except they took three Quarg rings," JJ chimes in. "They've beaten the Quarg? So they're stronger than the Quarg? More advanced?" He asks.` + choice + ` "No, but their ships are still a lot tougher than human ones."` + ` "No, but they do outnumber humans - all humans."` + ` "The Quarg would never just abandon their rings, and do you know how many Quarg are in one ring alone? There's no way they would have lost three of them like that," Freya says. "They'll want those rings back, that's certain."` + ` "And we're right between this 'Coalition' and the Quarg near Tarazed." JJ points at the map. "If they decide to go get their rings back, and our neighbors decide to use their jump drives to create a buffer before the Quarg hit them on their home turf..."` + ` They stay silent for a while, then JJ picks up the talk again. "If the Quarg have waited six thousand years, then they might wait a few thousand more. What matters now is that we know of these aliens, meaning we must start thinking about possible outcomes to all of this and what they mean for the Free Worlds. If we start preparations now, perhaps we'll get lucky and we won't get caught up in any other wars; especially wars involving the Quarg."` + goto accept + label tell + ` JJ quietly listens as you explain to him all you've learned about the Coalition. You bring up a map of the Free Worlds and show him and Freya the rough area of Coalition space and where it borders Free Worlds territory. As you gesture towards the map, you tell them of the three species, about the Heliarchs and how they've taken the three Quarg rings. Eventually you get to the Arach Houses, explaining that House Bebliss are the ones who wish to go study the Pug artifacts with Freya. You also tell them about the Lunarium, explaining the group's actions and their wish to take down the Heliarch government, and what role House Bebliss has in helping them.` + ` When you're done, JJ is the first to speak up. "So far, we seem to be getting along better with these aliens than we did with the Pug. It's good that they're trying to be diplomatic, though I'm not sure it'd be a good idea for the general public to know of them, given past experiences. At least for right now." He pauses, then addresses you directly. "It's... bold of you to want to help this resistance group of theirs. There's some sympathy given the Free Worlds' own history, but they sound like they have an even worse shot than what we had."` + ` "Whatever their government is, or whether it's overthrown or not, it doesn't change that they're right at our doorstep," Freya says. "Do they have jump drives?" she asks. You nod, but say that they can't make their own. "Well, as long as what stockpile they have isn't too large, we shouldn't be in too much trouble."` + ` "Except they took three Quarg rings," JJ chimes in. "They've beaten the Quarg? So they're stronger than the Quarg? More advanced?" He asks.` + choice + ` "No, but their ships are still a lot tougher than human ones."` + ` "No, but they do outnumber humans - all humans."` + ` "The Quarg would never just abandon their rings, and do you know how many Quarg are in one ring alone? There's no way they would have lost three of them like that," Freya says. "They'll want those rings back, no matter what faction is holding them."` + ` "And we're right between this 'Coalition' and the Quarg near Tarazed." JJ points at the map. "If they decide to go get their rings back, and our neighbors decide to use their jump drives to create a buffer before the Quarg hit them on their home turf..."` + ` "Well, if and this 'Lunarium Redoubt' succeed, it probably won't come to that, from what I've gathered," Freya says.` + ` "And if they don't? Then a human tried to help the rebels in their space overthrow them. A human that worked for the Free Worlds," JJ responds. "I'm not blaming you, , but we don't know what these 'Heliarchs' will do if you fail. If they figure out how to make their own jump drives, or worse, learn how to cut off our systems like the Pug did..."` + ` They stay silent for a while, then Freya picks up the talk again. "If this rebel group never came to be, we could eventually be caught up in a war between the Heliarchs and the Quarg. If they succeed, we won't need to worry about that, at least. If they fail, and the Heliarchs retaliate against humanity, we ask the Quarg for help. At least, with helping these rebels, there's a chance we won't get caught up in a war between the Heliarchs and the Quarg."` + ` JJ thinks for a bit. "Fair enough, but it's still worrying."` + label accept + ` JJ makes a few calls, arranging some meetings to inform Free Worlds officials of what you've told him, then heads out with you and Freya. You go to a cozy restaurant near the center of town, where Freya tells you a bit more of her recent work in Deneb, and JJ laments about some trouble he's been having with handling patrol fleets. He also comments on having visited Katya and Ijs in the Conservatory somewhat recently. They both keep asking you to tell more of your travels with the jump drive, and what you've seen of the galaxy. You do your best to describe the stars you've seen and planets you've been to, as well as the alien wildlife you've encountered. You worry at first that the stories might draw some attention to your table, but the waiters and other customers don't seem to pay much mind; either they ignored you or simply brushed it off as you having had too many drinks. You leave at dusk, and Freya says she'll help JJ in some of the talks with the Free Worlds officials, and will later find her own way back to Deneb. You say your goodbyes to them, and head back to your ship. You should return to now and tell House Bebliss that Freya's agreed to their proposal.` + accept + on accept + "assisting lunarium" ++ + on complete + "assisting lunarium" -- + on fail + "assisting lunarium" -- + +mission "House Bebliss 5-FW" + name "Jumping Spiders" + description "Acquire a spare Jump Drive and bring it to , where the House Bebliss representatives will have it installed in one of their ships." + landing + to offer + has "House Bebliss 4-FW: done" + not "assisting heliarchy" + source "Factory of Eblumab" + destination "Ablub's Invention" + on offer + conversation + `Landing beside an Arach Spindle, you maneuver your ship to House Bebliss' estate, and are once again welcomed by maids and butlers. They show you to a room where the same three Arachi from last time are.` + ` "Agreed to work with us, has she, Captain?" they ask.` + ` You tell them that Freya has agreed to work with them and let them study the Pug artifacts she has collected on Deneb. You also explain that she asked you to inform the Free Worlds about the Coalition first.` + ` "Understandable, that is. An unusual request, from an unknown group, it was." They have some of the servants start carrying dozens of luggage bags outside. "If in agreement, Miss Freya is, head to that planet, 'Deneb,' to meet her, we shall."` + choice + ` "How do you plan to do that?"` + ` "Do you have a jump drive?"` + ` "From the Heliarchs, much information our House can gather. Much more difficult, however, acquiring a jump drive is. Risky to possess one, even," they explain. "Assist us on that front, you must, Captain. Bring a jump drive to , you must. Equip one of our ships with it, we will. , you will receive."` + choice + ` "Why can't I just bring you to Deneb myself?"` + goto myself + ` "But you just said it's risky to possess one."` + ` "Indeed. Keep it, we would not," another one responds. "Once concluded, our business with your friend Freya is, and returned, we have, give you back the jump drive, we would."` + goto accept + label myself + ` "Stay there for some months, we will, and though agreed to help us, your friend Freya has, troubled by our presence, other humans may be," they respond. "So that issues with accommodating us, she does not have, use our ship as a base, we will."` + label accept + ` You follow them outside, and see them board the Spindle, heading to . You board your own ship, and head back to the city docks, preparing to meet them on when you have a spare jump drive for their ship.` + accept + on accept + "assisting lunarium" ++ + on visit + dialog `You land on , but you haven't brought the extra jump drive you needed to yet. Make sure to have it in your cargo before you land.` + on complete + "assisting lunarium" -- + require "Jump Drive" 2 + outfit "Jump Drive" -1 + payment 1500000 + conversation + `Some coordinates are automatically selected when you approach the surface of . You follow them to reach another private area of sorts, though it looks much more like a factory or a warehouse than an estate. On the corners, several flags and banners of House Idriss are in full display. House Bebliss' Spindle is landed there, and the members who will be following you to Deneb come to your ship when you land beside it. Some workers remove the jump drive from your ship and begin installing it on the Spindle. The House Bebliss members crewing the ship hand you when the drive is ready.` + ` "Once ready to leave, you are, meet us in the main spaceport, you should," one of them says.` + on fail + "assisting lunarium" -- + +mission "House Bebliss 6-FW" + name "Escort House Bebliss" + description "Escort the ship with House Bebliss' representatives to , where they intend to join Freya in her studies on hyperspace links." + to offer + has "House Bebliss 5-FW: done" + not "assisting heliarchy" + source "Ablub's Invention" + destination "Pugglemug" + on offer + conversation + `One of the employees of House Bebliss spots you immediately as you enter the spaceport and guides you to what they claim is one of the top restaurants here. The members of the House are waiting inside, the only patrons within the establishment. Having already ordered their meals when you arrive, they offer to buy you anything you want from the menu. Seeing the selection of "exotic dishes" on the other tables, though, you decide to decline their offer.` + ` "Ready for takeoff, our ship is," one of them says, preparing some napkins as the waiters bring their orders to the table. "To the world where your friend is, bring us, you must."` + ` Another one bites into something that looks like a goat's leg, albeit much bonier, before saying, "Prepared for concealing our presence, we and the crew are. Worry about that, you need not."` + ` "Extra fuel, the ship has. Enough to reach the planet, it should be," the last of them tells you. You stay at the restaurant for a surprisingly short while, as the Arachi devour the full-course meals in only a few minutes. You leave together, accompanying them to the hangars, where you see their Spindle landing next to the . They board it, saying they will follow your ship once you depart, and that you may take off at your earliest convenience.` + accept + on accept + "assisting lunarium" ++ + npc accompany save + personality escort timid + government "Coalition" + ship "Arach Spindle (Jump Drive)" "Toopy Mogrup" + on visit + dialog `You've reached , but left House Bebliss' ship behind! Best depart and wait for them to get here.` + on complete + "assisting lunarium" -- + event "bebliss research fw" 80 100 + payment 930000 + conversation + `As both your ships come in for a landing, you contact Freya and tell her the Arachi are with you this time. She tells you to land near the Free Worlds' warehouses, where you last met her, saying she'll be waiting there to greet them.` + ` When you arrive, you wait outside your ship while House Bebliss' ship keeps its hatch closed. It seems they intend to remain in there for the duration of their stay, most likely in fear that their appearance would cause a stir amongst other humans.` + ` A few minutes later Freya arrives, and you two approach the Spindle's hatch. Once House Bebliss is satisfied with making sure no curious bystanders are nearby, the hatch opens, and you two go into the ship. Though you've grown used to Arach ships by now, Freya's eyes dart around the interiors as you move within the ship. You imagine she's holding in the desire to ask you some technical questions about the model. When you arrive at the cockpit, you're greeted by the members of House Bebliss. Despite you having told her about them previously, Freya is understandably taken aback for a second or two upon first seeing the Arachi, but soon shakes it off, confidently walking up to greet them. "Hello, my name is Freya Winters. I've heard you're interested in the Pug artifacts we found on this world." Despite the initial shock in meeting them, for someone speaking with giant spiders for the first time she handles it surprisingly well.` + ` "Indeed. The trade of our great House Bebliss for thousands of years, the study of hyperlanes has been," one of the Arachi says. "When Captain told us of your achievements, know that need to come look into your work ourselves, we did."` + ` She quickly gets used to the translation box's odd speech quirk, as she and the members of House Bebliss discuss how to go about helping each other in researching the artifacts here. One of the crewmembers approaches you as they talk and hands you . "Thanks for safe escort here, this is," they whisper.` + ` Freya's talk with them goes on for almost an hour; they eventually settle on having some of the artifacts moved to their ship's cargo hold, so that some research can happen there without the risk of being seen. House Bebliss' representatives thank her for the reception, and you follow her back outside.` + ` Once the hatch is closed, she asks, "This is one of their freighter ships?"` + choice + ` "Yeah, though it's not their largest one."` + ` "They're civilians, so they can't buy the warships in their space."` + ` "It's definitely a lot leaner than most of our own freighters, for a ship of its size." She turns around, and approaches the ship, reaching her hands up to touch it. "Looks like it's got some very tough armor plating..."` + choice + ` "You think they'll be well hidden here?"` + ` "You think they'll be safe here?"` + goto safe + ` "What about the Republic and the Syndicate? Will you tell the teams here about the Arachi?"` + goto tell + ` "Well, has surged in population, for sure, but it's far from a tourist hotspot for now," she answers. "As long as they stick to that ship, no one should know they're here."` + goto end + label safe + ` " is close enough to Sol that we get Navy fleets flying by here pretty often, and it's far away enough from the pirate strongholds that we rarely get any of them raiding here. They'll be fine."` + goto end + label tell + ` "That's up to JJ, Alondo, and others more involved with Bourne and the Senate to decide. I imagine once they've put together a report of all you've told us, we'll be sharing that with the Republic and Syndicate. Probably best to avoid letting it out to the public right away though; there's still a lot of tension about aliens due to the Pug invasion."` + label end + ` She moves away from the ship, and you both leisurely walk back to the Free Worlds' warehouse, chatting as you go. "I need to go tell my team that we're moving some of the load to Southbound's new experimental freighter. I'd prefer to tell them what's going on myself - it makes things so much easier - but I think I'll wait a little longer before doing that. I want to see if I can get a good reading on these aliens first. Perhaps another scientific conversation would help. I'll be in contact if something happens. Safe travels, ."` + ` You say goodbye, and head to your ship. From the looks of it, it might take some months, if not years, before House Bebliss gets what information they wanted out of this trip.` + on fail + "assisting lunarium" -- + +event "bebliss research fw" + +mission "House Bebliss 7-FW" + name "The House Always Wins" + description "Head to , where the members of House Bebliss will return the jump drive you provided them, and give you your payment for assisting them." + landing + to offer + has "event: bebliss research fw" + not "assisting heliarchy" + source + near "Sol" 100 + not planet "Pugglemug" + destination "Ablub's Invention" + on offer + conversation + `You receive a message from Freya as you land on . "Hello ! I hope this finds you well. The past few months here have been... interesting, to say the least. Working with the Arachi has helped us find answers to the questions we had about the Pug artifacts, which invariably has led to more questions. The Arachi are a bit odd, but it's been fun working with them. I figured they would stay here for at least a year, given how many containers and large crates of supplies they brought in that freighter of theirs, but it looks like they've grown homesick, so we said our goodbyes today. They asked me to contact you and say they'll be waiting in a system called '' to pay you and return the jump drive they borrowed. Have a safe trip there, Captain."` + ` When you finish reading the message, you plot a course to .` + accept + on accept + "assisting lunarium" ++ + on complete + "assisting lunarium" -- + "assisted lunarium" ++ + outfit "Jump Drive" 1 + payment 2000000 + conversation + `Once again, coordinates appear on your screen as you come in to land on , leading you to the same building where you delivered the jump drive to House Bebliss. Their Arach Spindle is docked there, and the members who were working with Freya come to your ship. "Captain !" One of them greets you as you come down the hatch. "Received the message from Miss Freya, I trust you have? Very fruitful, our conjoined efforts have been."` + ` "Unfortunate, it is, that stay there longer we could not," another one interjects. "But away for much longer, we could not be. Need us here, House Bebliss does."` + ` They hand you as thanks for all your help, while the workers remove the jump drive from their Spindle and put it in your ship. The Arachi thank you once more and say goodbye one final time, boarding their Spindle and leaving the planet.` + on fail + "assisting lunarium" -- + + + +mission "Lunarium: Evacuation 1" + name "Pick Up Students" + description "Head to to pick up students and teachers by , and bring them back to their home planet of Second Viridian." + minor + deadline 10 + passengers 35 + "apparent payment" 386730 + source + near "3 Spring Rising" 1 4 + destination "Fourth Shadow" + to offer + random < 40 + has "Coalition: First Contact: done" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + `A few Kimek flag you down by the spaceport entrance. "Greetings, Captain. Work for a tourism company employing dozens of ships across the Coalition we do. Interested in employing your services, our captain is. You see, run into some trouble with the deadline, one of our ships has, and pay you handsomely for aiding the company, she would. Waiting inside that Spire, she is," they say, as they point to a ship parked not too far from your own.` + choice + ` "Alright, I'll see if I can help."` + goto alright + ` "Can't you just point me the way yourselves?"` + ` "Sorry, I'm not available at the moment."` + decline + ` One of the Kimek cowers his legs closer to his body for a moment. "Actually, just short of running late to a mission of our own, we are. Crew of another ship we are; merely told to contact you for help, we were. Too busy managing the rest of the fleet, she is."` + ` "A very busy season for us, it has been," another one adds. "Discuss the details, and your compensation, the captain will."` + choice + ` "Alright, I'll see if I can help."` + ` "Sorry, I'm not available at the moment."` + decline + label alright + ` One of them brings you to the Spire, sending a message as you two head there, and the hatch is opened right as you arrive. They thank you for helping, and rush to board their own ship and depart. You go up the Spire's ramp and meet some more Kimek from the company, who greet you and guide you through the ship. Halfway through a corridor, they stop and ask that you wait there. A different Kimek carring nearly a dozen different devices emerges from a side corridor, and the group begins patting and circling your body with the devices. You ask them what they're doing, but they don't respond. After every single one of the machines has finished its beeps and chirps around you, and the Kimek seem satisfied, they continue on. Surprisingly, they bring you not to the cockpit, but to one of the bunks, where a Kimek is talking with a Saryd man. Once she sees you're there, the Kimek gives a glance to the Saryd, and leaves with the others, leaving you two alone.` + branch lunarium + has "Lunarium: Questions: done" + ` Middle-aged, the Saryd has little hair on his head and a dense beard. "Greetings, human friend. your name is, correct?" You nod. "Apologize I do, for the safety measures experienced, you must have. You see, rather sickly lately, I have been, and while usually fine around Kimek or Arach employees and passengers, wish to try my health against a Saryd or human disease, I did not. But, come to listen of my woes, you have not. Called Elirom, and owner of this company, I am. For those wishing to travel in leisure or for work, provide comfortable ships we do," he explains. "Run into some trouble, one of our ships has. Supposed to transport students and teachers back to Second Viridian after their school trip was done, but now waiting for repairs for the ship's malfunctioning outfits, they are. Picked up by , the students must be, so as to not miss their tests, but elsewhere busy, our other ships are. Pick them up in our stead, would you? from our company, you will receive."` + choice + ` "Sure, where am I picking them up from?"` + ` "I'm sorry, but I'm not interested anymore."` + decline + ` "Waiting on they are. Inform them to expect your ship, I will. Remember, picked up before they must be." He bends his front legs lightly in a bow, thanking you for agreeing to help, and asks for one of the Kimek to come back and escort you out. They repeat the same tedious search process with the devices on your way out, and wish you good luck when they're finally done.` + accept + label lunarium + ` Middle-aged, with little hair on his head and a dense beard, you switftly recognize the Saryd as Elirom, one of the Lunarium leaders you met on Remote Blue. "Hello Captain , good to see you it is. Forgive me for the convoluted security measures, you must, always listening they are..." He rubs one hand over the other while glancing down. "Looking for our members all over , Heliarch ships are. Received word, I have, that arrive there by , many more Punishers will. If get there they do before evacuated our members, we have, afraid I am that unfeasible to save them, it will become. Still waiting for a ship, of them are, and get back there before the Punishers arrive on , our other ships will not. Captain, help us, you must. Compensate you with , I will."` + choice + ` "Of course, I'll head there right away."` + goto accept + ` "Can't they just lay low until the Punishers have gone away?"` + ` "No, no," he shakes his head. "Find them out, they would. They always do." His eyes wander around, as he takes a step back. He blinks repeatedly for a second, then looks back at you. "Seen what they do to the prisoners they take, I have, Captain. If there they remain, found they will be, and lost more, I would have."` + label accept + ` He has one of the Kimek come back to escort you out, but before you leave the room, he adds, "Students and their teachers, they are. Picking them up from a school trip, after canceled on them, the original transport did, you are. Bring them back home to Second Viridian for their tests, you will. Asked to do so by the captain of the original transport ship, you were." He urges you to go there as soon as possible to pick them up, and the Kimek take you back out, repeating the same security search in the hallway before opening the hatch for you. They wish you good luck, and close up the hatch again immediately after you've left.` + accept + on accept + "assisting lunarium" ++ + on visit + dialog `You land on , but realize that your escort with the bunks for the students hasn't arrived in the system yet. Better depart and wait for it.` + on complete + "assisting lunarium" -- + on fail + "assisting lunarium" -- + +mission "Lunarium: Evacuation 2" + name "Transport The Students" + description "Now that you've picked up the students and teachers, bring them to their home planet of ." + passengers 33 + landing + source "Fourth Shadow" + destination "Second Viridian" + to offer + has "Lunarium: Evacuation 1: done" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + `A line of Kimek, with some Saryds and Arachi in their midst, approach your ship shortly after you've finished landing. These must be the students. They are carrying very little luggage, and board your ship once you open the hatch. Given the young appearance of all of them, you struggle to guess which ones are the teachers. After the last of them comes in, you look outside for a while, confused. Only came in, not the 35 that Elirom mentioned.` + branch lunarium + has "Lunarium: Questions: done" + choice + ` "Weren't there 35 of you?"` + ` (Say nothing.)` + goto accept + ` Many of them wince at the question, and some of the Kimek start making some rhythmless, low clicking sounds. One of the Saryds comes to close the hatch. "Mistaken, the one who contacted you, must have been," she says. "Here, all of us are."` + goto accept + label lunarium + choice + ` "Weren't there 35 of you?"` + ` (Say nothing.)` + goto accept + ` Many of them wince at the question, and some of the Kimek start making some rhythmless, low clicking sounds. One of the Saryds comes to close the hatch. "Not anymore..." she says.` + label accept + ` They tell you that they're ready to leave, and ask that you depart for as soon as possible.` + accept + on accept + "assisting lunarium" ++ + on visit + dialog `You land on , but realize that your escort carrying the students hasn't entered this system yet. Better depart and wait for it.` + on complete + "assisting lunarium" -- + payment 386730 + conversation + `Some of the local Kimek are waiting with transport vehicles for the students. They hand you once you step off your ship, and one of them appears to tick away at a list with each student that steps off your ship. After the last one leaves, he continues to look at your ship for a few seconds, then to the students, entering the vehicles. He strikes two lines, and thanks you for helping. Back inside your ship, you receive a call from Elirom.` + branch lunarium + has "Lunarium: Questions: done" + ` "! Thank you for helping, I must," he says. "Difficult it can be, when relying on contractors we are. Prefer to travel in ships of my company, our clients usually do. Glad I am, that no issues with the 35 of them, you had. If any more trouble with our usual transports, I have, ask for your services again I may."` + choice + ` "Sure thing, it's no problem helping with this."` + goto end + ` "There were only , actually."` + ` "Only... oh, I..." he pauses for a few seconds just as his voice cracks a little. "Forgive me, Captain, mistaken, it appears I was. Mixed up the number of passengers with that of another client, I did. Pay more attention next time, I shall." He thanks you again, and ends the call.` + accept + label lunarium + ` "! A life saver, you are, quite literally," he says. "Handling other evacuations, I still am, so be there to thank you in person, I could not, but know that deeply grateful for your saving those 35, I am. Contact you again I will, when in need of more help rescuing members we are."` + choice + ` "Of course, I'd be glad to help again."` + goto end + ` "There were only waiting for me."` + ` Half a minute passes in silence. "I see. At any rate, thankful for your rescuing the others, I am," he says as he ends the call.` + accept + label end + ` "Appreciate your willingness to assist us, I do, Captain. Until we meet again." He thanks you once more and ends the call.` + on fail + "assisting lunarium" -- + +mission "Lunarium: Evacuation 3" + name "Pick Up Desert Ranchers" + description "Head to to pick up the ranchers by and bring them back to their world, Shifting Sand." + deadline 8 + passengers 47 + "apparent payment" 748300 + source + not government "Heliarch" + near "Silver Bell" 2 3 + destination "Chosen Nexus" + to offer + random < 50 + has "Lunarium: Evacuation 2: done" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + branch lunarium + has "Lunarium: Questions: done" + `Walking around the spaceport for a few minutes, you're met by a pair of Saryds. "Captain ? Worked with our company before, you have. Helped with transporting a group of students, you had." You nod. "Another troubling situation, we have. Help us again, would you?" They point to a Kimek Spire, presumably the very same you boarded last time, parked at the edge of the local docks.` + choice + ` "Sure, lead the way."` + goto talk + ` "I'm not interested in that kind of job at the moment, sorry."` + ` "Certain of that, are you? Willing to pay very well for your continued service, the captain is. Change your mind, would ?"` + choice + ` "On second thought, I'd love a transport job right now."` + ` "I'm just not interested in working with you anymore, no."` + decline + label talk + ` Once again you're brought to the Spire, but only the Saryds come in with you, unlike the Kimek from last time. You're all escorted through the corridors, and are all searched by the devices, before you're finally brought to Elirom. He greets you, thanking you for coming, "Some more problems, we've had, so in need of a contractor's help once more, the company is."` + ` "Contracted us for transport to , some Arach ranchers did. Attempting to start a longcow business on the deserts of Shifting Sand, they are, and hoping for a loan from a prestigious bank on , to start off a new expansion to the ranch they were. they are, in total, both ranchers and their employees. Only..." He pauses for a moment, as if considering something. "Difficult, the Arachi can be at times. Once discovered they had, that originally from a rival Arach House, the captain of their original transport was, refuse to return with him, they did. Given us until to find a new transport, before they cancel out on us, they have."` + ` He says you'll receive once the ranchers are back on Shifting Sand, and urges you to hurry to before , so that the Arachi don't cancel the transport. He wishes you good luck, and you're brought back out of the ship. The Saryds that went in with you stay inside, and the Spire departs not long after you've left.` + accept + label lunarium + `Walking around the spaceport for a few minutes, you're met by a pair of Saryds. "Captain ? Worked with our company before, you have. Helped with transporting a group of students, you had." You nod. "Another troubling situation, we have. Help us again, would you?" They point to a Kimek Spire, presumably the very same you boarded last time, parked at the edge of the local docks.` + ` You follow them to the Spire, and they come in with you, unlike the Kimek from last time. You're all escorted through the corridors, and searched by the security devices, before you're finally brought to Elirom. "Hello Captain, good to see you it is," he greets you. "Word of more Heliarch fleet activity, I have received. Headed to , to aid on an ongoing search for our members, they are. Arrive there by , they should, so in urgent need of a ship to rescue some still on the planet, I am. Pay you , I will."` + choice + ` "I'll go there right away."` + goto end + ` "How do you keep getting information about these fleets?"` + ` He collects his thoughts for a while before answering, "Work together to provide us secretive, quick data, Houses Bebliss and Idriss do. From them, the messages come. But, not by them, the information is found. Someone... something maybe, spying on the Heliarchs is. Not one of ours." He pauses again. "Doubted them myself, at first I had. But, never wrong, the information is, almost as if..." He trails off.` + label end + ` "Attempting to pass as ranchers, the members are. On a trip to , but an argument with their original transport, they had. If stopped, you are, tell them that, you should. Remember, . Hopefully still there when you arrive, all of them are." He wishes you good luck, and you're brought out of the ship, with the Saryds that found you staying inside. Not long after you've left it, you see the Spire take off and leave the planet.` + accept + on accept + "assisting lunarium" ++ + on visit + dialog `You land on , but realize that your escort with the bunks for the ranchers hasn't arrived in the system yet. Better depart and wait for it.` + on complete + "assisting lunarium" -- + on fail + "assisting lunarium" -- + +mission "Lunarium: Evacuation 4" + name "Transport The Ranchers" + description "Bring the ranchers to their world, ." + passengers 47 + landing + source "Chosen Nexus" + destination "Shifting Sand" + to offer + has "Lunarium: Evacuation 3: done" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + `The ranchers arrive to the hangars shortly after you land, most of them Arachi, with a few Saryds and Kimek in their midst. They come into your ship, all of them present.` + branch lunarium + has "Lunarium: Questions: done" + ` "All ready to leave, we are," one Arach tells you as most of the others head to find their bunks.` + choice + ` "Got it, we'll leave soon."` + goto accept + ` "How did getting that loan go?"` + ` "What?" She looks at you with puzzled eyes, until another Arach lightly whacks one of her legs. "Ah, yes, the loan. Well enough. Agreed to grant us the amount needed, they have." She looks back at the other Arach, who stares at her for a moment. "Well, very tired we all are, Captain, so head to my bunk, I will."` + goto accept + label lunarium + ` "Thought I had, that left behind we would be," one Arach tells you after you've closed the hatch. "Hurry to , you should. Risk an 'inspection' by the Heliarchs, we cannot."` + choice + ` "Got it, we'll leave soon."` + goto accept + ` "Is everyone here?"` + ` "Thankfully, yes. Lost nobody this time, we have," she says. "Less brutish on their searches on worlds like , the Heliarchs are. Managed to avoid them well enough, we did. Or, at least, hope so I do."` + choice + ` "Well, I'm glad everyone's safe. We'll leave soon."` + goto accept + ` "What do you mean? What's different about worlds like this one?"` + ` "What? Obvious is it not? In Saryd territory, we are. Come on now, ready to leave, we are."` + label accept + ` They all move to their bunks, and you set a course for .` + accept + on accept + "assisting lunarium" ++ + on visit + dialog `You land on , but realize that your escort with the ranchers hasn't arrived in the system yet. Better depart and wait for it.` + on complete + "assisting lunarium" -- + payment 748300 + conversation + `The Arachi, along with the scattered few Saryds and Kimek, are ready to leave your ship right as you land, thanking you briefly as each one leaves. The Arachi who seemed to be leading the group give you more of a farewell, chatting a bit, until they see a Kimek Spire - that you all guess to be Elirom's ship - approaching. They grunt, and leave with the rest. You head into the Spire and meet Elirom, who hands you while watching the group leave in transports via one of the cameras on the outside of the ship.` + branch lunarium + has "Lunarium: Questions: done" + choice + ` "They didn't seem very happy to see you."` + goto happy1 + ` "How come you're here? I thought you hired me because you didn't have any ships available."` + ` "Hmm? Ah, well returned to where we had met, one of the ships did. Made it in time to pick up the ranchers it could not, though, so very grateful for your service, the company is once again," he explains. "Delegated my own transport job to that ship instead, I did, for wished I had to apologize to the ranchers in person. Afraid I am, that hear my explanations they will not."` + goto end + label happy1 + ` "No, they were not." He sighs. "Well, understandable it is, from their perspective. More careful about who I sent to transport them, I should have been."` + goto end + label lunarium + choice + ` "They didn't seem very happy to see you."` + goto happy2 + ` "How come you're here? I thought you reached out to me because you didn't have any ships available."` + ` "At the moment, I did not, and available in time to rescue them, none of my ships would be," he explains. "Come here after the first of my ships had returned, I did. Wished I had to apologize to them in person, though it seems that hear any of it, they will not..."` + goto end + label happy2 + ` "No, they were not." He sighs. "A Heliarch, I once was. Arbiter. High rank. Thought of as untrustworthy by many of the Redoubt, I still am. Think, some of them do, that responsible for tragedies that came to their families, I was." He continues watching the group dwindle as more transports come, until the last of them disappears into the spaceport village. "That they are wrong, I hope."` + label end + ` He thanks you for helping out again, and says he'll be in contact if he needs any more of your help.` + on fail + "assisting lunarium" -- + +mission "Lunarium: Evacuation 5" + name "Pick Up Immigrants" + description "Head to by to pick up immigrants, who are seeking to start a new life on Ablub's Invention." + deadline 7 + passengers 116 + landing + source + near "Ablub" + destination "Cool Forest" + to offer + random < 80 + has "Lunarium: Evacuation 4: done" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + require "Jump Drive" + payment 1387562 + conversation + branch lunarium + has "Lunarium: Questions: done" + `You receive a call seconds after you've touched down on . It's from Elirom, the Saryd who had you help transport some of his company's clients. "Captain ! Your help again, we need," he begins. "Hired us to bring them to their new home on Ablub's Invention, some immigrants from did. in total. Only..." he looks down, his mouth struggling for words. "Fallen ill, the captain of the ship we had arranged for them has. Supposed to leave by , they were, but get to in time, we cannot. You, however, a jump drive possess. Help us now, only you can, Captain."` + choice + ` "I'd be glad to help. I'll head there as quick as I can."` + goto glad + ` "Can't they just wait a bit longer for you to send another ship?"` + ` "I'm sorry, but I'm busy right now."` + ` "Please, Captain. Answer all your questions, I will, once safely here they are." He quickly types away at something close to the camera on his end, and you're notified of in total just having been transferred to your account. "Paid much more for bringing them to safety, you will be. To Ablub's Invention, you must bring them. Sending word for them to wait for you, I am. Please help us this one more time, ." He looks at you for a moment, then bows lightly before logging off.` + accept + label glad + ` He sighs in relief, then quickly types away at something close to the camera on his end, and you're notified of in total just having been transferred to your account. "Paid much more you will be, once safe, the immigrants are. Bring them back to Ablub's Invention, you must. Send word for them to expect you, I shall." He bows lightly, then logs off.` + accept + label lunarium + `You receive a call seconds after you've touched down on . It's from Elirom, and he wastes no time giving you your next mission. "A particularly urgent matter, this is. Looking for our members on , the Heliarchs are. Found, dozens have already been, and even more Heliarchs by will there arrive. Make it in time, none of our ships can, too far away it is. You, however, a jump drive possess. Rescue the remaining, you must." He types away at something on his end for a bit, and you see have been transferred to your account. "Much more I will give you, once safely back on Ablub's Invention you are. If stopped by the Heliarchs you are..." He trails off for a while, and you can hear the increasingly hurried, repeated tapping of hooves on the floor. "If stopped you are, tell them that transporting immigrants to their new homes on Ablub's Invention, you will. Hired by House Idriss, they have been." He urges you to go to immediately, wishing you good luck, and logging off.` + accept + on accept + "assisting lunarium" ++ + on visit + dialog `You land on , but realize that your escort with the bunks for the immigrants hasn't arrived in the system yet. Better depart and wait for it.` + on complete + "assisting lunarium" -- + on fail + "assisting lunarium" -- + conversation + `You are contacted by Elirom upon landing.` + branch lunarium + has "Lunarium: Questions: done" + ` "Informed I was that manage to make it in time for the transport, you did not, Captain," he speaks in a much sterner tone than what you'd grown accustomed to. "Truly important for us, this job was. Helped us much, you have, but afraid I am that work together any longer, we will not. Goodbye."` + ` He signs off before you're able to explain your delay.` + decline + label lunarium + ` "Why there were you not, ? Lost to the Heliarchs, all of them now are!" He punches the table, shaking the camera on his end. "Supposed to arrive on time, you were. To rescue them, you were meant to. Abandon them like that, how could you?" He appears to swear in the Saryd tongue.` + ` He spends a few minutes to calm down, then speaks up again. "Forgive me, Captain. Helped us much, you have, and appreciated your previous heroic actions are, but wrong to rely on you this time, I was."` + ` He signs off before you're able to inquire on other ways to save them.` + +mission "Lunarium: Evacuation 6" + name "Transport The Immigrants" + description "Bring the immigrants to their new homes on ." + passengers 91 + landing + source "Cool Forest" + destination "Ablub's Invention" + to offer + has "Lunarium: Evacuation 5: done" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + `The moment your ship touches down on the hangar you can already see a very large group of Saryds waiting. When you open your hatch, they rush in dozens at a time, and you catch some Kimek and Arachi in the middle, struggling to keep with the galloping mass. Once everyone is inside, you run a passenger count: only of the 116 are on board. You look out, and see nobody else coming to your ship. One of the older Saryds approaches you, pressing the button to close the hatch. "Leave we must," he says. Looking back to the Saryd crowd, many of the adults are comforting their children. The sobs of one Saryd girl in particular drown out the others.` + branch lunarium + has "Lunarium: Questions: done" + choice + ` "I was told there were 116 of you for me to pick up. We only have ."` + ` "Alright, we'll leave in a few minutes."` + goto launch + ` He squints, clenching his hands into fists and then relaxing them again. "Only you are getting. Take us away from here, now, or fly your ship myself, I will."` + goto launch + label lunarium + choice + ` "Understood. We'll leave in a few minutes."` + goto launch + ` "What about the others?"` + ` He looks back to the wailing girl, his hands slightly trembling as he clenches them into fists. He turns back to you, opening his mouth as if to say something, but no words come out. He heads back to the crowd, headed for the young girl.` + label launch + ` You help everyone settle into their bunks, departing for when you're done.` + launch + on accept + "assisting lunarium" ++ + on visit + dialog `You land on , but realize that your escort with the immigrants hasn't arrived in the system yet. Better depart and wait for it.` + on complete + "assisting lunarium" -- + set "Lunarium introduced" + "assisted lunarium" ++ + payment 7149832 + conversation + `You receive a message from Elirom as you enter the planet's airspace, passing you some coordinates and instructing you to land there instead of the usual ports here. You come to a complex in the middle of a prairie, with a blue-ish metal building at its center. As you come down for a landing, you see Elirom's own ship is landed there.` + ` Just as quickly as they entered it, your passengers rush out of your ship, greeting and hugging some of the people waiting for them. One of them, Elirom, shyly watches from the Spire, not having come down the ramp yet. The older Saryd who was accompanying the crying Saryd girl leaves her side briefly once he sees him, walking at a quick pace towards Elirom. He grabs him by the shoulders and shouts something in the Saryd language, though no translators pick it up. When he lets go of his shoulders, he goes back to accompanying the girl, and Elirom stays put. You go to him, which prompts him to reach in a pocket and grab a bunch of credit chips, handing them to you. , in total. "Told you I did, that well paid you would be."` + branch lunarium + has "Lunarium: Questions: done" + choice + ` "What were all of them so worked up about?"` + ` "What's really going on with you and your company?"` + ` He looks into your eyes for a few seconds, before taking a long gaze at the skies. "Come. Talk inside the ship, we should." You two head inside, and one of the Kimek crew members closes the hatch. You come to his bunk, where he sits down and begins, "A transport company, I do not own. No company at all, I own. Transporting students, ranchers, immigrants, you were not." He looks at you intensely. "Saving lives, what you have been doing is. Saving them," he points out to the corridor, in the direction of the hatch.` + choice + ` "Saving them? From what?"` + goto what + ` "I just flew them from one planet to another."` + ` "And in doing so, saved their lives, you have," he responds. "The truth, it was, that arrive to the planets I sent you in time, my other ships would not, but not in a hurry due to contracts, we were. Searching for them, the Heliarchs were, and on their way, Punisher fleets were. Captured, all those you rescued would have been, if arrived before you, those Punishers had."` + goto reveal + label what + ` "Why, the Heliarchs. Our so-called 'protectors.' Paranoid, self-decorated butchers in their rooms deep within the rings..." He looks to the ground, disgust written on his face. "Preying on us for many centuries, they have been. With what insanities they invent and worship, their actions they justify."` + label reveal + choice + ` "The Heliarchs were looking for them? So they... you all are criminals?"` + ` "Who are you?"` + ` "Elirom, I am. Born on Saros. Raised there, fascinated by the Heliarchs since my infancy. When of age I came, into the Academy of Cadets I enlisted. Served the Heliarchy for 67 years, I had, before finally the right thing, I did. For the last 18 of those years, an arbiter, I was." He brings his hands together, as if to warm them up. "The Lunarium Redoubt, I then joined. Belong to that group, those you rescued do. Or, at least, their parents do... did." He sighs. "Criminals, outlaws... whatever names the Heliarch call us, simply trying to save our Coalition from them, we are. Saving people from their mock hunts for terrorists, my job is. Believe me, you may not. Choose to see us as what the Heliarchs deem us, you can. In doing that, though, changing the things they do, the things that seen, I have, the things that..." he trails off. "But, dead to them for decades now, I have been."` + choice + ` "You want me to join your group in fighting the Heliarchs, is that it?"` + goto join + ` "Dead? What do you mean?"` + ` He thinks for a few minutes, oftentimes opening up his mouth as if deciding to speak, but ultimately going back to reflecting on what to say. "When decided to... desert, I had, work I did on covering up my fleeing of the facility I was stationed at. After forcing an... an incident, meant to erase all traces of mine, fled and hid in civilian ships for a while, I had, until found by the Lunarium I was." He smirks lightly, as if in bitterness. "Thought I did that aware enough of their patterns and method, I was, enough to locate them. Found me first, they did though. Taken in, I was, and helping them since, I have been."` + choice + ` "What facility did you work at?"` + ` "An incident? What did you do?"` + ` His eyes flicker at your question, locked in with yours. He averts his gaze, looking back to the ground. "Get going, I really must. Address those you rescued, I shall. Attempt to comfort and relocate them."` + label join + ` He gets up to leave. "Come ask for your help directly again, for a long time I may not, but still in need of help saving our members, we will be. Very grateful, we would be, if help us again when we need it, you would." He extends his arm, and shakes your hand, just before following you back out of the Spire. He quickly trots inside the central building, and you head to your ship and fly to the main spaceport.` + accept + label lunarium + choice + ` "He seemed angry at you."` + goto angry + ` "I could only get ."` + ` "I know." He sighs. "Made sure I understood that, that old man has."` + goto end + label angry + ` "That he is. A difficult thing to go through, it is. Used to such rough talk, I've grown."` + label end + ` He comes closer to you, slouching down and speaking quietly. "Come ask for your help directly again, for a long time I may not, but still in need of help saving our members, we always are. Very grateful, we would be, if help us again when we need it, you would." He pulls back, and extends his arm to shake your hand. He looks at the sky just before he leaves. "Steer clear from the sun you should, ." He thanks you again, and leaves to accompany the rescued members into the central building.` + on fail + "assisting lunarium" -- + + + +mission "Lunarium: Propaganda 1" + name "Promoting Culture" + description "Bring Tummug to , where he'll meet with others to spread a set of promotional posters around the planet." + minor + passengers 1 + cargo "promotional posters" 1 + source + near "Ancient Hope" 2 4 + destination "Bright Echo" + to offer + random < 25 + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + branch lunarium + has "Lunarium: Questions: done" + `The spaceport of looks different than the usual Saryd ports: several large posters with some form of badge or logo are scattered about, some fallen to the ground, others still sticking to the walls. As you pick one up to get a better look, an Arach approaches you. "Captain you are, yes?" You nod. "Tummug, I am called. Caught your eye, I see that our posters have. Part of a group promoting new cultural festivals and movies, I am. A tiresome task at times, repetitive even, but always worth it, in the end, helping spread word of new art pieces is."` + choice + ` "What are these ones for?"` + ` "And you want my help, I take it?"` + goto help + ` You show him the poster you picked up, which has an image of two crescent moon figures 'swallowing' a dark, nine-pointed star. He looks at it for a while, then answers, "Ah, for the 'Twin Eclipse' theatrical show, it is. A recent success from a group of students from Starlit University. Forgive me, so many plays and films I help divulge, that forgetful of their exact imagery, I can get."` + label help + ` He asks for the poster and as you hand it to him, he pulls out some manner of spray. Using it on the blank end of the poster and on the nearest wall, he puts it back there. "Done with my work here, I am. Transport to I need, as waiting for me to help spread some more posters, coworkers of mine are. Take me there, would you? Pay you , I will."` + choice + ` "Sure, let me take you to my ship."` + ` "I'm not headed there right now, sorry."` + decline + ` You give him the berth for your ship, and he tells you he'll meet you there soon before running off. A few minutes after you've reached the , you see him approaching, pushing a small crate "filled to the brim with the posters," he explains as you help him load it into your cargo. When you're done, you show him to his bunk, and prepare for the trip.` + accept + label lunarium + `The spaceport of looks different than the usual Saryd ports: several large posters with some form of badge or logo are scattered about, some fallen to the ground, others still sticking to the walls. Picking one up to get a better look, you recognize the symbol to be that of the Lunarium Redoubt, two moons swallowing a dimming sun. "Up to any unlawful behavior, Captain ?" You turn to see an Arach standing there, looking at you. You recognize him as Tummug, one of the Lunarium leaders you met on Remote Blue. "Talk in your ship, could we?" You bring him to the , and seal the hatch. "Spreading propaganda material against the Heliarchy, I am. The purpose of those posters you found, that is," he explains. "Not the best recruitment strategy, but what I can do without risking too many of our members, it is. Available, are you? In need of transport to , to continue the work, I am."` + choice + ` "Of course, we'll leave right away."` + ` "Sorry, I'm not going that way right now."` + decline + ` "First, get the merchandise, I must," he says as he leaves your ship. He comes back a few minutes later, pushing a small crate "filled to the brim with the posters," he explains as you help him load it into your cargo. When you're done, you show him to his bunk, and prepare for the mission.` + accept + on accept + "assisting lunarium" ++ + on visit + dialog `You land on , but realize that your escort carrying Tummug and the posters hasn't arrived in the system yet. Better depart and wait for it.` + on complete + "assisting lunarium" -- + payment 288000 + conversation + `As you're still handling landing procedures, Tummug is organizing the posters in several smaller piles. "Make sure everyone has the same amount of posters, I must. Let any of them slack off, I will not," he banters. Your ship touches down on the hangar, and Tummug hands you . He makes a call, and minute after minute some Saryds start coming to your ship. You open the hatch, and he starts handing out a pile of posters to each one who comes in. The posters aren't all identical, though the imagery is pretty much the same in all of them: a dark, nine-pointed star, crumbling to pieces.` + branch lunarium + has "Lunarium: Questions: done" + choice + ` "So what are these posters for?"` + ` "Do you really need that many posters?"` + goto many + ` He pauses at your question. "What they are for? Oh, the... 'Crumbling Winter Star' I believe it is called? The play these posters are for?" he asks to one of the Saryds, extending his legs to give them their pile of posters. The Saryd looks at him, then you, and nods. "A big hit on Saros, I hear it was."` + goto end + label lunarium + choice + ` "How exactly are these images going to help?"` + ` "Do you really need that many posters?"` + goto many + ` "A symbol of Heliarch power, their shining golden sun is. A taboo, dimming or breaking that sun has become. Punishable, even. So, with dimming and breaking that sun, hoping we are that get the Saryds interested in finding out why one would do that, the posters do," he explains.` + goto end + label many + ` "One of the more populous Saryd planets, this is," he responds. "Sure, on the smaller side, the city may be, by Arach or Kimek standards, but still large enough to warrant many posters, it is."` + label end + ` He hands out one of the final two piles to the last Saryd, and grabs the last one for himself. "Now, help them with the posters, I will. If interested in helping us further, meet you in the spaceport, I will. Have some dozen extra bunks available, you must make sure," he says as he leaves your ship.` + on fail + "assisting lunarium" -- + +mission "Lunarium: Propaganda 2" + name "Promoting Culture" + description "Bring Tummug and his colleagues to , where they'll spread around some sets of banners around the planet." + passengers 11 + cargo "promotional banners" 1 + blocked "You need in order to take on the next mission. Return here when you have the required space free." + source "Bright Echo" + destination "Factory of Eblumab" + to offer + has "Lunarium: Propaganda 1: done" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + `As before, you find the local spaceport decorated with Tummug's various posters, with some all over the walls and a few on the floor already. Either they were taken down or simply failed to stick to the wall properly. Most of the locals just glance at them, then continue on with their business; only a few pockets of people have formed near some of the posters, perhaps discussing the imagery. Some of the spaceport cleaning workers, on the other hand, take them down nonchalantly, though they don't seem to care too much about getting all the posters.` + branch lunarium + has "Lunarium: Questions: done" + ` You find Tummug waiting for you in a cafe with some Saryds. "Ready to help us again are you, Captain?" he asks as you sit down.` + choice + ` "Where are we going now?"` + goto where + ` "Is everyone here? I made sure to have some bunks free as you said."` + ` "Ah, thank you Captain. Yes, all of us, this time you will be transporting," he answers. "Bring along some more help, I wished to, but canceled some of the others have. Some more work here, they must do."` + label where + ` He runs one leg over his mandibles in an almost contemplative gesture. "To my home, we will go. . Setting up one of the famous Arachi soirees, some of the locals are, and tasked with helping them gather attention, we were. Paid once on we are, you will be."` + ` You all leave the cafe, and Tummug and the ten others follow you to your ship. They bring in , and settle in their bunks.` + accept + label lunarium + ` You find Tummug waiting for you in a cafe with some Saryds. He gets up once he sees you, and the Saryds follow him outside the establishment. "Talk in your ship, we should," he says once he's close. You all head to the hangars and get inside your ship, with some of the Saryds heading elsewhere to pick up the cargo you'll be carrying. "Run into some trouble, a few of ours have. Leaving for , we are. Born and raised there, I was, so more familiar with the city's layout, I am. Less likely for some of us to be caught, it should be. Provide them a place to lay low for some time, we will."` + choice + ` "Shouldn't we help the ones who got caught?"` + ` "Alright, we'll leave once the others come back."` + goto back + ` "Caught? Caught they were not," he says. "Run into some trouble, they have, but caught, they have not yet been. Not that I've heard, at least." He pauses as he looks out to the hangars. "Made it to the meeting point, they have not, but news of any arrests or executions, I have not seen. Most likely, hiding out to avoid the patrols that could have seen them, they are."` + label back + ` The Saryds return a few minutes later with . Once it's safely in your cargo hold, you show Tummug and the others to their bunks.` + accept + on accept + "assisting lunarium" ++ + on visit + dialog `You land on , but realize that your escort carrying Tummug, his colleagues, and the banners hasn't arrived in the system yet. Better depart and wait for it.` + on complete + "assisting lunarium" -- + payment 576000 + conversation + `As before, Tummug separates the banners into small piles as you're finishing your landing procedures. He hands you right before the first few Saryds leave with their piles, and a few local Arachi join them in picking up banners to distribute around their local neighborhoods. "Meet you in the spaceport again, we will," Tummug says as he finishes distributing the banners. Looking at his own pile, you see an image split with a sharp line running from top to bottom, with the drawing of an Arach collapsing under a scorching sun on the left side contrasted with one having a happy dinner under the moonlight on the right side. Some message in the Arach language is written out at the bottom, below the two images.` + branch lunarium + has "Lunarium: Questions: done" + choice + ` "What does that say?"` + ` "Alright, I'll meet you at the spaceport in a few hours."` + goto end + ` "This? 'The Twins' Twin Ships' it is, a... mostly comedic play," he explains. "Nearly identical in looks, the two Arach main characters are, but a rich member of a great House, one of them is, while simply cheap transport to a world with a better job, the other wants. On the same planet, unaware of one another, book passage with the two different Kimek captains, they do. Only, also alike, the two Kimek are, and fly the same model of ship, the Kimek Thistle, they do. Brought to a scorching, stale Saryd factory world, the rich Arach is, while a fancy welcome by the powerful House, the worker gets." He catches himself before going further into the plot. "Well, uh, like I said, mostly a comedy, it is. Not too interesting, I suppose it might be."` + goto end + label lunarium + choice + ` "What does that say?"` + ` "Alright, I'll meet you at the spaceport in a few hours."` + goto end + ` "Read 'Down with the Tyrant House!' it does." He says. Once he notices you have no idea what that means, he continues, "An Arach nickname for the Heliarchy, it is. First used thousands of years ago it was, when more restrictive, and much less lenient, the Heliarchs were becoming. Prohibited, the expression was, but still known, its meaning is."` + label end + ` He prepares to leave, and tells you to free up some ten tons of cargo space and keep five bunks available before meeting with him in the spaceport. He then heads down the hatch and disappears into the city.` + on fail + "assisting lunarium" -- + +mission "Lunarium: Propaganda 3" + name "Promoting Culture" + description "Bring Tummug and his Arachi colleagues to , with their ." + passengers 5 + cargo "flyers and skywriting material" 10 + blocked "You need in order to take on the next mission. Return here when you have the required space free." + source "Factory of Eblumab" + destination "Sandy Two" + to offer + has "Lunarium: Propaganda 2: done" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + `The spaceport on shows fewer of the banners than you expected, with only a few scattered about the walls. One Arach leaves their work building and gasps at the first banner they see, taking it down and throwing it in a bin. They seem stunned for a second, and look around in a hurry, right before scurrying off. Another Arach has a similar reaction to a different banner, but after pondering for a bit, leaves it alone and walks away.` + ` When you're done gauging the local reception to Tummug's banners, you go look for him. Eventually you arrive at a workshop, where he's talking with four other Arachi as they work on some small robots not too different from those employed in Arach hull repair systems. The only difference appears to be "wings" that the Arachi are testing by controlling them remotely. "Captain !" Tummug exclaims when he notices you. "Apologize, I must, for not waiting for you in the spaceport. Caught up in testing the prototypes, we were."` + branch lunarium + has "Lunarium: Questions: done" + choice + ` "What were you testing?"` + ` "What are those robots for?"` + ` "Remote-controlled drones, they are." He asks one of the Arachi for their controller and begins flying the robot around you. "Testing the precision and response time of commands given to them, we were. Essential for our next venture, they are." He moves the robot away from you and pushes a button on the controller, prompting several small compartments around the machine to open up and a reddish smoke to seep out. "Going to next, we are. A very populous world, it is, so impossible to cover the whole city in posters, it would be. Use these robots for skywriting our messages, we will." He hands the controller back to the Arach and walks up to you, showing a flyer small enough to fit in your palm, with some short messages in the Kimek language. "Useful for dropping these over the main city, they also will be."` + choice + ` "Well, I hope the robots work okay. I'll help you bring them to my ship."` + goto accept + ` "What's written there?"` + ` He pulls back the flyer, looking closely at it. "It should be... 'Hottest Summer' and 'an attraction for all people.' A Kimek movie, it is. Not too used to reading Kimek, I am, but designed by some of our Kimek coworkers, these were, so no issues here, there should be." He looks back at the robots. "Only keep the skywriting correct as well, we need."` + goto accept + label lunarium + ` He signals to one of the Arachi, and they walk past you to close the doors and windows to the workshop. "Headed for next, we are. Too populous a world it is, for us to cover all ground with posters or banners. Use the robots, we will." He asks one of the Arachi for their controller and brings the robot closer to you. He presses a button, and it prompts several compartments around the drone to open up, releasing a reddish smoke. "Leave our messages in skywriting, we will," he says as he hands the controller back to the Arachi. He approaches you, showing you a flyer small enough to fit in your palm, with some short messages in the Kimek language. "Use them to drop these around the main spaceport city, we also will."` + choice + ` "Isn't that too risky? Wouldn't the Heliarchs find you out with ease?"` + goto risky + ` "What's written there?"` + ` "This one means 'Lordless Suns,' and 'Our Laws for Our People' on this other one," he says, pointing with the tip of one leg to one boldened symbol as he says the first "our." He goes to explain their meaning. "The lords of all Coalition stars, the Heliarchs call themselves. When taken, the Ring of Friendship was, when formed, the Heliarchy was, still far more advanced and experienced in most fields the Saryds were. Turned 'their' ring into the seat of government, they had, and in the naive euphoria victory had granted them, tricked into adopting the Saryd law system, the Kimek and Arachi of the time were. Saryd sentences, Saryd punishments." He looks at you as he drags some legs across the floor, as if scratching the ground. "For only a quarter of a Saryd lifetime, the eldest of the Arachi lived. For all their population, managed to live past a century only a few dozen Kimek have. A third of a lifetime to them, even relatively minor Saryd sentences, the Heliarch sentences, are." He slowly crumples the flyer. "Ruled by laws of long-dead Saryd lords, we still are..."` + goto accept + label risky + ` "Spoken with Elirom, I have. Moving fleets around, the Heliarchs are, since distractions for them in other systems, some of our teams have prepared," he explains. "Fewer ships on the planet there are, and quick about it, we will be, so unlikely for them to find us, it is."` + label accept + ` Tummug tells the other Arachi to pack up the rest of the robots and flyers, and accompanies you to your ship. In a few minutes the Arachi come dragging carts with crates filled with the drones, flyers, and canisters of the red smoke for the skywriting. The Saryds you brought here follow after them, bringing along more and more carts. Tummug says you'll get once they get to , and moves to his bunk, with the other Arachi following suit.` + accept + on accept + "assisting lunarium" ++ + on visit + dialog `You land on , but realize that your escort carrying Tummug, his colleagues and the skywriting material hasn't arrived in the system yet. Better depart and wait for it.` + on complete + "assisting lunarium" -- + payment 491000 + conversation + `This time Tummug doesn't go on to split the flyers into various piles as you're landing. "Already arranged them in the boxes, we have," he says. He directs you to land in a lone hangar on one of the factories far from the city. Upon landing, several Kimek enter the hangar and start crating off the flyers and skywriting drones back to the factory, presumably to make sure they're all in working order. Tummug hands you , thanking you for bringing them here.` + branch lunarium + has "Lunarium: Questions: done" + ` "Now Captain, fly the drones over the city we will. Only here to keep an eye on any issues they might have, and repair them, we are," he explains. "To better enjoy the show, head back to the main hangars closer to the city, you should. Once finished, we are, meet you in the spaceport I will. Some more cargo space and bunks, we'll need." You head to your ship, and fly it back to the city.` + goto end + label lunarium + ` "Now , safe here we should be, but even with fewer Heliarch ships now, stay docked here you should not. If traced to here, the signal controlling the drones is, ready to abandon the facility and flee, everyone is," he explains. "Meet you in the spaceport later, I will. Some more cargo space and bunks, we'll need." You head to your ship, and fly it back to the city.` + label end + ` Almost half an hour goes by with you watching the skies of before the first signs of the drones show: they're too small for you to see from where you are, but you make out the piles of red smoke swiftly growing into Kimek letters in the sky, appearing in spiraling columns and arcs, with small, spread out dots separating the letters. Crowds clog the streets, Kimek look out the windows and some even gather atop apartment buildings to gaze at the messages. When the drones are done, the messages Tummug had shown you on the flyer are fully formed, and the drones take a short break. When they return, they get to work on another set of messages as the first one begins dissipating. After a few repetitions, and another pause, flyers begin raining down the city streets, the local Kimek picking them up in curiosity and discussing among themselves. The "rain" goes on for several minutes, before the drones start heading to other portions of the city and you lose sight of them.` + ` Focusing now on the crowds and their reception, you see the Kimek are split: nearly everywhere they are in heated discussion, with many on one side seemingly approving of the display, while others yell and gesture for the messages to be put out, throwing the flyers to the ground and stomping on them. The Heliarch agents present on the ground do their best to separate the crowds and keep the order, but struggle against the sheer number of Kimek. Not long after the drones disappeared, however, Heliarch warships fly through the atmosphere in a fury, speedily undoing the skywriting as they head in the direction of the factory. Some ships leave more agents on the ground, and with increased personnel the Heliarchs now manage to stop the crowd infighting, and start clearing out the streets.` + decline + on fail + "assisting lunarium" -- + +mission "Lunarium: Propaganda 4" + name "Promoting Culture" + description "Bring Tummug, his colleagues, and their to ." + passengers 18 + cargo "promotional posters" 12 + blocked "You need in order to take on the next mission. Return here when you have the required space free." + source "Sandy Two" + destination "Warm Slope" + to offer + has "Lunarium: Propaganda 3: done" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + `Tummug is quick to find you in the spaceport. He approaches you with the Arachi who helped him with the drones, as well as some Saryds and Kimek, all following behind him in a dash. "Delay you long this time I will not, Captain ," he says. "Headed to we are. Already arranged for what we'll need to be brought to your ship, I have."` + branch lunarium + has "Lunarium: Questions: done" + ` He then tugs on your clothing as if asking you to bow down a bit, as he himself stretches up. "Leave at once, we must!" he whispers.` + ` You do your best to keep up as you run with them back to your ship, where they help some others load boxes and crates of promotional posters into your cargo hold. Strangely enough, you don't see any of the flyers that the drones rained from above earlier, or any sort of video displaying the skywriting on screens around the spaceport. Once the cargo is all in your ship, Tummug comes to say you'll receive for the job, and rushes inside your ship with the others.` + accept + label lunarium + ` He briefly glances around, then says, "A busy day it is, so hurry back to your ship we should. Otherwise, difficult to find, available cargo loaders will be."` + ` Running back to your ship, you notice a total lack of the flyers that rained down the city earlier, or any replay of the skywriting on any of the screens around the spaceport. Tummug and the Arachi who worked on the drones are all with the group, but their rush to get to your ship leaves you uneasy. You all help some more members get boxes and crates of posters into your ship, and head inside with Tummug and the others once you're done. "Leave now, we must. Too much attention, the drone show seems to have gained us," he tells you. "Pay you once on we are, I will. Go." They all head to their bunks, and you move to the cockpit, firing up your engines.` + launch + on accept + "assisting lunarium" ++ + on visit + dialog `You land on , but realize that your escort carrying Tummug, his colleagues and the posters hasn't arrived in the system yet. Better depart and wait for it.` + on complete + "assisting lunarium" -- + set "Lunarium introduced" + "assisted lunarium" ++ + payment 894000 + conversation + `Tummug gives you the and starts working on opening up the crates and boxes with the others. By the time you open the hatch, they've only managed to open some of the crates, but it seems like they've called in several Saryds from the hangar to help unload the remaining boxes and move them elsewhere. You approach Tummug, who's still picking through the posters. The posters are emblazoned with images of Saryds, Kimek and Arachi jailed and imprisoned in cages made out of chains. Looking closely, you realize the "chains" are made out of circlets like those used by the Heliarchs. Your eyes go to Tummug, who's looking back at you.` + branch lunarium + has "Lunarium: Questions: done" + choice + ` "What exactly are these for?"` + goto for + ` "I don't think the Heliarchs would be very approving of these."` + ` "Approving of none of our work, they are," he responds. "Enjoy lying to you, I did not, Captain, but risky it would be, to tell you who we were before we secured the boxes and crates from ."` + goto question + label for + ` "True it is, that spreading around posters, banners and flyers as propaganda, we have. Only, not for some movie or other media they were. Jabs at the Heliarchy, they all have been, means of getting the people thinking, so that maybe recruit them, we can. Help greatly with that, what we secured from will."` + label question + choice + ` "What did you bring in those crates? Weapons?"` + ` "Who are you?"` + goto who + ` "Evidence. Proof. Of their crimes unpunished, of treason against one's own. Hold countless billions, the Kimek factory worlds do, and grounds for many of the Heliarchs' senseless arrests, they are. Write off disappearances as work accidents they do, but records, they keep, and tracking the captured 'criminals' they always are. Our target, those records were. There described, the whereabouts or fates of many are."` + label who + ` He remains quiet for a while, focusing his eyes on the images, then on yours as he hands you one of the posters. "Called the Lunarium Redoubt, my group is. Nickname us rebels and outlaws, the Heliarchs kindly do in their broadcasts. Helped us you have, , and help us a lot more, in other ways you can." He pauses, still locking eyes with you. "Think not the Heliarchs as benefactors. Ruin us they will, if stop them we cannot."` + goto end + label lunarium + ` "Self explanatory, I imagine?" he says before he picks up the last few of them from the box. "Spread these around the planets, we of course will, but more valuable, the information in the unopened boxes and crates is."` + choice + ` "What information?"` + goto information + ` "Is that why you were in such a rush to leave before?"` + ` "Hoped we had, that suffice as a distraction the skywriting and rain of flyers would, so that safe for the others to break in and steal the data it was," he explains, sighing. "Mistaken, we were. Set their patrols off all around, our previous propaganda efforts apparently did. Go into hiding for a while, they'll need to."` + goto end + label information + ` "Documents, recorded data of the fates or whereabouts of many who 'disappeared,' we stole. A common thing it is, on Kimek factory worlds, for Heliarchs to write them off as work accidents. Investigate the data thoroughly we will, and maybe uncover the coordinates of their prison - or morgue - we finally can."` + label end + ` He thanks you for helping, and leaves your ship with the remaining posters. You go to check the spaceport and portions of the city later, but find neither Tummug, his colleagues, or any of the posters.` + on fail + "assisting lunarium" -- + + + +mission "Lunarium: Combat Training 1" + name "Bootcamp" + description "Bring Lunarium members, along with their to , where they will purchase some ships and use them to fight pirates to train their combat tactics." + minor + passengers 54 + cargo "supplies" 9 + source + attributes arach + destination "Zug" + to offer + random < 20 + or + has "Lunarium: Propaganda 4: done" + has "Lunarium: Evacuation 6: done" + has "Lunarium: Reactors: done" + and + or + not "event: fw suppressed Greenrock" + has "event: fw abandoned Greenrock" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + require "Jump Drive" + conversation + `After wandering the spaceport for a while, you notice a crowd of dozens of individuals heading to the hangars, specifically in what looks like the direction of your ship. A roughly equal number of Kimek and Arachi, with some Saryds as well, they stand in front of the , looking around as if searching for its captain. You approach them, and one of the Kimek, whose thorax and abdomen are slimmer than the usual for her species, meets you to speak for their group.` + branch lunarium + has "Lunarium: Questions: done" + ` "There you are, Captain ," she greets you. "Pyakri, my name is, and looking for your transport services, me and my friends are. Talk in your ship, could we? Wish to discuss the details there, I do."` + choice + ` "Sure, let me get the hatch."` + ` "You'll have to clear out, I'm not taking any passengers now."` + decline + ` You bring her aboard, and she continues when you close the hatch. "Thank you Captain. Now, assisted some of my colleagues, you already have, yes?" She waits for you to answer, but seeing your puzzled look, resumes her explanation. "The Lunarium Redoubt? Assisted us before, you have, even if aware of all the details beforehand you were not. Suppose I do that mostly hear of us as criminals or the like, you must. Petty in their propaganda, the Heliarchs are. Recommended you as trustworthy, some you've helped have, so that possible to get on with a special endeavor I've been planning, it is."` + choice + ` "What's this 'endeavor' you need help with?"` + goto help + ` "Your friends only told me what I was really doing after I was done. I don't want to help you any further."` + ` "Why, interested are you in helping the Heliarchs instead? Worked with them, some of our members had. An arbiter, Elirom, one of them, was. One of the highest ranks, that is, second only to the consuls themselves," she responds, getting closer to you. "Change, for the better, the Coalition soon will. Difficult it will be, to take down the Heliarchy. Very strong they are, so greatly appreciated any help would be, and appropriately reward those who helped us, we will, once free from them we are."` + choice + ` "And what would I have to do to help you?"` + goto help + ` "Why do you want to take down the Heliarchs? Seems to me the Coalition is doing very well under them."` + ` "Whether you and your friends win or lose, I want no part in it. I'm not helping you."` + decline + ` "Of course, only shown what they want to be shown, you are. An achievement of the current Heliarchs, what prosperity we have is not, and furthering that prosperity, they most certainly are not!" She quickly slows down her breathing after the exclamation, calming down. "Grown paranoid, they have. Seen a Quarg in millennia, nobody in the Coalition has, but think they do, that to fight the Quarg their purpose is. Making enemies, taking prisoners of their own people, they have been. Public arrests with no warning or cause, disappearances in the night..." She backs away slightly, her mandibles clicking in some low murmur. "Leave I will, if interested you are not, but in need of help we are, Captain."` + choice + ` "Help with what, exactly?"` + ` "I'm sorry, but helping your group any further sounds too risky to me."` + decline + label help + ` "Difficult it is, to fight Heliarch ships, but fight them all the same we eventually will need to," she explains. "Not very... experienced in warfare, most of our members are, as avoiding any ship battles we have been. Seeing as a jump drive you have, thought we did that bring some of our regional fleet leaders to human space, you could. Train there against human pirates, we can."` + choice + ` "Alright. I'll help you. How many people are you bringing along?"` + ` "I'm sorry, but helping your group any further sounds too risky to me."` + decline + ` She perks up with your answer. " in total, our group is. Wish to cause a commotion in human space, we do not, so bringing along to sustain ourselves for a while, we are. Avoid leaving the ships at all, we will."` + goto accept + label lunarium + ` You recognize her as Pyakri, a Lunarium military leader who you met on Remote Blue, and bring her aboard your ship to talk. "Looking for you I have been, Captain . Need your help I do, for a training endeavor of sorts."` + choice + ` "What do you need help with?"` + goto with + ` "I'm not very good at training others, are you sure you need my help?"` + ` Her mandibles click together rapidly, sounding almost like a chime in its rhythm. "Doing the training you will not be. For the most part, at least," she explains. "Waiting just outside, many of our regional fleet leaders are. Your jump drive, and some of your knowledge, what we need is." She chirps again.` + label with + ` "Very... lacking, most of our members are, in ship to ship combat expertise. Wish to test some tactics, the leaders do, so that better explain it to members under them they can. Of course, dangerous to challenge the Heliarchs for that, it is, so thought of training against human pirates, we did. Bring us to human space for that, you would. in total we are, and bring along to sustain ourselves without needing to leave the ships and cause a commotion, we will."` + label accept + ` She asks you to open the hatch, and she has a few more members from the crowd come in. They ask for your map, and then for the nearest hub of pirate activity. You point to Greenrock in Shaula, the biggest pirate world in southern human space, telling them it's one of the most dangerous ones. They then ask if there are any major shipyards in the South, and you point them to Southbound Shipyards, on , and the Tarazed Corporation, on Wayfarer. After some debate, they decide that 's proximity to the Coalition makes it a better pick in case they need to return quickly, and settle on that as the destination. "Bringing along enough credits to purchase a few warships, I hope we are," Pyakri comments. They have their brought to your ship, and you show them to their bunks.` + accept + on accept + "assisting lunarium" ++ + on visit + dialog `You've reached , but your escort bringing Pyakri and the other Lunarium members and their supplies hasn't entered the system yet. Better depart and wait for them.` + on complete + "assisting lunarium" -- + on fail + "assisting lunarium" -- + +mission "Lunarium: Combat Training 2" + name "Combat Test" + description "Escort Pyakri's fleet to , and help them fight a pirate fleet there to get started with their training. Make sure all of the Lunarium ships survive." + landing + source "Zug" + waypoint "Shaula" + to offer + has "Lunarium: Combat Training 1: done" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + `Once you've landed, Pyakri and some other Lunarium members come to your cockpit, where you show them a monitor with the list of ships for sale at the local shipyard. You answer their questions about the ships' abilities, strengths, and failings to the best of your knowledge. You also show them the outfits available on , in case they want to change any of the ship loadouts. After discussing with the others for a few minutes, and going back to check the pages of some ships, Pyakri asks you to help her purchase 1 Bastion, 3 Argosies and 4 Clippers.` + choice + ` "Are you sure you don't want more Bastions? They're pretty tough, you'd all be safer in them."` + ` "So how are you going to actually enter the ships? I thought you wanted to remain secret from humans."` + goto secret + ` "Much more durable than what we have available, Heliarch ships are. Aware of the danger, everyone is, and to better understand means to survive in more fragile ships, practice with them we must."` + goto help + label secret + ` "Be outside for long, we cannot, so have the ships brought closer to here, we will need. Wait for nightfall first, though, we should, as easier to sneak quickly into the purchased ships it would be."` + label help + ` You help her finish the transaction, giving the basic rundown of Southbound's shipyard interface, and ask for the ships to be brought to the hangars beside the . "A great help you were, Captain. Vital, this will be, if to pass as a human fleet, we are. Be careful in communicating with clients in the area, I must be." Your face showing some confusion, she explains her plans further. "After gotten the gist of fighting human pirates with you, we have, work as bounty hunters, we will. Make enough to pay you back for your services, I intend to. Even if similar to taking jobs in the Coalition, human bounties are, still to communicate minimally with the clients, we may need."` + choice + ` "Well, I'm sure you'll get the hang of it."` + goto accept + ` "Are you sure that's a good idea? Since you want to avoid humans noticing you."` + ` "What? Oh, worried about the translators, are you? Yes, sound robotic at times, they can, but impede us not, that will. Readied the translating software to work on text messages, we have. Neither seen nor heard, we will be," she touts.` + choice + ` "I'm more worried that the... speech pattern will give you away."` + ` "Well, if you think you'll be alright, sure."` + goto accept + ` "Pattern?" She looks at you, confused, and so you explain of the Coalition's translator boxes' quirk. You ask her to simply type something into your monitor, with the aid of the same translating software, and point to her the jumbled words when it translates to your language. "And always like this, our translators have been?" she asks in disbelief. You nod, and in either some act of shame, or anger, she cowers her legs closer to her body, while tapping the ground with them erratically. "Work perfectly for translating from the human language, they do, and problems between the Coalition languages, there are not... Reported before, this issue was not. Not to the Heliarchs, not to us! An embarrassment, that is..." She sighs, jumping her legs back to normal. "Once in power, we are, talk to Oobat about fixing them, I will. For now, hope I will that need to communicate with humans much, we will not."` + label accept + ` Once all the purchased ships are parked near your own, you give her another rundown, this time of the job board. You help her learn the layout of bounty hunting jobs, and give her some tips on locating ships with bounties on them. Hours after nightfall, you see the hangars become much less lively, with only the night shift workers moving about. You open the hatch and make sure the coast is clear before moving with the Lunarium members to the Bastion, parked closest to your own ship. The members assigned to that ship enter the hatch, Pyakri included, and you repeat the process with the others, heading to the Argosies in front of you. After the last of them, you move in quick trips to each of the Clippers, finally looping back to your ship once you're done. With everyone now in their own ship, you ask some workers to help move the supplies right by the hatches. Once the workers have moved away, the Lunarium crew open up to bring the cargo inside, and you head to the Bastion to meet with Pyakri.` + ` You find the ship's interior already undergoing modifications, with many of the Arachi using various legs to hold wires in place as they replace the human control pads and keys to versions they are more accustomed to. Pyakri is inside the cockpit, testing many of the controls as she looks at a manual on one screen, already translated to the Kimek language. "Ah, hello again Captain. Worked well, the plan has, and seen we were not. At least hope that, I do." She opens up a map, pointing to a star you recognize as . "Taken our first job, we have. Since far more experienced in fighting human pirates, you are, ask for your help in this first fight, I must. Informed me the job offer has, that in this system the bounties are. Head there quickly to face them, we should, before time to flee, they have. Follow your ship there, we will." You go ship by ship, reminding each of the captains to be careful in the coming fight, and then enter your own. With the purpose of this training being to grow the Lunarium's combat experience and tactics, things certainly wouldn't work well if some of them died right in their first fight, so you should try and keep them all alive.` + accept + on accept + "assisting lunarium" ++ + event "lunarium training: shaula empty" + on visit + dialog `You land on , but you're not done with the mission yet. Either some of the Lunarium's ships haven't entered the system yet, or some of the pirate ships in haven't been defeated. Return once everything is in order.` + npc accompany save + government "Lunarium" + personality escort + ship "Bastion" "Procellarum" + ship "Argosy" "Ingenii" + ship "Argosy" "Serenitatis" + ship "Argosy" "Undarum" + ship "Clipper" "Doloris" + ship "Clipper" "Oblivionis" + ship "Clipper" "Temporis" + ship "Clipper" "Veris" + npc kill + personality heroic staying + government "Pirate" + system "Shaula" + ship "Falcon" "Leuschner" + ship "Osprey" "Abulfeda" + ship "Modified Argosy" "Taruntius" + ship "Manta" "Necho" + on complete + event "lunarium training: shaula back to normal" + event "lunarium training done" 96 148 + conversation + `Pyakri contacts you right as you land, by a text message in your monitor. "A great help you were, Captain! More... veteran members, if you could call them that, the crew I brought are, so much trouble with their morale, I had not, but still worried, the pirates had me. Used to human ships, we are not, so fly them well enough to combat such fleets, we cannot. Not yet. Now that guided us through this first fight, you have, work on our own for a while - taking smaller, simpler bounties - we will. Contact you again, I shall, once done with our training, we are."` + on complete + "assisting lunarium" -- + on fail + "assisting lunarium" -- + +event "lunarium training: shaula empty" + system "Shaula" + remove fleet "Small Southern Pirates" + remove fleet "Large Southern Pirates" + remove fleet "Small Core Pirates" + remove fleet "Large Core Pirates" + remove fleet "Small Northern Pirates" + remove fleet "Large Northern Pirates" + remove fleet "Large Militia" + remove fleet "Large Free Worlds" + +event "lunarium training: shaula back to normal" + system "Shaula" + add fleet "Small Southern Pirates" 500 + add fleet "Large Southern Pirates" 800 + add fleet "Small Core Pirates" 4000 + add fleet "Large Core Pirates" 7000 + add fleet "Small Northern Pirates" 5000 + add fleet "Large Northern Pirates" 9000 + add fleet "Large Free Worlds" 9000 + +event "lunarium training done" + +mission "Lunarium: Combat Training 3" + name "Pick Up Pyakri" + description "Pyakri and the other 53 Lunarium members are done with their training in human space. Head to , where they are waiting to be picked up and brought back to the Coalition." + landing + source + near "Aldhibain" 1 100 + destination "Glaze" + to offer + has "event: lunarium training done" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + conversation + `Your monitor shifts into a messaging interface as you're landing, and some text quickly pours in. "Captain, hello. Pyakri, it is. In the last few months, fought many human pirates, and managed to practice and hone fleet movements, we have. Return to the others in the Coalition, we now must, so need your help again, we will. Waiting on , we will be." The message ends and your monitor returns to normal. You set a marker on to head there later and pick up the Lunarium members.` + accept + on accept + "assisting lunarium" ++ + on complete + "assisting lunarium" -- + on fail + "assisting lunarium" -- + +mission "Lunarium: Combat Training 4" + name "Homecoming" + description "Bring the Lunarium members back to the Coalition, to ." + passengers 54 + landing + blocked "You need in order to take on the next mission. Return here when you have the required space free." + source "Glaze" + destination "Factory of Eblumab" + to offer + has "Lunarium: Combat Training 3: done" + not "Heliarch License: done" + not "assisting heliarchy" + on offer + payment 3000000 + conversation + `Pyakri's fleet lands on the pads around the , and they message you saying they will wait for nightfall to board your ship. In the meantime, they focus on removing objects and tools and undoing adaptations to the ships that could give away their presence. Once the sun sets you notice them opening their hatches, so you open your own and help them quickly and quietly sneak into your ship. Perhaps because they'd grown used to human space, or maybe they simply did not care since they were going home for good, they proved a lot less cautious this time around, though you still don't imagine anyone saw them.` + ` Once everyone is in your ship, Pyakri approaches you and hands you some credit chips worth in total. "Tried splitting the fleet into smaller ones for a while, we did, so taken some simpler, less rewarding bounties, we also have," she explains. "But, hopefully made enough to pay you for your services, we have."` + choice + ` "Did you manage to fight the pirates well enough?"` + goto pirates + ` "Honestly I'm surprised you didn't lose anyone. Some of the ships you bought aren't exactly made for fighting."` + ` She clicks her mandibles quickly. "Neither are ours. Coalition ships, I mean. Of weaker materials, our civilian vessels are made, with less intricate shield matrixes, less space for weaponry. With that knowledge, intentionally choose ships on the more fragile side for this training, I did. Focused on fighting heavier human ships, we were, to simulate that difference in durability and firepower," she explains. "Of course, with Heliarch ships, much greater the gap is, but a useful experience it has been regardless."` + goto accept + label pirates + ` "Lie I will not, difficult the first few months were. Very used to the Coalition, to our equipment, we were, so forget that the ships had no hull repair capabilities of their own, we many times did," she passes her two front legs over her head a few times, as if brushing it in some shame. "Lucky we were, that no casualties we had. At least, a good way to improvise mid-battle rescues, it all was." she finishes, perking up her head.` + label accept + ` You once again help them contact the local shipyard and arrange for the selling of their fleet. After the process is done and the workers have finished taking away the ships, Pyakri tells you that they're ready to head back to the Coalition, to , from where they'll head back to their respective bases and share their newfound experience with Lunarium recruits. You help Pyakri and the rest to their bunks, and set a course for .` + accept + on accept + "assisting lunarium" ++ + on visit + dialog `You've reached , but your escort bringing Pyakri and the other Lunarium members hasn't entered the system yet. Better depart and wait for them.` + on complete + "assisting lunarium" -- + "assisted lunarium" ++ + conversation + `Shortly after you land, several groups come to meet some of the Lunarium members and escort them to their ships. They depart right away, while any remaining members leave straight for the city. "Gotten word of our return, the others have not yet, so wait here for more ships to bring them to the planet they normally operate from, they will," Pyakri explains.` + branch lunarium + has "Lunarium: Questions: done" + ` "A great help you were, Captain. Train normally, against each other as in drills, we cannot, as risk the Heliarchs finding us, it would. Not very useful either, since fighting ships weak like our own, we will not be." She looks out to the others, preparing to head into the city herself. "Aware I am that joined up with us, you have not, Captain. Your choice, it is, whether you do help us further, help the Heliarchs, or just leave and never return. Just, ask you I do, that think well about it before deciding, you must." With that, she says goodbye, and follows the others into the city.` + accept + label lunarium + ` "Lucky we are that joined us, you have, Captain . Wanted for years to try some tactics in real combat, I had, but of course, do it here without risking our whole operation, we could not. Hope I do that boost the confidence of our lower ranks, the recent experience we gained will." She asks you to be careful in your travels, and says goodbye, following the others into the city.` + on fail + "assisting lunarium" -- + + + +mission "Lunarium: Questions" + name "Lunarium Meeting" + description "Now that you've further helped the Lunarium, head to , where you were invited to meet with their leaders, who have a special task in mind for you." + minor + landing + source + government "Coalition" + not planet "Remote Blue" + destination "Remote Blue" + to offer + or + "assisted lunarium" == 5 + and + "coalition jobs" >= 80 + "assisted lunarium" == 4 + and + "coalition jobs" >= 110 + "assisted lunarium" == 3 + "reputation: Quarg" >= 0 + not "Heliarch License: done" + not "assisting heliarchy" + not "assisting lunarium" + to fail + or + has "Heliarch License 1: done" + "reputation: Quarg" < 0 + to complete + has "Lunarium: Quarg Interview: accepted" + on offer + require "Jump Drive" + conversation + `As you prepare to land on , your monitor starts producing a low hum, stops, then starts again. This keeps up for nearly a minute until a message pops up. "Captain , come to trust you our comrades have, thanks to your consistent help to our cause. Interested we are in your continuous support, so that free the Coalition, together we can. To you must come, meet with you, our leaders will, so that discuss an important task with them, you may. An available bunk in your ship, you should have."` + ` The message cuts off shortly after you finish reading it. Your monitor is back to normal, and no humming sound can be heard. You mark on your map.` + accept + +mission "Lunarium: Quarg Interview" + name "The Interview" + description "Travel to with Oobat, an Arach diplomat from the Lunarium, to try and speak with the Quarg about their thoughts on the current Coalition." + passengers 1 + landing + blocked "You need in order to take on the next mission. Return here when you have the required space free." + source "Remote Blue" + destination "Lagrange" + to offer + has "Lunarium: Questions: active" + not "Heliarch License 1: done" + not "assisting heliarchy" + on offer + conversation + `Here on , the Lunarium leaders are waiting for you. Would you like to meet with them and officially join the Lunarium? Given their cause against the Heliarchs, this would no doubt set you on path to conflict with the Heliarchy.` + choice + ` (Yes.)` + ` (Not yet.)` + defer + ` (No. I don't want to support the Lunarium at all.)` + decline + ` You leave your ship to find a pair of Kimek waiting for you. "Follow us to the meeting point, you will," one of them says, and you oblige, trying to keep a low profile as you go with them across the city. You reach a district near the center of town, with modest blocks and few skyscrapers, and head into what seems to be a Kimek restaurant. You continue following the two Kimek past busy tables and Kimek patrons who all have eyes on you as you head to the back.` + ` Taking an elevator, you move down a few levels. You arrive at some doors that open to an Arach delegation, with half a dozen bulky Arachi surrounding a young, fine-dressed lady in a blue "dress" with white lines wrapping around it. "Oh, finally arrived, have they?" she says as you step off the elevator, coming to meet you. " , is it? So intrigued by our most recent recruit, I was, that decided I did to come to this meeting for once. Lady Lobmab Bebliss, I am, head of our great house, and benefactor to the Lunarium." She steps one leg forward, to you, as if in some archaic Arach gesture. Unsure on how to respond, you do your best extravagant bow, which seems to satisfy her as she pulls her leg back closer to her body. "Confess I must, however, that most inconvenient it is, to come so far away while maintaining a low profile. Difficult to just disappear, it is, when the head of the greatest Arach House, you are. Hope I do that worth it, your contributions are."` + choice + ` "I'll do what I can to help."` + goto leaders + ` "It sounds like you've contributed much to the Lunarium cause. How have you helped the resistance?"` + ` "Yes, well observed. Kept the Lunarium Redoubt safe from prying Heliarch eyes and ears, my house has. Under me, assured that found by them, no dealings of ours - no dealings involving you - are," she says in a smug tone.` + label leaders + ` The Kimek who accompanied you here ask that you continue on. Lobmab and her bodyguards lead the way through busy cubicles and hallways, where dozens of Kimek work at computers and screens, as if monitoring the whole city. At the end of what seems to be the main passage of the complex, you pass through a doorway to find the Lunarium leaders seated around a table. You're shown to a seat, and as Lobmab comes in at the end, one of the bodyguards announces, "Lady Lobmab Bebliss, head of our great House."` + ` Some of the others at the table look to one another, and one of the Kimek who accompanied you all the way from your ship sighs quietly before coming to Lobmab. "Most welcome you are, Lady Lobmab," he says, as he begins pointing to the leaders one by one, starting from your left with a Kimek. "Your host, Chiree is, the head of our local forces and organizer of many of our operations. Fought the Heliarchs since a young age, she has." He continues pointing to them in a clockwise pattern, now to the left of Chiree. "Likewise, helping us for decades now, Tummug has, in spreading word of our group, and bringing to the people the truth about the Heliarchy. Another prominent Arach, and vital to the task soon to be discussed, Oobat is. A studious linguist, and aspiring diplomat, she is. Already worked together, I believe you and Pyakri have? One of our most senior militia officers, she is." He takes a pause, looking at Lobmab, almost as if waiting for some approval regarding his introductions of the others. She simply nods, and he moves on. "And... Elirom. A prominent Saryd Heliarch Arbiter who defected over a century ago. Advising us since, he has." He waits for her to say something, before looking back at the table again and pointing to you. "Oh, of course. , the human who's helped us greatly, and who joining us today, is."` + ` Satisfied with the introductions, Lobmab takes her seat, much to the Kimek's relief. "Very grateful we are, that made the time for this meeting you have, Lady Lobmab," Chiree says. "An special task for Captain , we have, and wished to have all leaders present to discuss it, we did. But, first, welcome our newest member, we must," she says, looking at you. "Any questions for us have you, Captain?"` + label questions + choice + ` "What are you all going to do if you do manage to take down the Heliarchs?"` + ` "You'll need to fight the Heliarchs at some point. Are you capable of doing that?"` + goto fight + ` "Am I the only outsider helping you?"` + goto outsiders + ` "How do you pay for all this?"` + goto pay + ` "I'm fine for now. What about this task you need me for?"` + goto task + ` "Rebuild, first we will need to," Chiree responds. "Fight tooth and nail to remain in power, they will, so expect a great deal of damage done to the Coalition, we do."` + ` "Once back in order, everything is, focus on reassuring the populace we should. A change for the better, it will be, and help in making sure everyone realizes that, House Bebliss will," Lobmab jumps in. "Earn back what they took from us, we will."` + ` Once the head of House Bebliss is done, Chiree continues. "Pointless, our fight will have been, if corrupted in those rings again, our successors thousands of years from now become. Set up transparency measures and means to ensure that absolute power, the consuls do not have, we will."` + goto questions + label fight + ` "Try and fool you, I will not. At a tremendous disadvantage, to say the least, we are," Pyakri answers. "Weaker, our ships are, and far less powerful weapons, we boast. Mostly human designs. Due to being simpler, easier to produce them in what factories we have, they are. Also lack experience, the troops do..."` + ` The mood around the table quickly dims as she goes on listing the ways the Lunarium is lacking in comparison to your opponents. Elirom stands up, putting both hands on the table to draw attention. "Smarter than us, they are not. Assure you of that, I can. Wanting in many areas we are, yes, but only because hoard our best materials, they do. Already preparing some deadlier weapons, we are. Finished, the blueprints have been. Only lacking the right materials, we are. When secured those, we have, move on to reforming our arsenal we can, and maybe get some better ships produced, too."` + ` "And suppose I do that, intend to tell me where to attack for such materials, you do?" Pyakri asks as she stands up herself. "Caught by 'the unforeseen' will my men again be? By an Arach batallion you forgot to mention, again?"` + ` Caught apparently off-guard by the question, Elirom looks at her for a few seconds, then resigns himself to sit back down.` + goto questions + label outsiders + ` For a few seconds, they simply exchange looks at your question, until Lobmab speaks up. "Transmissions and messages from some source, Bebliss has received for centuries now. Told us they have of Heliarch activity, fleet movements, training drills, propaganda plans. Always exactly right on their predictions, the messages were. Also pointed us to equipment caches - caches with outfits previously found nowhere in the Coalition - they have. Human weaponry, blueprints, factory parts..."` + ` "Aware of the identity of whoever does it, we are not," Elirom says. "An arbiter I was, and though a great deal I knew, still kept from me, some critical information was. Possible, it is, that from one of the consuls, the information comes. Though, difficult to steal a jump drive to bring in the weapons, it would be, even for a consul." He pauses, a dead stare in his eyes as he bites lightly on a finger. "Word of... experiments, we have also received from the messages. Some manner of procedure to take over bodies... stop whatever it is they're doing in the rings, we must."` + goto questions + label pay + ` The rest of the table look to Lobmab at the same time, prompting her explanation. "Amassed great fortune over our history, House Bebliss has. As part of our gracious help to the Lunarium, providing nearly everything in financial terms we have been."` + ` She stops, with the others still looking at her, as if expecting something more. She remains silent, so Chiree looks back at you, continuing, "Also taken some loans from House Plumtab in our stead, Houses Bebliss and Idriss have. Not terribly passionate for our cause, Plumtab's bankers are, but share our interest in booting the Heliarchs, they do, even if meet or talk with us, they never do."` + goto questions + label task + ` Tummug goes around the table, handing copies of some document of sorts to the other leaders before answering. "One of the center points of Heliarch propaganda, the fear of the Quarg is. Served to justify their budget, and their obsession with hoarding the military, for millennia it has. Thought up a way to mitigate the effect that has on the populace, Oobat has."` + ` As if given her cue, Oobat goes further into the plan. "Seen in the Coalition in over six thousand years, no Quarg ship has been. Most likely moved on from our war, they have, unlike the Heliarchs. If proof of the Quarg's lack of interest in waging war against us, we had, spread it to the people, we could. Given the Captain's resourcefulness, and jump drive, thought we did that the best way to acquire that proof, meeting up with the Quarg is." She grabs one of the documents, pointing to it. "For you all to review these questions, I would like. Careful we should be, about how worded they are. Once done, we are, board Captain 's ship, I will. Meet with the Quarg in human space, we must," she says the last part looking at you. "Met with the Quarg before, have you, Captain?"` + branch metquarg + has "First Contact: Quarg: offered" + choice + ` "No, sorry. I never had the time to visit one of their worlds or rings."` + ` "I've only seen them in pictures and videos."` + ` "Ah, a shame that is. Well, I suppose a first time for the both of us, this trip will be."` + goto accept + label metquarg + choice + ` "Yes. They can be a bit odd, but they've always treated me well."` + ` "Yes, sadly. They're obnoxious and condescending."` + goto quargbad + ` "Good to hear, that is. Hope I do that willing to extend that treatment to me, they are."` + goto accept + label quargbad + ` The table puts the documents away in unison, looking at you after your answer. "I see... well, at least cooperate for the interview, we can hope they will."` + label accept + ` The Lunarium leaders spend an hour or so going over the questions proposed for the interview, deciding to ditch some, and add a few new ones. All the while, Elirom asks in a worried manner if Oobat is sure of this idea. "Forgive me if sounding like a Heliarch, I am, but dangerous to leave, it is. How the Quarg would react to seeing someone from the Coalition in their territory, we do not know."` + ` "Understand that, I do, but fine I will be. Unlike the Quarg it is, to attack unprovoked," she answers. "And, if worse comes to worse, trust I do in Captain 's abilities to ensure we escape." The leaders go over the interview questions a while longer, until they've reached a consensus as to its completeness. They wish you and Oobat good luck, and you two are escorted back out of the complex to your ship. There, Oobat asks you for the best place for such an interview in human space, and you point to , where the Quarg are constructing their ringworld. "Then head there, we must. In your care I will be, Captain." You show her to her bunk, and plot a course to .` + accept + to fail + "reputation: Quarg" < 0 + on visit + dialog `You've reached , but your escort bringing Oobat hasn't entered the system yet. Better depart and wait for it.` + +mission "Lunarium: Join" + name "Report Back" + description "Now that you and Oobat have interviewed the Quarg, head back to to inform the Lunarium leaders of how it went." + landing + source "Lagrange" + destination "Remote Blue" + to offer + has "Lunarium: Quarg Interview: done" + on offer + conversation + `Once you've docked in , you go check on Oobat, who's readying some form of camera while rehearsing the questions for the interview. "Just a moment Captain, ready in a minute I will be," she says. You head out of your ship and flag down the first Quarg you see.` + ` "How may I assist you, human?" it says.` + choice + ` "I've brought an Arach from the Coalition. She wants to interview the Quarg."` + ` "I'm with a group from the Coalition, the Lunarium, who are fighting the Heliarchs. They want to talk to you, and have sent a diplomat with me."` + ` It stays silent, glancing over at your ship. "I see," it says. "Wait here. I will bring one who can speak on the matter." It moves away in a quick step, briefly talking to some other Quarg along the way, who come to your ship and wait. Oobat comes out of your ship as you wait, leading to something of a scene as some the humans visiting the station panic at the sight of a giant spider. Others come closer, intrigued by the unknown alien, or perhaps thinking her to be some form of prop. Oobat doesn't pay them much mind though, instead focusing on the Quarg near the two of you, and watching the others in the distance.` + ` The Quarg around you dissuade the gawking humans from getting closer, and after a few more minutes a Quarg in faded, light gray robes comes to meet you. "Hello, human. And..."` + ` "Oobat, my name is," she says. "A member of the Lunarium Redoubt, a group in the Coalition that fights the Heliarchs, I am. Assisted us much, Captain has, and brought me here now they did, for wish to ask you some questions about your views on the Coalition, my group does."` + ` The Quarg gazes at you two for a few seconds, before squatting down to your level. "Very well. What questions do you have?"` + ` She hands you the camera, turning it on and asking that you keep it as still as you can once you're positioned to get a good angle. She then connects her translator to it remotely, so that the audio picks up the Quarg's translated responses. "Well, begin then we shall. On the Coalition, intending to fight us again, are you?"` + ` It thinks for a moment, then answers, "No. We never intended to fight. It was the Saryds, Kimek and Arachi of old who fought us. We are not a warring people."` + ` Seemingly satisfied with the answer, Oobat moves on to the next. She questions the Quarg for about ten minutes on their activities outside the Coalition and their relation with the humans and other species. She even has you move the camera around for a bit to show the local human-Quarg interactions, as the Quarg compares dealing with humanity to dealing with the Coalition species. Oobat moves from question from question as if in a checklist, until she arrives at the last one. "About finished, we are. Thankful for your answers I am. Just one last thing, to appease the people back home. Interested in returning to take back the rings, are you?"` + ` "Of course," it says without hesitation. "The rings are our homes. My home." Clearly not expecting that answer, Oobat looks at you in confusion.` + choice + ` "It's been thousands of years. You're still lingering on those rings?"` + ` "If you want them back, why haven't you returned by now?"` + goto why + ` "Lingering on... 'those' rings? Our rings. Our homes," it replies. "Do you so easily forget yours?" The Quarg crosses one arm, grabbing its shoulder, lowering its head as its back curves. Patches of skin start turning pitch black, and it brings its other arm to its head as if in pain.` + goto accept + label why + ` "Because that would have forced a fight. The three... these Heliarchs, would not listen. They never listened," it answers, crossing one arm and grabbing its shoulder, lowering its head as its back curves. Patches of skin start turning pitch black, and it brings its other arm to its head as if in pain.` + label accept + ` By now the atmosphere's changed, with no humans in sight around you. Dozens more Quarg begin to form circles around your ship, eyes fixated on Oobat. The ones closest to you watch the one who was being interviewed carefully, like waiting for some sign, as its whole body shifts color. Oobat is still looking at you, confusion and worry written on her face.` + choice + ` "I think that does it for the interview."` + ` "We should leave. Now."` + ` She nods, and gives a quick "thank you" to the Quarg again, turning to go back inside your ship. The Quarg stops her though, reaching out one arm quickly to grab one of her legs. Slowly, its skin turns back to the grayish blue from before, as it calms down. "Should you succeed, please, permit my return home." The Quarg around you disperse, and the one who was interviewed stands up again and moves back to other sections of the station.` + ` You board your ship with Oobat, and hand her back the camera. "Mostly well, it went," she says, looking through the sped up footage and pausing at certain moments where the Quarg is responding. "Not what we expected from that last question, it was, however. Disappointed, I imagine Elirom will be." She tells you she'll be working on some basic edits to the footage, and says you may return to .` + accept + on visit + dialog `You've reached , but your escort bringing Oobat hasn't entered the system yet. Better depart and wait for it.` + on complete + set "language: Coalition" + event "first lunarium unlock" + conversation + `When you and Oobat reach the Lunarium's complex, you're welcomed back by Chiree, Elirom and Tummug. "Told you I did that come back safely, they would," Tummug says to Elirom. "So, well enough to use in our efforts, was it?"` + ` Oobat shows them the recording, satisfaction clear on their faces as they listen to the Quarg. The mood darkens when the last question appears, however. Once it ends, Elirom stands up and heads to the nearest wall, slamming an arm onto it. Chiree sighs, and turns to Tummug, "Worth using the footage still, is it?"` + ` "Up until that one? Yes, of course. Need to edit it for a cleaner, quicker video, we do, but a great piece it will be," he says. "That last part though, not as we expected, it went."` + ` "Only prove the Heliarchs right, that last question would," Elirom chimes in. "It matters not, if a thousand times the footage disproves their narrative. If but one thing they can pick and spin as proof of their side, fruitless, the effort will be." He pauses, then hits the wall again, with less force. "Play it again, could you?" Oobat obliges, and plays the recording once again. Elirom has it paused a few times over the course of the video, breaking out a device to write down some notes. Once he's finished, he has the last portion repeat a few times still, seeming particularly interested in the Quarg's changing pigment. "Onyx black..." he ponders out loud, "the emotion of that color, what was it again?" Snapping out of the trance only after a few more repetitions, he hands Oobat the notes. "Right they were about the Quarg wanting to take the rings back... A shame it is, that use that point against them we cannot. Though, maybe, if interested in the rings they still are after so long..."` + ` He leaves without saying anything else, leaving everyone else confused with his abrupt departure. "Much to take in at once, it must be for him, in particular. A Heliarch he once was, after all," Tummug says. "Get to work on perfecting the footage, and readying it for release to the public, we should."` + ` Oobat agrees, and the two prepare to leave with the footage. "A unique experience the trip was, Captain. Hope I do that work together again, we soon will."` + choice + ` "Same here. It was different from my usual jobs, working a camera and all."` + ` "Anytime. Just, let's find some more normal people to interview, next time."` + ` She chuckles, and nods before leaving the room, following Tummug out of the Lunarium complex.` + branch heliarch + has "assisted heliarch" + ` Chiree approaches you and hands you a small box. You pick it up, and upon cursory examination, notice it's one of the Coalition's translation devices. "One of us you now are, so capable of understanding what we say without others aiding you, you should be," she says. "Still readying ourselves for major assaults on the Heliarchs, we are. A difficult fight against them, we will have, all the way. Hoping, I am, that with your help we can count, when the time comes."` + goto end + label heliarch + ` You look to Chiree, and see her brushing her frontmost left leg with the tip of her right one, as if cleaning away something. Once she's done, you see various bolts and a metal texture revealed. "Lost two of my legs to a Heliarch attack, I did. Used to the prosthetics, I've grown, but faded away from my memory, that day has not." She stares at you. "Aware, we are, that helped the Heliarchs before, you have. Ask about specifics, I did not, for wish to know, I do not. Harmless work, it may have been. Or, helped them mutilate others like they did with me, you may have." She approaches you, handing you a small box: one of the Coalition's translation devices. "One of us, you now are. Hear of any more aid to the Heliarchs from your part, I will not."` + label end + ` You say your goodbyes, and you're escorted out of the complex and back to your ship. The Kimek who brought you there enter the ship with you briefly, and inform you that they've sent word across their major bases in the Coalition about your joining up. You're told that you'll find some new outfits available in their secretive outfitters. "In separate portions of the cities, sometimes in other cities entirely, our shops are, but safe from Heliarch patrols, they so far have proven." They give you a short list with the planets where you'll find their outfitters, and coordinates and instructions as to how to get to and access each of them.` + ` When they leave, you start tinkering with the translation device, figuring out how to configure it to translate from each of the languages. After testing it with local transmissions and broadcasts for half an hour or so, you're decently fast with it, to the point where you can change what language it translates to or from a few times in a second.` + ` It may be a long time still before the Lunarium is ready to take up arms against the Heliarchs, so for now you figure you could help by looking into what minor jobs they may have for you.` + +event "first lunarium unlock" + planet "Remote Blue" + outfitter "Lunarium Basics" + planet "Fourth Shadow" + outfitter "Lunarium Basics" + planet "Into White" + outfitter "Lunarium Basics" + planet "Secret Sky" + outfitter "Lunarium Basics" + planet "Shifting Sand" + outfitter "Lunarium Basics" + planet "Mebla's Portion" + outfitter "Lunarium Basics" + planet "Refuge of Belugt" + outfitter "Lunarium Basics" diff --git a/data/governments.txt b/data/governments.txt index 14f4bdf15a03..95739bec4e3e 100644 --- a/data/governments.txt +++ b/data/governments.txt @@ -168,6 +168,10 @@ government "Coalition" "player reputation" 1 "attitude toward" "Heliarch" 1 + "friendly hail" "friendly coalition" + "friendly disabled hail" "friendly disabled heliarch" + "hostile hail" "hostile coalition" + "hostile disabled hail" "hostile disabled coalition" government "Deep" swizzle 0 @@ -728,6 +732,8 @@ government "Ka'het" "Free Worlds" -.01 "Hai (Unfettered)" -.01 "Wanderer" -.01 + "Coalition" -.01 + "Heliarch" -.01 "player reputation" -1 @@ -750,6 +756,8 @@ government "Ka'het (Infighting)" "Free Worlds" -.01 "Hai (Unfettered)" -.01 "Wanderer" -.01 + "Coalition" -.01 + "Heliarch" -.01 "player reputation" -1 @@ -863,6 +871,21 @@ government "Kor Sestor" "player reputation" -1000 +government "Lunarium" + swizzle 2 + "crew attack" 1.2 + "crew defense" 2.7 + language "Coalition" + "player reputation" 1 + "friendly hail" "friendly lunarium" + "friendly disabled hail" "friendly disabled lunarium" + "hostile hail" "hostile lunarium" + "hostile disabled hail" "hostile disabled lunarium" + "attitude toward" + "Quarg" .01 + "Heliarch" -.01 + "Pirate" -.01 + government "Marauder" swizzle 6 "player reputation" 1 diff --git a/data/map planets.txt b/data/map planets.txt index 750402676b1e..4abd23cc5685 100644 --- a/data/map planets.txt +++ b/data/map planets.txt @@ -924,7 +924,7 @@ planet "Delve of Bloptab" attributes arach mining landscape land/hills0 description `This is a mining world, hotter than even the Arachi would prefer but still much more habitable than its sister world of Blobtab's Furnace. It is home to House Ablomab, the guild of mining and metalworking, and the dry climate makes it possible to store stockpiles of iron, steel, and other metals here without worrying about rust. Supposedly the warehouses here contain enough raw materials to double the size of the Heliarch war fleet if needed; the Arachi like to be able to trust that they are prepared for any eventuality.` - spaceport `This is one of the few Coalition worlds where the Heliarch agents openly carry weapons, due to the fear that the Resistance might see the storehouses here of base and precious metals as a tempting target. Although there are plenty of civilians of all three species milling about, the spaceport has something of the atmosphere of a military base.` + spaceport `This is one of the few Coalition worlds where the Heliarch agents openly carry weapons, due to the fear that the Lunarium might see the storehouses here of base and precious metals as a tempting target. Although there are plenty of civilians of all three species milling about, the spaceport has something of the atmosphere of a military base.` "required reputation" 25 security 0.6 @@ -4145,7 +4145,7 @@ planet Stormhold planet "Stronghold of Flugbu" attributes arach factory landscape land/mountain11-sfiera - description `The Stronghold of Flugbu was used as a military base during the War of Independence. Now it is a manufacturing world, specializing not in large machines but small, intricate components. It is also home to House Bebliss, the secretive guild that specializes in communication, translation, and encryption. House Bebliss is essential to the Coalition economy because they maintain the hyperspace communication network, but there are also rumors that they may have ties to the Resistance.` + description `The Stronghold of Flugbu was used as a military base during the War of Independence. Now it is a manufacturing world, specializing not in large machines but small, intricate components. It is also home to House Bebliss, the secretive guild that specializes in communication, translation, and encryption. House Bebliss is essential to the Coalition economy because they maintain the hyperspace communication network, but there are also rumors that they may have ties to the Lunarium.` spaceport `The spaceport here is a single massive compound, a relic of its military past, with hangars of all different sizes along its periphery and gun emplacements that may still be operational even though there has been little need for them in thousands of years. A fleet of Heliarch military ships is stationed here, as well, but their role is mostly ceremonial.` spaceport ` The hallways of the compound are packed with members of all three Coalition species, most of whom walk quietly and purposefully without stopping to speak with each other.` outfitter "Coalition Advanced" diff --git a/data/quarg/quarg missions.txt b/data/quarg/quarg missions.txt index 1a83ae6607f0..b7346356a119 100644 --- a/data/quarg/quarg missions.txt +++ b/data/quarg/quarg missions.txt @@ -233,7 +233,7 @@ mission "Ask Quarg About Coalition Early" has "Coalition: First Contact: done" not "assisted heliarch" not "Heliarch Recon 1: offered" - not "Resistance: Introductions: offered" + not "Lunarium: Introductions: offered" source attributes "quarg" attributes "station" diff --git a/images/outfit/anti-materiel gun.png b/images/outfit/anti-materiel gun.png new file mode 100644 index 0000000000000000000000000000000000000000..85e3e4516618c6c65691ab54e9ce20ed564c64b1 GIT binary patch literal 24150 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 ACIA2c literal 0 HcmV?d00001 diff --git a/images/outfit/decoy plating.png b/images/outfit/decoy plating.png new file mode 100644 index 0000000000000000000000000000000000000000..bab304e2ee70a688465282b6e941ecd5b5f55ca2 GIT binary patch literal 21176 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 Z{|h2+XsL;>k#Yb4002ovPDHLkV1k7Wz*YbN literal 0 HcmV?d00001 diff --git a/images/outfit/refuelling module.png b/images/outfit/refuelling module.png new file mode 100644 index 0000000000000000000000000000000000000000..fb70e1ad2a1ccdd1ca0b4a1432db87f65c50415e GIT binary patch literal 18118 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 literal 0 HcmV?d00001 diff --git a/images/outfit/shield refactor module.png b/images/outfit/shield refactor module.png new file mode 100644 index 0000000000000000000000000000000000000000..c6bc858d0675c78b02ef8cb0387f9016aca9d203 GIT binary patch literal 37443 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 X*3bw46$3Ui00000NkvXXu0mjf9Ah7M literal 0 HcmV?d00001 diff --git a/images/outfit/small recovery module.png b/images/outfit/small recovery module.png new file mode 100644 index 0000000000000000000000000000000000000000..0e4f0e13a7416d7a2f1ae80854f9d6d93c46e652 GIT binary patch literal 31800 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 z Date: Sat, 23 Sep 2023 23:42:27 -0300 Subject: [PATCH 24/79] feat(content): Coalition: Heliarch Intro (#6647) --- copyright | 5 + data/coalition/coalition jobs.txt | 120 ++ data/coalition/coalition missions.txt | 2 +- data/coalition/coalition news.txt | 2 +- data/coalition/coalition outfits.txt | 5 + data/coalition/coalition ships.txt | 72 +- data/coalition/coalition.txt | 34 + data/coalition/heliarch intro.txt | 2149 +++++++++++++++++++++++++ data/governments.txt | 10 + images/outfit/heliarch license.png | Bin 0 -> 13659 bytes 10 files changed, 2396 insertions(+), 3 deletions(-) create mode 100644 data/coalition/heliarch intro.txt create mode 100644 images/outfit/heliarch license.png diff --git a/copyright b/copyright index c28a01297ea9..ad3954174113 100644 --- a/copyright +++ b/copyright @@ -1461,6 +1461,11 @@ Copyright: Ejo Thims License: CC-BY-SA-4.0 Comment: Derived from works by Michael Zahniser (under the same license). +Files: + images/outfit/heliarch?license* +Copyright: Becca Tommaso +License: CC-BY-SA-4.0 + Files: images/star/a-dwarf* images/star/a-giant* diff --git a/data/coalition/coalition jobs.txt b/data/coalition/coalition jobs.txt index e861579515f7..c527fe417150 100644 --- a/data/coalition/coalition jobs.txt +++ b/data/coalition/coalition jobs.txt @@ -1395,6 +1395,126 @@ mission "Heliarchs Buy Jump Drive Job 2" fail +mission "Heliarch Contain True" + job + repeat + name `Contain Criminals` + description `Fly to by so that you and other Heliarch agents can combat criminals on site. Payment is .` + deadline + passengers 16 58 + to offer + random < 3 + has "license: Heliarch" + source + government "Heliarch" + destination + distance 2 10 + not attributes "coalition station" + on offer + require "Enforcer Confrontation Gear" + on visit + dialog phrase "generic passenger on visit" + on complete + payment + payment 70000 + dialog `You and the other agents converge on the marked area and quickly move to cut off any exits. After a brief firefight, the criminals surrender and a Heliarch ship swoops in to pick them up. You bid your Heliarch colleagues farewell and return to your ship, where you are happy to see that has already been transferred to your account.` + +mission "Heliarch Contain Fail" + job + repeat + name `Contain Criminals` + description `Fly to by so that you and other Heliarch agents can combat criminals on site. Payment is .` + deadline + passengers 16 58 + "apparent payment" 70000 + to offer + random < 15 + has "license: Heliarch" + source + government "Heliarch" + destination + distance 2 10 + not attributes "coalition station" + on offer + require "Enforcer Confrontation Gear" + on visit + dialog phrase "generic passenger on visit" + on complete + dialog `You and the other agents head to the marked area, but when you arrive it becomes evident that whoever occupied the place has managed to escape. You bring the other agents to the spaceport as they lament the failed job.` + +mission "Heliarch Contain Fake" + job + repeat + name `Contain Criminals` + description `Fly to by so that you and other Heliarch agents can combat criminals on the site. Payment is .` + deadline + passengers 16 58 + to offer + random < 45 + has "license: Heliarch" + source + government "Heliarch" + destination + distance 2 10 + not attributes "coalition station" + on offer + require "Enforcer Confrontation Gear" + on visit + dialog phrase "generic passenger on visit" + on complete + payment + payment 55000 + dialog `Your team pounces and catches the targets entirely by surprise. They offer no resistance, relinquishing their weapons immediately. You call for a Heliarch ship to pick them up and then bid the other agents farewell as you leave. An extra is already waiting in your account when you return to your ship.` + + +mission "Heliarch Prisoner Transport" + job + repeat + name `Transport Prisoners` + description `Bring criminals, who were arrested on , to . Payment is .` + passengers 3 11 + to offer + random < 15 + has "license: Heliarch" + source + government "Coalition" + destination + government "Heliarch" + on offer + require "Enforcer Riot Staff" + require "Brig" + on visit + dialog phrase "generic passenger on visit" + on complete + payment + payment 45000 + dialog `When you land on , Heliarch agents help you move the prisoners out of your ship. Once the last prisoner leaves you're handed .` + + +mission "Heliarch Investigate" + job + repeat + name `Investigate signs of criminal activity` + description `Land on , where you and other Heliarch agents will investigate an area where suspicious activity was reported. Payment is .` + passengers 6 11 + to offer + random < 60 + has "license: Heliarch" + source + government "Heliarch" + stopover + distance 5 10 + not attributes "coalition station" + on visit + dialog phrase "generic passenger on visit" + on stopover + dialog `You and the other agents head to the reported area looking for anything out of place. You don't find anything prominent, but there are clear signs that the place was recently used. You spend a few hours collecting evidence before heading back to your ship.` + on complete + payment + payment 40000 + dialog `The agents thank you for transporting them in your ship, wish you safe travels, and head off to deliver the findings to their superiors. You're transferred a few moments later.` + + mission "Evacuate Lunarium True" job repeat diff --git a/data/coalition/coalition missions.txt b/data/coalition/coalition missions.txt index d45db26c48cb..ede75dc44941 100644 --- a/data/coalition/coalition missions.txt +++ b/data/coalition/coalition missions.txt @@ -25,7 +25,7 @@ mission "Coalition: First Contact" conversation `This planet seems to be inhabited by at least three different sentient species. First are giant beetles, about a meter tall, who scurry quickly toward your ship and swarm around it, gawking at you, as soon as you land. The second species, even more disturbing than the beetles, are giant spiders. And the third species are centaurs. Not just something vaguely resembling centaurs; they look like they could have stepped right off the page of a story book from ancient Earth.` ` One of the spiders walks up to you, stretching its legs to raise its face and many eyes to the level of your own face, and says something to you in a gloopy sort of burbling language that you don't understand. The beetles, meanwhile, are talking to each other in a different language, all clicks and chittering. And the centaur stands quietly at a distance and keeps glancing back toward the spaceport as if waiting for someone.` - ` And eventually, someone does arrive: a beetle, a spider, and a centaur all wearing yellow armbands and some sort of electric box hanging on a chain around each of their necks. They walk up to you, and the centaur speaks. After a brief delay, the box around its neck says, "In the name of the Heliarchs, who drove out the oppressors, who maintain peace, we the human visitor greet."` + ` And eventually, someone does arrive: a beetle, a spider, and a centaur all wearing yellow armbands, small, triangle-shaped metal headpieces, and some sort of electric box hanging on a chain around each of their necks. They walk up to you, and the centaur speaks. After a brief delay, the box around its neck says, "In the name of the Heliarchs, who drove out the oppressors, who maintain peace, we the human visitor greet."` choice ` "Thank you."` goto next diff --git a/data/coalition/coalition news.txt b/data/coalition/coalition news.txt index 1997192efbdf..b5553e886287 100644 --- a/data/coalition/coalition news.txt +++ b/data/coalition/coalition news.txt @@ -103,7 +103,7 @@ news "heliarch candidate" message word `"Laws, history, theory, too much of it I have read, and still behind I am..."` - `"As part of my trials, read the works of consul Elirom, I had to. Exceeded my expectations, his books have."` + `"As part of my trials, read the works of consul Aulori, I had to. Exceeded my expectations, his books have."` `"Meant to prove our dedication and show our potential, the trials we candidates go through are. Though difficult, we're sure to be apt to serve once passed, we have."` news "coalition ad" diff --git a/data/coalition/coalition outfits.txt b/data/coalition/coalition outfits.txt index a82625b7e19f..0e17737c98e9 100644 --- a/data/coalition/coalition outfits.txt +++ b/data/coalition/coalition outfits.txt @@ -430,3 +430,8 @@ outfit "Coalition License" category "Licenses" thumbnail "outfit/coalition license" description "Completed a lot of Coalition jobs and received permission to purchase civilian technology and ships." + +outfit "Heliarch License" + category "Special" + thumbnail "outfit/heliarch license" + description "An ornate circlet of gold and platinum, it serves as both a symbol of rank and as a license to access exclusive Heliarch facilities. Custom-made to fit a human's head, it's surprisingly light and comfortable." diff --git a/data/coalition/coalition ships.txt b/data/coalition/coalition ships.txt index a2b883c6e481..1b88d2bcaaf8 100644 --- a/data/coalition/coalition ships.txt +++ b/data/coalition/coalition ships.txt @@ -270,7 +270,6 @@ ship "Arach Spindle" "final explode" "final explosion large" description `The Arach Hulk is an ungainly, lumbering behemoth of a ship, but with its side pods removed it becomes the much more maneuverable Spindle. Because of its much lower cargo space, usually the only reason a fleet would include a Spindle is if they are planning on picking up new cargo pods at their destination.` - ship "Arach Spindle" "Arach Spindle (Miner)" outfits "MCS Extractor" 2 @@ -292,6 +291,23 @@ ship "Arach Spindle" "Arach Spindle (Miner)" "Small Steering Module" "Hyperdrive" +ship "Arach Spindle" "Arach Spindle (Plasma)" + outfits + "Hyperdrive" + "Outfits Expansion" 3 + "Small Shield Module" + "Small Repair Module" 2 + "Large Repair Module" + "Cooling Module" 5 + "Small Thrust Module" 3 + "Large Thrust Module" 2 + "Small Steering Module" + "Small Battery Module" + "Large Battery Module" + "Large Steering Module" 2 + "Fusion Reactor" + "Plasma Turret" 2 + ship "Arach Spindle" "Arach Spindle (Jump Drive)" outfits "Large Collector Module" 3 @@ -1258,6 +1274,28 @@ ship "Heliarch Punisher" "Heliarch Punisher (Burst Fire)" gun "Finisher Maegrolain" gun "Finisher Maegrolain" +ship "Heliarch Punisher" "Heliarch Punisher (Fuel)" + outfits + "Finisher Pod" 2 + "Finisher Torpedo" 80 + "Bombardment Turret" 4 + + "Large Reactor Module" 2 + "Large Battery Module" + "Overcharged Shield Module" 2 + "Overclocked Repair Module" 2 + "Cooling Module" 4 + "Scanning Module" 4 + "Fuel Module" 4 + "Enforcer Riot Staff" 160 + "Enforcer Confrontation Gear" 150 + + "Large Thrust Module" 2 + "Small Thrust Module" 2 + "Large Steering Module" 2 + "Small Steering Module" 2 + "Jump Drive" + ship "Heliarch Punisher" "Heliarch Punisher (Interdicting)" outfits "Bombardment Cannon" 4 @@ -1758,6 +1796,22 @@ ship "Kimek Thistle" "Kimek Thistle (Miner)" "Small Steering Module" "Hyperdrive" +ship "Kimek Thistle" "Kimek Thistle (Torpedoes)" + outfits + "Hyperdrive" + "Small Shield Module" 2 + "Small Repair Module" 2 + "Cooling Module" 2 + "Small Thrust Module" 2 + "Small Steering Module" + "Large Thrust Module" + "Small Battery Module" + "Large Steering Module" + "Heavy Anti-Missile Turret" + "Torpedo Launcher" 2 + Torpedo 60 + "Breeder Reactor" + ship "Kimek Thorn" sprite "ship/kimek thorn" thumbnail "thumbnail/kimek thorn" @@ -1952,6 +2006,22 @@ ship "Saryd Sojourner" "Saryd Sojourner (Miner)" "Small Steering Module" "Hyperdrive" +ship "Saryd Sojourner" "Saryd Sojourner (Bombardments)" + outfits + "Hyperdrive" + "Bombardment Turret" 3 + "Ion Rain Gun" 2 + "Large Reactor Module" + "Small Battery Module" + "Large Battery Module" 2 + "Cooling Module" 3 + "Small Thrust Module" 3 + "Large Thrust Module" 2 + "Small Steering Module" 2 + "Large Steering Module" 2 + "Overclocked Repair Module" + "Overcharged Shield Module" + ship "Saryd Traveler" sprite "ship/saryd traveler" thumbnail "thumbnail/saryd traveler" diff --git a/data/coalition/coalition.txt b/data/coalition/coalition.txt index 369154189bc9..4f5603d29298 100644 --- a/data/coalition/coalition.txt +++ b/data/coalition/coalition.txt @@ -395,6 +395,15 @@ outfitter "Heliarch" "Ion Rain Gun" "Local Map" +outfitter "Heliarch Basics" + "Ion Rain Gun" + "Ion Hail Turret" + "Brig" + "Scanning Module" + "Enforcer Confrontation Gear" + "Enforcer Riot Staff" + "Local Map" + outfitter "Lunarium Basics" "Refuelling Module" "Decoy Plating" @@ -1208,6 +1217,30 @@ phrase "hostile disabled heliarch" word ".)" +phrase "heliarch test dummy" + word + "Best of luck, I wish you for this battle." + "Focus on the battle you must, Captain." + "Distract me from the fight, you must not." + "Helping me learn, your unique fighting style is." + "New to your alien weaponry, I am." + "Useful for future combat, this experience is." + +phrase "disabled heliarch test dummy" + word + "Bested us, you have." + "Defeated me, you have." + "A good fight, it was." + "A tough opponent, you were." + word + " " + word + "Impressive, your combat skills are." + "Work on my tactics, I must." + "Congratulations, captain!" + "Attack me further, you should not. Make you an enemy of the Heliarchs, destroying me would." + "Put to good use as a Heliarch, your combat skills would be." + phrase "friendly coalition" word "The Coalition Games" @@ -1662,3 +1695,4 @@ phrase "hostile disabled lunarium" word "." "!" + diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt new file mode 100644 index 000000000000..77aac2a3a296 --- /dev/null +++ b/data/coalition/heliarch intro.txt @@ -0,0 +1,2149 @@ +# Copyright (c) 2022 by Arachi-Lover +# +# Endless Sky is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later version. +# +# Endless Sky is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program. If not, see . + +mission "Heliarch Investigation 1" + name "Transport Heliarch Agents" + description "Bring Heliarch agents to ." + minor + passengers 3 + to offer + random < 65 + "coalition jobs" >= 70 + has "license: Coalition" + not "Lunarium: Questions: done" + not "assisting lunarium" + source + near "Quaru" 4 10 + destination "Ring of Friendship" + on offer + conversation + `A few minutes into browsing the local shops, you hear the strong sound of Saryd hooves approaching, and turn to see a trio of Heliarch agents hurrying toward you. They briefly salute you before stating their business.` + ` "Looking for work, the human visitor is?" the Saryd asks.` + ` "To the , a means of transport we need," the Kimek follows.` + ` ", we can offer. And, perhaps, some more interesting work after our destination, we reach," the Arach finishes.` + choice + ` "Of course, I'll show you to my ship."` + ` "Sorry, I'm not looking for any work currently."` + defer + ` They thank you for agreeing to deliver them to the , and introduce themselves; the Saryd is called Iplora, the Kimek is Kirrie, and the Arach is known as Tugroob. You help them settle in their bunks, wondering why they seemed so rushed.` + accept + on accept + "assisting heliarchy" ++ + on complete + "assisting heliarchy" -- + "coalition jobs" ++ + payment 90000 + conversation + `The three Heliarchs disembark and head immediately towards the spaceport, but not before Iplora hands you . "Speak with our superior, we must. Need your services again, we likely will, so if interested in further work, you are, look for us in the spaceport, you should." She bows her head lightly, and follows her colleagues into one of the Heliarch-only sections of the ring.` + on fail + "assisting heliarchy" -- + +mission "Heliarch Investigation 2" + name "Heliarch Investigation" + description "Take the Heliarch agents to the marked planets so that they can investigate signs of criminal activity." + passengers 3 + to offer + has "Heliarch Investigation 1: done" + not "Lunarium: Questions: done" + not "assisting lunarium" + source "Ring of Friendship" + destination "Ring of Friendship" + to complete + has "Heliarch Investigation 2 - Mebla's Portion: done" + has "Heliarch Investigation 2 - Stronghold of Flugbu: done" + has "Heliarch Investigation 2 - Shifting Sand: done" + has "Heliarch Investigation 2 - Fourth Shadow: done" + has "Heliarch Investigation 2 - Into White: done" + has "Heliarch Investigation 2 - Remote Blue: done" + on offer + conversation + `You find the trio of Heliarch agents, Iplora, Kirrie and Tugroob, waiting for you in the spaceport. They greet you, and Iplora speaks for the trio. "Accompany us now, could you? A job in mind for you, our superior has."` + choice + ` "I don't see why not. Lead the way."` + ` "Sorry, but I'm not interested in helping any more."` + decline + ` The three of them escort you through a number of restricted passageways dotted with armed, statue-like guards at every door and hallway you pass through. Eventually you reach a meeting room of sorts, with about a dozen other Heliarchs seated at the central table. One of them motions for you to join them.` + ` As you take a seat, one of the Kimek speaks. "The honorable Captain, we salute. Make you feel welcome, I, Consul Iekie of the Heliarch council, hope we will."` + choice + ` "Thank you. The honor's all mine."` + ` "Are you the one that has a job for me?"` + ` "Stable and safe, our great Coalition is. Sadly, there are some who ideas of revolt and rebellion spread," she says. "To combat these thoughts of disunion, we swore. Correct such behavior, we must," she says as she points to the three agents beside you. "Dedicated to that, our agents are, but oftentimes slow and predictable, their tactics are. A different approach might be due, so an outsider's help, and their way of thinking, we'd like to ask for."` + choice + ` "What exactly would I have to do?"` + goto what + ` "Revolt? Rebellion? What are you talking about?"` + ` "In that case, I'm not interested. I thought this was some simple job, not a political matter."` + decline + ` "Though to guard our Coalition from the Quarg and all who would see it harmed, steadfast and ever-ready we for millennia have remained, not as disciplined and understanding of the situation, our civilians are," Iekie explains. "For a few centuries now, plagued our Coalition with increasing violence and threats to our people, bands of thieves and terrorist groups have. Stealing Heliarch equipment, promoting rebellious propaganda, attacking Heliarch officials and sites, disrupting our peace with bombings and attacks, intensified all their activities as of late, they have."` + choice + ` "Well, what do you think I can do to help?"` + goto what + ` "Why are they doing all that?"` + ` "Uncertain to us, that still remains. Those that arrested and interrogated, we have, no more than simple pawns in the outlaw organizations appear to be." she considers her words for a few seconds. "Warning our civilians about the thugs' actions, we have been, and asking them for support with any information of suspicious activity. Investigate reports of such activity, what you can help us with is."` + label what + ` "Six worlds, we have marked. Each, we'd like you to 'visit'. Those three tourists, you will be transporting," an Arach says as they point to Iplora, Kirrie and Tugroob.` + choice + ` "Sounds easy enough. Where should I start?"` + ` "Whether they go undercover or not, this seems a bit risky for me. Sorry, you'll have to find someone else."` + decline + ` "Decide the order of your visits, you will, Captain," Iekie responds. "Shameful to admit this, it is, but known to these outlaws, many of our methods are. Failed in similar operations before, we have, so fear I do, that easily predicted, our own ordering would be."` + ` Some of the others brief you on the worlds where suspicious activity has been reported: Shifting Sand in Saryd space, Into White, Fourth Shadow and Remote Blue in Kimek space, and Mebla's Portion and Stronghold of Flugbu in Arach space.` + ` They wish the four of you good luck, and have you escorted back to the spaceport. The Heliarch trio arrives at your ship a few minutes later, out of uniform and with heavy luggage. You show the 'tourists' to their bunks, and head to your cockpit to decide which of the six worlds you'll head to first.` + accept + on accept + "assisting heliarchy" ++ + on complete + "assisting heliarchy" -- + "assisted heliarch" ++ + log "Assisted the Heliarch in investigating several worlds around Coalition space, bringing their agents to each world to look for any signs of criminal activity." + payment 900000 + conversation + `When you and the agents leave your ship, you're greeted by about a dozen Heliarch guards, who urge you to follow them into the restricted portions of the ring. You're once again guided through the halls, until you're met by Consul Iekie and her delegation. She approaches you first, handing you . "Welcome back, Captain . Glad, we all are, that made it back safely, you all have. Trust, I do, that fruitful in learning more of these criminals, your efforts have been?" She looks to the agents you transported.` + ` "Unearthed some useful information, we have," Tugroob tells her as he delivers the agents' reports. "Essential to the mission's success, Captain 's cooperativeness was."` + ` She nods, as she hands the data to one of the Heliarchs behind her, who immediately move to start analyzing the findings. "Eager to read on the progress made, I am."` + branch evidence1 + "lunarium evidence" == 1 + branch evidence2 + "lunarium evidence" == 2 + branch evidence3 + "lunarium evidence" == 3 + label finalthanks + ` Iekie thanks you for your efforts in the operation, and goes to analyze the findings with her team. Iplora, Kirrie and Tugroob remain there with them, and you're escorted back to your ships by the guards.` + accept + label evidence1 + ` The agents then get closer to her, and Kirrie whispers something to the consul, handing her another report. Iekie turns to you once more, saying, "Quite a find, this is. Done well, you have, Captain."` + goto finalthanks + label evidence2 + ` The agents then get closer to her, and Kirrie whispers something to the consul, handing her two more reports. Iekie turns to you once more, saying, "Most useful to our investigation, these findings will prove. Excellent work, Captain."` + goto finalthanks + label evidence3 + ` The agents then get closer to her, and Kirrie whispers something to the consul, handing her three more reports. Iekie turns to you once more, saying, "Enviable, your prowess at investigation is, . Outstanding work, Captain."` + goto finalthanks + on fail + "assisting heliarchy" -- + +mission "Heliarch Investigation 2 - Bonus 1" + invisible + landing + to offer + has "Heliarch Investigation 2: done" + "lunarium evidence" == 1 + source + government "Coalition" + on offer + payment 300000 + conversation + action + clear "lunarium evidence" + `You receive a message from the Heliarch Consul Iekie as you go in for a landing. "Captain ! Analyzed your findings, we have. Brought light to some stolen equipment, your aid has, and for that, grateful we are. Sending a monetary bonus as thanks, I am."` + ` When she finishes, are transferred to your account.` + decline + +mission "Heliarch Investigation 2 - Bonus 2" + invisible + landing + to offer + has "Heliarch Investigation 2: done" + "lunarium evidence" == 2 + source + government "Coalition" + on offer + payment 700000 + conversation + action + clear "lunarium evidence" + `You receive a message from the Heliarch consul Iekie as you go in for a landing. "Captain ! Analyzed your findings, we have. A great boon, your assistance was; located two stashes of our stolen equipment, we have. Investigating who was involved in such operations, my teams are. Very grateful for your help, we are, so sending a monetary bonus as thanks, I am."` + ` When she finishes, are transferred to your account.` + decline + +mission "Heliarch Investigation 2 - Bonus 3" + invisible + landing + to offer + has "Heliarch Investigation 2: done" + "lunarium evidence" == 3 + source + government "Coalition" + on offer + payment 1200000 + conversation + action + clear "lunarium evidence" + `You receive a message from the Heliarch Consul Iekie as you go in for a landing. "Captain ! Analyzed your findings, we have. Worry me greatly, all these stashes of stolen equipment do. Indebted to you, we are, as without your help, found all these operations, we would not have. A monetary bonus, as thanks, I am sending. Deserve it, you do, Captain."` + ` When she finishes, are transferred to your account.` + decline + +mission "Heliarch Investigation 2 - Mebla's Portion" + name "Investigate " + description "Transport the Heliarch trio to so that they can investigate signs of criminal activity." + to offer + has "Heliarch Investigation 1: done" + source "Ring of Friendship" + destination "Mebla's Portion" + to fail + or + has "Heliarch Investigation 2: declined" + has "Heliarch Investigation 2: aborted" + has "Heliarch Investigation 2: failed" + on complete + conversation + `You arrive to a thunderstorm, as is often the norm for , and the agents go over their plans on how to best investigate the planet.` + ` Tugroob suggests that he pose as an Arach writer looking to find housing on the planet and scurries off to what must be a real estate office. Iplora continues with the original idea of pretending to be a tourist, saying that she will ask the young local Arachi about rumors while walking around the city, hoping to find something of use.` + ` The two of them leave, and you are left with Kirrie, who has been mostly silent as his friends left your ship.` + choice + ` "Are you not going to follow their lead?"` + ` "Have you not decided how to investigate the planet?"` + ` "Captain . An edge, your human approach to these missions would give us, the consul said. Except underused, your foreign ideas are, if only the order at which we land on these planets, they are used for."` + ` He looks out to the rainy spaceport through your hatch, still open from his friends' exits. "Lead the way, would you? The warehouses, I wish to inspect, but your assistance I could use."` + choice + ` "Of course, I'll get my rain coat."` + ` "I'd rather not go out there with that rain."` + goto decline + ` You walk in a straight line for about an hour, occasionally being hit by splintering rain drops despite the cover provided by buildings and local structures. Kirrie takes you to the very edge of the town where you would be able to see the hills and mountains in the distance, were it not for the colossal rain clouds and constant downpour. One or two warehouses have a fair bit of rust on their doors, and just once you spot one with a damaged roof. You can also make out the shapes of small trees and bushes not too far out.` + ` "Now, Captain, start looking for something suspicious, where would you?"` + choice + ` (Check the warehouses with the rusty doors.)` + ` (Check the warehouse with the leaking roof.)` + goto reactor + ` (Go further out and check the trees and bushes.)` + goto trees + ` Kirrie approaches the door, and it opens without him so much as touching it. Unfortunately the warehouse turns out to contain nothing of any significance. It's storage for what Kirrie says are toy parts: just mountains of plastic stacked together. You check a few more warehouses like this, but none turn out to have anything. The rain is starting to get heavier.` + choice + ` (Check the warehouse with the leaky roof now.)` + goto reactor + ` (Go further out and check the trees and bushes.)` + goto trees2 + ` (Leave the rest of this to Kirrie.)` + ` You apologize and tell Kirrie that you don't know what to do next. While he does agree to do it himself, he never stops asking for your opinion on his choices.` + ` You spend a few more hours looking around until the rain and the wind get too dangerous for you to be moving from warehouse to warehouse. You both take shelter in one of them until the weather settles. Once it does, it is nearly nightfall, and Kirrie is notified by Iplora that she and Tugroob are already back at the ship. You two decide to head back as well.` + ` It seems Tugroob found some evidence of some smuggled weapons passing through here, but nothing major. Exhausted, the Heliarchs get back in their bunks, asking you to depart the planet.` + accept + label reactor + action + "lunarium evidence" ++ + ` Kirrie approaches the door and waits for a few seconds, as if expecting it to open. When it doesn't, he picks his headpiece off and fiddles with it briefly. He puts it on again and waits some more, again to no avail. "To all of these warehouses I should have access. Damaged, the door's electronics don't seem to be," he comments. He then asks you for help, looking for any manner of tools nearby so that you can force the door, while he tries to tinker with the lock. You find something akin to a crowbar, or perhaps a shovel, and bring it to him, and with some effort you two manage to angle it and pull it to pop the door open.` + ` At first glance there is nothing inside, but after he thoroughly crawls all over the place, he puts his head to a large metal panel on the opposite end of the room. You approach him, and again you two use the tool to bust the lock open, finding a hidden staircase leading underground.` + ` On your way down, Kirrie yells for you to take cover, and you barely escape a barrage of shots as you head back up. Kirrie isn't as lucky, as a shot hit one of his back legs just before he gets to the stairs. You go to help him up before any more shots come, but he seems to make do with five good legs well enough.` + ` You two rush back up. Kirrie tells you to be alert and watch the staircase, as he reaches for a small radio-like device to call for support. A few minutes later, a pair of Heliarch Punishers land nearby. Dozens of armed agents enter the warehouse, while you head to one of the ships with Kirrie and wait as his wound is treated.` + ` The agents return hours later, reporting they shot down the turrets and found the place deserted. "Many automated production lines, we found," one of them tells Kirrie. "Powering them, one of our Reactor Modules is."` + ` Once the local Heliarchs have the situation under control, they have a Breacher come in to pick you two up. It drops you and Kirrie closer to the , where you find Iplora and Tugroob already waiting. Kirrie suggests you depart once you all head inside, as his colleagues follow him to his bunk to hear what happened.` + accept + label trees + ` You suggest looking for something unusual near the plant life you spotted while the rain is still fairly tame, and he follows you. You spend a few minutes looking around the trees but find nothing suspicious.` + ` While passing by another set of bushes, Kirrie notices that some of them are awkwardly tilted. Upon further inspection, he tells you that they appear to have been removed and then hastily replanted, noting the odd wavy patterns of the small rocks around the roots. The rain has gotten heavier.` + choice + ` (Dig out the bushes.)` + ` (Head back to the warehouses and look around there.)` + goto back + label bushending + ` You help him unearth the bushes and dig a bit more to see if there's anything under them, but you never find anything. You find some other suspicious sets of bushes, but none have anything underneath. The rain and wind become too intense to stay outside, so you head inside a warehouse and take shelter there.` + ` Once the weather settles near nightfall, Iplora notifies him that she and Tugroob are already back at the ship, so you two decide to return as well.` + ` It seems Tugroob found some evidence of some smuggled weapons passing through here, but nothing major. They get back in their bunks, allowing you to depart.` + accept + label back + ` Though he wanted to try digging them out, you convince Kirrie to leave the bushes alone, and you two head back to the empty streets surrounded by the warehouses. You can barely differentiate the warehouses from earlier as the rain gets even heavier.` + choice + ` (Check the warehouses with the rusty doors.)` + ` (Check the warehouse with the leaky roof.)` + goto reactor + ` Kirrie approaches the door, and it opens without him as much as touching it. Unfortunately the warehouse turns out to contain nothing of any significance. It's storage for what Kirrie says are toy parts: just mountains of plastic stacked together. You check a few more like this but none turn out to have anything, and as the rain and wind become too much to walk through, you take shelter in one of the warehouses.` + ` Once the weather settles near nightfall, Iplora notifies him that she and Tugroob are already back at the ship, so you two decide to return as well.` + ` It seems Tugroob found some evidence of some smuggled weapons passing through here, but nothing major. They get back in their bunks, allowing you to depart.` + accept + label trees2 + ` You suggest looking for something unusual near the plant life you spotted while the rain is still fairly tame, and he follows you. You spend a few minutes looking around the trees but find nothing suspicious.` + ` While passing by another set of bushes, Kirrie notices that some of them are awkwardly tilted. Upon further inspection, he tells you that they appear to have been removed and then hastily replanted, noting the odd wavy patterns of the small rocks around the roots. The rain has gotten heavier.` + choice + ` (Dig out the bushes.)` + goto bushending + ` (Head back to the open warehouses and take shelter there.)` + ` Though you can barely hear each other in the rain, Kirrie insists on staying there and digging through the ground for a while to see if he can find anything.` + ` You walk back to the empty streets, taking care to not slip on the damp soil. You enter one of the warehouses Kirrie had previously opened and are soon joined by him. He informs you that he dug out the suspicious bushes but couldn't find anything under them.` + ` Once the weather settles near nightfall, Iplora notifies him that she and Tugroob are already back at the ship, so you two decide to return as well.` + ` It seems Tugroob found some evidence of some smuggled weapons passing through here, but nothing major. They get back in their bunks, allowing you to depart.` + accept + label decline + ` Kirrie leaves you behind and you sit there on your own for a number of hours. Eventually, the trio returns, revealing that only Tugroob had found evidence of illegal activity - smuggled weapons passing through the planet.` + ` The three agents get back in their bunks and suggest that you depart as soon as possible.` + +mission "Heliarch Investigation 2 - Stronghold of Flugbu" + name "Investigate " + description "Transport the Heliarch trio to so that they can investigate signs of criminal activity." + to offer + has "Heliarch Investigation 1: done" + source "Ring of Friendship" + destination "Stronghold of Flugbu" + to fail + or + has "Heliarch Investigation 2: declined" + has "Heliarch Investigation 2: aborted" + has "Heliarch Investigation 2: failed" + on complete + conversation + `While you doubt anyone opposing the Heliarchs would find much success operating in this massive compound, it seems the strategic location held by the planet, the volume of resources invested, the fortifications available, and the sheer number of ships stationed here had it marked for investigation anyway.` + ` The three agents inform you that you're not allowed to enter most parts of the compound they will be headed to, so you stay inside your ship. They return right at sunset, telling you they found nothing worthwhile. "As expected," Kirrie comments with a sigh. They tell you they're ready to leave, and head to their bunks.` + +mission "Heliarch Investigation 2 - Shifting Sand" + name "Investigate " + description "Transport the Heliarch trio to so that they can investigate signs of criminal activity." + to offer + has "Heliarch Investigation 1: done" + source "Ring of Friendship" + destination "Shifting Sand" + to fail + or + has "Heliarch Investigation 2: declined" + has "Heliarch Investigation 2: aborted" + has "Heliarch Investigation 2: failed" + on complete + conversation + `Iplora leaves the ship immediately, disappearing into the spaceport. Tugroob and Kirrie say that she is heading to a nearby oasis.` + ` "Like to connect with nature, the Saryds do. Hoping to hear rumors from the others there, she is," Kirrie explains as he also prepares to leave, claiming to know a few Heliarchs stationed here who could help him look into some reports of a local smuggler's base.` + ` Being the last Heliarch agent in your ship, Tugroob turns to you and asks, "Assist me in my search, would you, Captain?"` + choice + ` "Of course. Where are we headed?"` + ` "Sorry, I'll have to refuse this time."` + goto decline + ` "An abandoned mining operation, our target is. Received we have reports of suspicious activity near the complex - recently headed there some ships were, even though shut down for years the mine has been," he explains. You input the coordinates he gives you into your navigator.` + ` You come to the remains of a gargantuan mining operation, an enormous hole torn into the planet's crust, spiralling down to what must be nearly a kilometer below the otherwise relatively untouched surface. Near the edge, you spot a medium-sized building, made up of a few interconnected blocks and dirtied up by the planet's sand. Tugroob tells you it must have been the base for the mine workers and managing team when the mine was active.` + ` Close to the building, farther out from the digging hole, you see a few landing pads of large enough size for even the bulkiest of freighters, likely once used by spacecraft that would ship the raw ore off to smelting facilities. You land on one of them, and you and Tugroob leave your ship. As you step off the landing pad, Tugroob calls your attention to a desert storm brewing in the distance, and says you two should get started before it reaches here.` + choice + ` "Let's check out the building."` + ` "Maybe we should try heading down the mining hole."` + goto hole + ` Having been left alone for years, the base for the mining operation no longer has any power. Tugroob has to force the door, gripping the walls and pulling hard with his front legs until it slides open.` + ` The place is surprisingly tidy, if dusty near the door with what sand has been let in. Despite the relative cleanliness, it's evident that the previous owners didn't bother cleaning out before packing up and leaving. Various cabinets, archives and work stations dominate the initial room, and you can see it connects to a collective bedroom, filled with bunks and a storage area.` + ` "No other entrances there seem to be. If hiding anything here, others were, force their way in they had to, just like us," Tugroob says.` + choice + ` "Doesn't look like anyone's been in here in a while. Let's check the mining hole."` + goto hole2 + ` "There might be something hidden here. Let's look around."` + ` You two go about checking every drawer, archive and boxes of all sizes in the first room, but only end up finding a few scattered documents related to the mine, and some old doodles made by what must have been very bored workers. Tugroob tries to get the computers on, but no manner of tinkering brings any electricity to them. The building really is completely out of power.` + ` "Find nothing here we will, Captain," Tugroob says, looking out the door at the approaching sandstorm.` + choice + ` "Sorry, let's go outside and check that hole while we can."` + goto hole3 + ` "Hold on. Let's try the other rooms."` + ` You head to the dormitories while Tugroob quickly works his way through what remains in the storage. You check under and over all the beds, looking for anything that might be out of the ordinary, but find nothing. The bedroom leads to two larger modules of the building: one for the restrooms, and the other for a dining area, but after searching these areas you again emerge empty-handed.` + ` Tugroob comes to meet you, having finished with the storage, and reporting that he too found nothing of note. You two try to leave, but the storm has finally arrived, and so you decide to wait it out inside.` + goto fail + label hole3 + ` You two begin your descent down the mine, but with a step outside it's clear the storm's caught up to you. You still attempt to move to the hole, but the raging sand makes it too difficult to even find a way to start heading down safely. You two head back inside to wait for better visibility.` + goto fail + label hole + ` You two approach the hole, and finding one of the many ramps leading down the spiral, carefully make your way down. You pass by some large mining vehicles, akin to very large trucks with thick tracks instead of wheels, and many bores and drills at the front. Tugroob explains they are used to open up tunnels that extend outwards from the main dig hole, to reach lesser mineral deposits without needing to excavate needlessly.` + ` Continuing on your way down, he points to some of the holes made by the machines, and to many more vehicles near the bottom.` + choice + ` (Keep going down.)` + ` (Investigate the nearby vehicles and tunnels.)` + goto tunnel + ` You two speed up as you continue plunging down the mine, and as you're about a quarter of the way down you can see the bottom more clearly. Over the years, it seems the local storms have been filling it up with sand, and with the operation inactive, nobody's bothered clearing it out. The sand's not enough to have reached the larger mining machines, but you suspect even they'll be covered completely in the coming years.` + ` Tugroob stops you at one point, taking your attention to the top of the hole. The clear sky is growing darker, and you can see the wind picking up and launching some smaller rocks down. "Much time we have not, Captain. Search we cannot amidst a sandstorm, and reach in time the bottom we will not."` + choice + ` (Try and investigate the vehicles and tunnels to the sides instead.)` + goto tunnel + ` (Head back up and investigate the building.)` + ` You two rush back up. Tugroob helps you save some time by climbing one of the walls straight up as you cling to him, rather than following the spiraling ramps. You reach the building a few minutes before the storm engulfs it and covers the dig hole completely. As it has no power, Tugroob has to force the door open, gripping to the walls and pulling hard with his front legs until it slides open.` + ` The place is surprisingly tidy, if dusty near the door with what sand has been let in. Despite the relative cleanliness, it's evident that the previous owners didn't bother cleaning out before packing up and leaving. Various cabinets, archives and work stations dominate the initial room, and you can see it connects to a collective bedroom, filled with bunks and a storage area.` + ` "No other entrances there seem to be. If hiding anything here, others were, force their way in they had to, just like us," Tugroob says.` + ` Given the storm's trapped you in, you two turn over every drawer, archive and box, look over everything in the storage area, try and get the computers to work, and even check the bedroom and its connecting dining area and restrooms, all to no avail. Your search doesn't bear fruit, and so you're left waiting inside as the storm rages around the building.` + goto fail + label tunnel + action + "lunarium evidence" ++ + ` As Tugroob is more familiar with the vehicles than you are, he checks them before joining you in exploring the tunnels dug into the sides of the mining hole. The holes mostly head in straight lines down, forming straightforward paths to where the lesser ore veins were.` + ` The sand continues to pile up into the mine hole when you two come to a vehicle that wasn't driven back fully, and is still blocking the entrance to its tunnel. Tugroob climbs up to see if there's any way to crawl inside, but he is surprised upon checking the driving controls: it's still operational. He drives it back, opening up the hole, and you two go in.` + ` Lighting the way ahead with your flashlight, you're surprised to see this tunnel is dug slightly upwards, and brings you not to a large, dug out ore vein spot, but to a rustic mineshaft. A few lights on the walls flicker on as you approach them, lighting up the wooden beams supporting the long hallway. Before you go further inside, you're stopped by Tugroob, who crawls around the floor, walls and ceiling just before the first lamp, looping several times without ever going further in. He only stops to slowly reach one leg inside, then right back out after apparently touching something.` + ` "Request support equipment to get through safely, we must," he says, and using a communication device, he calls for assistance from Heliarch agents, warning them about the sandstorm. You head back up to the building to wait for them.` + ` Shortly after, several dozen Heliarch agents arrive. Most of them work to keep the sand out, while a few follow you two down and inside the peculiar tunnel, bringing some form of cutting tool and several pieces of sensor equipment. After checking with the sensors for a few minutes, they use the tool to surgically remove what Tugroob was slowly examining before: several extremely thin wires, connected to some type of machinery hidden within the wooden beams.` + ` After they're done, the agents storm the place but find nobody. What they do find are dozens upon dozens of crates filled to the brim with Heliarch staves, blaster guns, riot gear, and other weaponry.` + ` They escort you and Tugroob back outside as the agents prepare to bring the smuggled weapons to their own ships. Though the storm is still raging on, you can make out the shape of a few Heliarch Interdictors parked near your own ship right before you take off. You regroup with Iplora and Kirrie, and they ask Tugroob for more details on the ordeal before they head to their own bunks.` + accept + label hole2 + ` You two exit the building and approach the hole, find one of the many ramps leading down the spiral, and carefully make your way down. You pass by some large mining vehicles, akin to very large trucks with thick tracks instead of wheels, and many bores and drills at the front. Tugroob explains they are used to open up tunnels that extend outwards from the main dig hole, to reach lesser mineral deposits without needing to excavate needlessly.` + ` Continuing on your way down, he points to some of the holes made by the machines, and to many more vehicles deep down near the bottom.` + choice + ` (Keep going down.)` + ` (Investigate the nearby vehicles and tunnels.)` + goto tunnel + ` You two speed up as you continue plunging down the mine, and as you're about a quarter of the way down you can see the bottom clearer. Over the years, it seems the local storms have been filling it up with sand, and with the operation inactive, nobody's bothered clearing it out. The sand's not enough to have reached the larger mining machines, but you suspect even they'll be covered completely in the coming years.` + ` Tugroob stops you at one point, taking your attention to the top of the hole. The clear sky has grown much darker, with the storm clouds covering most of it, and you can see the wind's picked up and is launching many smaller rocks down. All the while more and more sand seeps into the hole. "Leave we must, Captain. Search we cannot amidst a sandstorm, and reach in time the bottom we will not."` + ` To save time and avoid the long spiraling ramps, you cling to Tugroob as he cuts his way up the hole, climbing its walls while carefully avoiding the rocks and falling sand. You barely reach the building before the storm fully engulfs the mine, and decide to wait there. While you wait, you and Tugroob search around more but ultimately find nothing.` + label fail + ` Night falls with no sign of the storm dying down, and after receiving a notification from Iplora, Tugroob informs you that you should both head back to the ship and pick her and Kirrie up. As soon as the storm lets up slightly, he helps you out of the building and through the raging winds, until you reach your ship. You two meet up with the rest of the group, and the agents head to their bunks.` + accept + label decline + ` "I see," he says. He gives you the coordinates he needs to go to and you drop him off before returning to the hangars.` + ` Kirrie and Iplora come back hours later and contact Tugroob, who says you can pick him up where you left him. Once he's back in your ship, he tells you he found nothing worthwhile.` + +mission "Heliarch Investigation 2 - Fourth Shadow" + name "Investigate " + description "Transport the Heliarch trio to so that they can investigate signs of criminal activity." + to offer + has "Heliarch Investigation 1: done" + source "Ring of Friendship" + destination "Fourth Shadow" + to fail + or + has "Heliarch Investigation 2: declined" + has "Heliarch Investigation 2: aborted" + has "Heliarch Investigation 2: failed" + on complete + conversation + `For this planet, the trio informs you that they cannot spend too much time in one place considering how densely populated it is. Instead, they hand you the coordinates of dozens of factories, with instructions to take them to each factory in whichever order you'd prefer.` + ` "Surprise inspections, we shall perform," Kirrie says as the three prepare their equipment and weapons. You spend hours flying around the planet dropping one agent off in a factory, flying off to another, then another, then picking up the first of the three in a seemingly endless cycle.` + ` After picking up Tugroob from the last factory, they all analyze their findings one last time. They do this by going over each individual factory, mechanically running down a long list of "possible abnormalities" for each, leaving a mark on the side, and briefly writing a description if any such "abnormality" was noted in a factory.` + ` "Unauthorized power surges to some replicators, we found. Missing as well, some records of storage transport were," Iplora says. You land on a Heliarch base, and they hand a copy of their findings to the Heliarchs stationed there before returning to your ship. As they head to their bunks, you see several Heliarch ships fly off in the direction of some of the factories.` + +mission "Heliarch Investigation 2 - Into White" + name "Investigate " + description "Transport the Heliarch trio to so that they can investigate signs of criminal activity." + to offer + has "Heliarch Investigation 1: done" + source "Ring of Friendship" + destination "Into White" + to fail + or + has "Heliarch Investigation 2: declined" + has "Heliarch Investigation 2: aborted" + has "Heliarch Investigation 2: failed" + on complete + conversation + `Kirrie, already donning his winter coat, instructs you to land near the equator. He says him and Tugroob will conduct some subtle interrogations, stating that it's 'all they can do' in this climate.` + ` You drop them off in one of the larger settlements there. After they leave, Iplora asks that you bring her close to the southern pole of the planet.` + ` "Suspiciously similar, independent reports on that area have been. Tasked with investigating it, I was."` + ` As you land on an isolated icy patch, just out of reach of a growing snowstorm nearby, Iplora finishes her preparations. You find her carrying a bag with some equipment and wearing what is - at least when compared to what her colleagues were wearing - fairly light clothing. Although she is a Saryd, you still worry that she might be frostbitten in this extreme weather, but she reassures you that she will be fine.` + ` She tells you she'll be back in a few hours, and waits for you to open the hatch.` + choice + ` "Good luck. Be careful not to get lost in all this snow."` + goto warm + ` "Hold up, I'll go with you so we can search faster."` + ` She pauses in thought for a few seconds, looking back at you. "Certain of that, are you, Captain? Treacherous, these storms can be."` + choice + ` "Don't worry, I can carry my weight through some snow."` + goto snow + ` "On second thought, you're right. Good luck out there."` + label warm + ` You open the hatch, and she begins her trek. You slouch around your ship for a few hours, waiting for any signal from the Heliarch agents, but nothing comes up on your commlink. Iplora comes back, saying she couldn't find anything, so you leave and pick up Kirrie and Tugroob. They also return empty-handed.` + accept + label snow + ` She remains silent, moving away from the hatch and taking a seat to wait. You head to your room and prepare yourself for what's to come with the warmest, best clothing you could find for the snowy grounds. When you're done, you head back to your controls to open the hatch, and the both of you head out into the white fields. Not long after leaving your ship, you can make out small, dark lines nearby. It seems you landed close to a forest. Unfortunately, the trees don't do much to protect you from the increasingly dense snowfall.` + ` You continue deeper into the lifeless forest for what feels like hours, so long that your feet start feeling slightly numb from the cold. After yet another turn amidst identical trees, Iplora guides you out of the forest to a snowy plain, dotted with a few dozen small, sturdy houses. Iplora explains it was something of a resort, popular with Kimek families when the planet wasn't as cold as nowadays. The storm is not so terrible here, so you can also faintly see cave entrances in a few small mounds at the edges of the resort grounds. Snow-covered boulders litter the entire plain, and Iplora warns you to take care not to trip on them.` + ` "Check the caverns, we must. More relentless, the storm will soon become," she says.` + choice + ` "Lead the way."` + goto bumpyroad + ` "You go ahead. I'll see if I can find anything in the houses."` + ` She nods and tells you that the place is shut down, so you can force your way into the houses if needed. As she starts making her way uphill, you head to the closest house and blast the lock after a few failed attempts at opening it normally. You crouch past the entrance of the abandoned home, clearly not intended for any non-Kimek, and begin searching the interior. The furniture is still in surprisingly good shape, if a bit dusty, but you find nothing inside any of the containers, below any of the beds, or hidden under the flooring.` + ` You move on to the next house, and speed up the process as you go along and get used to the standard layout of the resort homes. After you're done with the fifth one, you leave to find the snowfall growing stronger. It might be best to try and look for Iplora and see if she's found anything, before the blizzard sets in fully.` + choice + ` (Enter the nearest cavern.)` + goto shelter + ` (Try and dig through the snowy mounds to find something.)` + label dig + ` You claw away at the snow and hit a hard surface, but it turns out to be just a rock. You try some other mounds to no avail, and right as you finish digging through another pile of snow only to find another rock, Iplora appears behind you.` + ` "Counterproductive, cleaning away the snow is," she says. "Found nothing, I have. Back to your ship, we must go."` + choice + ` (Go back to the ship.)` + goto back + ` (Keep digging.)` + goto keepdig + label shelter + ` You rush inside the nearest cave, turning on your flashlight as you carefully explore its interior. After a while, you notice another light coming from further inside the cave, and Iplora emerges soon after. "Found anything?" she asks, and you shake your head. Aside from some small campsites, she didn't either. You wait inside a bit more, and when the weather clears and night approaches, you follow her back to the ship.` + ` Once you're there, you leave to pick up Kirrie and Tugroob, who also come back empty handed. The agents head to their bunks, and you prepare to take off.` + accept + label bumpyroad + ` Following her up the hills proves difficult at first, what with your legs sinking into the snow, but the ground below becomes more and more solid - if a bit bumpy - the further into the resort you go. You try to watch your step around the boulders scattered about, but after stepping on a patch with deeper snow than usual, you trip over one of the mounds. She helps you up, and the two of you eventually arrive at the entrance of one of the caverns.` + choice + ` (Go inside with Iplora.)` + goto cave + ` (Search around the snow field.)` + ` You tell her you'll look around the snow for a while and go inside if the storm gets rough again. Walking around in the developing blizzard, this time minding the bumpy ground below, you try to look for anything off about any of the resort homes, or perhaps spot something in the snow itself. Although the scenery is a great sight, the task quickly becomes dull. Even after walking around the entire resort, your efforts produce no results. The snow starts falling much faster, so you begin making your way back to the caverns.` + ` With your focus on blocking a gust of snow, you end up tripping over another one of the mounds on your way, and realize you don't remember which cave Iplora entered. Considering the weather, though, taking shelter in any of them would be a good choice.` + choice + ` (Enter the nearest cavern.)` + goto shelter + ` (Try and dig through the snowy mounds to find something.)` + goto dig + label cave + ` You and Iplora bring out your flashlights as you two explore the caverns. After some twists and turns, she notices some large rocks that evidently broke free from the walls, but still hug them closely. She puts down her flashlight and starts pushing the rocks, revealing a passage to a small campsite containing some makeshift beds, knocked over equipment boxes, and a worn down campfire in the middle.` + ` You search through the boxes as she examines the room looking for some other hidden area, but neither of you find anything. She checks the campfire and concludes that nobody has been here for a few months. You continue exploring the cave and eventually loop back outside, leaving via another cave entrance that, according to Iplora, is this time much further from the forest. Given the blizzard is now strong enough that you've lost sight of the forest from earlier, you wonder how she's even managing to tell where you are, and for how much longer she'll be able to do so.` + choice + ` (Suggest returning to the ship.)` + goto bumpyblizzard + ` (Continue looking around the caves.)` + ` You head back inside and continue exploring the cave system. You two find a few more of the hidden campsites, but all are as abandoned as the first one. You're alerted by the wind, snow, and ice whenever you're close to another exit.` + ` After a few hours, the storm finally subsides, and you both return to your ship. You leave to pick up Kirrie and Tugroob, who also come back empty-handed.` + accept + label bumpyblizzard + ` Iplora hesitates for a bit, then explains that you could get sick going through the storm now. She suggests instead that you wait in the caves until it is safe for human passage.` + ` You insist, and she reluctantly gives in, telling you to stick close to her. She moves slowly so you have no problem keeping up, but time and again you keep falling over, tripping on the mounds the rocks have created. Another fall, and Iplora reaches her hand out to help you up once again.` + choice + ` (Take her hand.)` + ` (Try and dig through the snow to find something.)` + goto snowdig + label back + ` She helps you up, and you continue on your way down the hills. You get back to the forest, and she starts finding the trail back to the ship. Halfway through, the storm gets progressively weaker.` + ` When you two return to your ship, you leave to pick up Kirrie and Tugroob, who also come back empty handed.` + accept + label snowdig + ` You start clawing your way down the snow as Iplora asks you to stop and continue moving toward the ship. You continue, your hands getting colder as the snow steals the heat even through your gloves. You hit a hard surface and start clearing from there, only to see it was, in fact, just a boulder.` + ` "Satisfied? Return, we must. Come now," You turn to see her offering her hand once again.` + choice + ` (Take her hand.)` + goto back + ` (Head to another mound and try digging there.)` + label keepdig + ` You stand up and run to another spot where you fell over. Iplora follows you, and even with the snow muffling the sounds around you, you can hear her exasperated sigh. She tries to pull you away, but you hit a hard surface yet again, this time creating a faint metallic echo. She takes her hands off of you and lays down, now helping you dig out whatever is there. Once the object is visible, she stands up. Though much of it is still buried, you can tell it's a very large metal container of sorts - the part that's out of the snow looks almost like the larger end of a coffin.` + ` After clearing out what snow you could from over the rest of the object, you see it's many times larger than either of you. You try to look for some way to open it while she starts going over her bag, looking for something, but the cold, frost-plagued metal doesn't budge to your efforts. She finally seems to find what she was looking for - some sort of comms device - but before she has a chance to activate it, an energy blast from the far side of the resort rattles the ground nearby. It misses her by only a meter or so, and melts much of the snow it hit to nothing.` + ` She yells for you to get down, pulling out a Heliarch blaster weapon from the bag and firing back in the direction the shot came from.` + action + "lunarium evidence" ++ + choice + ` (Take cover.)` + ` (Pull out your gun and help her.)` + goto help + ` You rush to the nearest resort house, staying behind it and hoping you'll have enough protection from the blasts. You can still hear Iplora move around, and you occasionally peek your head over to see her shooting and taking cover behind the houses herself, narrowly avoiding incoming blasts as she tries to close in the distance with whoever or whatever is shooting. The shots stop suddenly and you see her come over, saying that it should be safe to get out now.` + ` "Fled, our attacker has," she claims. From the looks of it she wasn't injured. You two get back to the dug out spot, and Iplora grabs her bag. She managed to call for support in between running for cover and shooting back, and you two wait by one of the houses for a few minutes.` + goto opencrate + label help + ` You two start shooting back as you move for cover behind the resort houses. Iplora signals for you to head out to another house, while she takes a different path. Rushing to the next house for cover while shooting in the direction of your attacker, you narrowly avoid the shots that come your way. You lose sight of Iplora herself, now only making out the bright blasts from her weapon as she moves quickly through the resort.` + ` Trying to keep up, you notice the shots grow less frequent as they alternate between you and Iplora. The blizzard is bad enough that you can't even see the attacker despite getting closer and closer, but it seems that goes both ways, as you and Iplora manage to avoid getting hit without too much trouble.` + ` You've barely gotten past half of the resort when the shots stop altogether. Iplora still takes aim for a bit, firing some shots as she continues on past some houses, but ultimately lowers her weapon and comes toward you. "Fled, our attacker has," she claims. You two head back to the dug out spot, and Iplora grabs her bag. She managed to call for support in between running for cover and shooting back, so you two wait by one of the houses for a few minutes.` + label opencrate + ` Several Heliarch Neutralizers arrive just before the blizzard subsides, and you're directed to one of them to dry your clothes and make sure you're not frostbitten. Nearly all of the Heliarch agents making the rounds over the resort are Saryds, and are quick to locate more of the coffin-like containers buried in the snow. They pull them out with equipment they've brought in the ships and carefully melt down the ice and snow layers covering them, finally managing to force their lids open once they've dried out.` + ` Each one houses a Heliarch Finisher Torpedo inside, to the agents' surprise. As they open them up and reveal dozens of the torpedoes, Iplora heads out with a group of agents so that she can show them signs of the shootout with the attacker. She gives her thoughts on where they could be fleeing to, and informs another group on the layout of the local caverns before they head underground. When she's back with you, one of the captains of the Neutralizers tell you that they will handle everything from here, and has one of the ships take you two to where your own ship is parked. He leaves as you prepare to take off.` + ` You head back to pick up Kirrie and Tugroob, who are excited to hear about what happened. They themselves didn't find anything, but they're content with listening to Iplora as she tells the story.` + +mission "Heliarch Investigation 2 - Remote Blue" + name "Investigate " + description "Transport the Heliarch trio to investigate the isolated ." + to offer + has "Heliarch Investigation 1: done" + source "Ring of Friendship" + destination "Remote Blue" + to fail + or + has "Heliarch Investigation 2: declined" + has "Heliarch Investigation 2: aborted" + has "Heliarch Investigation 2: failed" + on complete + conversation + `When you land, a couple of other civilian ships land nearby. Some Kimek leave them and wait outside your own. Kirrie is the only one to leave, and after speaking a bit with the other Kimek, they leave for the city, splitting in two groups.` + ` "Not fond of outsiders, the people of this world are," Tugroob explains. "Decided to employ undercover Kimek agents, Consul Iekie has."` + ` You wait around for a couple hours as Iplora and Tugroob tinker with your ship's communication devices, keeping in contact with the two groups. They don't mention if either group finds anything, and as night falls, Kirrie returns to the ship on his own. He doesn't say anything of the operation, instead just heading to his bunk to rest. Iplora and Tugroob follow suit, after telling you to depart whenever you're ready.` + + + +mission "Heliarch Recon 1" + name "Heliarch Reconnaissance" + description "Fly to all the Quarg planets and stations the Heliarch asked, land on them, let your modified ship sensors scan their surroundings, and then head back to the ." + minor + source + government "Heliarch" + stopover "Lagrange" + stopover "Forpelog" + stopover "Grakhord" + stopover "Alta Hai" + stopover "Kuwaru Efreti" + destination "Ring of Wisdom" + to offer + "reputation: Quarg" >= 0 + "coalition jobs" >= 55 + has "visited planet: Lagrange" + has "visited planet: Alta Hai" + has "visited planet: Kuwaru Efreti" + has "First Contact: Hai: offered" + has "license: Coalition" + not "Lunarium: Questions: done" + not "assisting lunarium" + on offer + require "Jump Drive" + conversation + `Three Heliarch agents are waiting for you when you land. "The human visitor who so much to our society has contributed, we greet," the Saryd says as they all salute you.` + ` "Sent by Consul Aulori, we were," the Kimek says proudly, as if you were supposed to know who that is. "An important task for you, he has in mind."` + ` "How far would the visitor go, if to further help our Coalition, it meant?" the Arach asks.` + choice + ` "I'd be glad to help. What do you need?"` + ` "I'm not sure I understand what you're getting at."` + ` "Obviously, I have my limits."` + ` "A jump drive, you possess. Far away, you can travel. Bother you, the harsh cages of the Quarg do not," the Saryd explains as all three walk toward your ship.` + ` "Few in number, our own jump drives are, and too risky would it be, for one of our own to venture far out," the Kimek adds.` + ` "If to help us gain knowledge of the oppressors, you wish, lend the Coalition your ship's sensors for a short time, would you?" asks the Arach.` + choice + ` "Are you asking me to spy on the Quarg?"` + ` "Sorry, I don't want to get involved in your conflict with the Quarg."` + decline + ` "As espionage, a 'malfunction' qualifies not," the Saryd responds.` + ` "Merely alter your own ship's sensors, we would. For a time, specially tuned to scan Quarg worlds, they would be," the Kimek clarifies. "No evidence against you, they would have."` + choice + ` "Alright, which worlds do you need me to land on?"` + ` "Sorry, I don't want to get involved in your conflict with the Quarg."` + decline + ` They ask you to show them your map of the galaxy, so you bring them inside your ship and point out to them all the Quarg planets and stations you have found. They're a bit startled when they first see the entire map, as if unsure about where to send you.` + ` You give them a quick rundown of each Quarg world, and after discussing among themselves for a bit, the Saryd speaks. "Interested in the Quarg's mining operations, and the various construction stages of their ringworlds, the consul is."` + ` He points to some of the worlds, and you list the places you need to land: .` + ` They call for some engineers to come work on your ship's sensors, the whole thing taking just a few minutes. When they're done, the Heliarch agents thank you for your cooperation, and tell you to head for the when you've collected all the data.` + accept + on accept + "assisting heliarchy" ++ + to fail + "reputation: Quarg" < 0 + on complete + "assisting heliarchy" -- + event "heliarch recon break" 10 21 + "coalition jobs" ++ + payment 165000 + conversation + `The Heliarch trio are eagerly waiting for you when you return. They are quick to welcome you, urging you to show them your ship's logs so they can see what information you've gathered. They don't seem to pay much mind to data on Grakhord or Forpelog, being much more interested in the ringworlds. As they examine the data, though, the Saryd frowns. The Kimek brings all his legs closer to his body, and the Arach squints all her eyes - probably their versions of the Saryd's reaction.` + ` "Land on the rings, you really did, right Captain?" the Saryd asks while pointing at the places you visited.` + ` You nod, and the Kimek hits your control panel lightly with one of his legs. "No data on the rings, the sensors collected! Gone wrong, something must have."` + ` They have engineers return your sensors to normal, while you explain how your ship behaved while landing on them. They speak among themselves for a while, then the Arach says, "Too straightforward an approach, we might have taken. Captain , contact you again soon, we will."` + ` They hand you , and leave to one of the Heliarch sections of the ring.` + on fail + "assisting heliarchy" -- + +mission "Heliarch Recon Alta Hai" + invisible + landing + source "Alta Hai" + destination "Earth" + to offer + has "Heliarch Recon 1: active" + on offer + conversation + `Coming in for a landing, something from inside your ship produces an irritating, high pitched whistle sound. It grows stronger the closer you get to the ringworld, until your ship completely shuts down. Your controls are rendered useless as you scramble to land manually, only for your autopilot to click back to normal and land as usual at the last moment. Looking outside, you spot several Quarg standing still, staring at your ship, until they hastily leave without contacting you at all.` + decline + +mission "Heliarch Recon Forpelog" + invisible + landing + source "Forpelog" + destination "Earth" + to offer + has "Heliarch Recon 1: active" + on offer + conversation + ` While you told them this was nothing more than a barren mining outpost, the Heliarchs still insisted on gathering intel on this small moon. Regardless of its usefulness, you land as they asked and let your scanners get a proper reading on this world.` + decline + +mission "Heliarch Recon Grakhord" + invisible + landing + source "Grakhord" + destination "Earth" + to offer + has "Heliarch Recon 1: active" + on offer + conversation + `As instructed, you land on Grakhord and let your ship work normally while the Heliarch sensor gets its reading. Though Heliarch technology is very advanced, you wonder if just by modifying your scanners they could penetrate the layers of rock to fully reveal the Quarg mining operation.` + decline + +mission "Heliarch Recon Kuwaru Efreti" + invisible + landing + source "Kuwaru Efreti" + destination "Earth" + to offer + has "Heliarch Recon 1: active" + on offer + conversation + `When you approach the ringworld for landing, a couple of lights start flickering on your control panel, and you can make out some whistling coming from somewhere inside your ship. It continues for a few seconds before stopping.` + decline + +mission "Heliarch Recon Lagrange" + invisible + landing + source "Lagrange" + destination "Earth" + to offer + has "Heliarch Recon 1: active" + on offer + conversation + `You don't really know what the Heliarchs did to your sensors, or if you can even see the data they are collecting, but as you come in for a landing, you hear a faint whistling sound from the hull of your ship. It's short lived, and you land normally. Hopefully nothing broke.` + decline + +event "heliarch recon break" + +mission "Heliarch Recon 2-A" + name "Scanning Preparations" + description "Install an Outfit Scanner, then land on , where the Heliarchs will modify it to be able to scan Quarg ships the way they need it." + landing + source + near "Ekuarik" 1 100 + destination "Ring of Wisdom" + to offer + has "event: heliarch recon break" + not "Lunarium: Questions: done" + not "assisting lunarium" + on offer + conversation + `When you land, you're contacted by the Heliarch agents who had you land on some Quarg worlds and rings to collect data. "Captain , a new task for you, we have," the Kimek says.` + choice + ` "What do you need me to do?"` + ` "I'm sorry, but I'm not willing to risk my ship any longer to help you spy on the Quarg."` + decline + ` "Too large and complex for a quick reading, planets and ringworlds are, so wish to get updated scans on Quarg ships, the consul now does," the Arach says.` + ` "Scan them during our war, we of course did, but much more precise now, our technology has become," the Saryd explains. "To use one of our own scanners, we cannot ask of you. Much risk, it would pose, but if to the , a human outfit scanner you could bring, alter it to suit our purposes, we will."` + choice + ` "Alright, I'll go there once I have an outfit scanner ready."` + ` "That sounds even more dangerous than what you had me do before. Sorry, but I'm not interested."` + decline + ` They thank you for your willingness to help, and tell you they will be waiting on the .` + accept + on accept + "assisting heliarchy" ++ + on complete + "assisting heliarchy" -- + require "Outfit Scanner" + on fail + "assisting heliarchy" -- + +mission "Heliarch Recon 2-B" + name "Silent Scan" + description "Now that the Heliarchs have altered your Outfit Scanner, head to and scan some Quarg ships there, then report back to ." + landing + source "Ring of Wisdom" + waypoint "Enif" + to offer + has "Heliarch Recon 2-A: done" + not "Lunarium: Questions: done" + not "assisting lunarium" + on offer + conversation + `The Heliarch agents who spoke to you are ready with a team of engineers once you land. They remove the outfit scanner from your ship and take it to a restricted area. After about an hour, they come back, and while you can't see any visible changes to the outfit, they assure you it is better suited for scanning Quarg ships now.` + ` The agents then come into your ship, asking for your map again. "Now, in the earliest stages of construction, this ring you showed us is," the Arach says, pointing to , where Lagrange is. "Interested in the Quarg ships guarding that system, Consul Aulori is. Suffice, one scan per type of ship there should."` + accept + npc "scan outfits" + personality staying uninterested target + government "Quarg" + system "Enif" + fleet + names "quarg" + variant + "Quarg Skylark" + "Quarg Wardragon" + on accept + "assisting heliarchy" ++ + on complete + "assisting heliarchy" -- + "coalition jobs" ++ + payment 200000 + conversation + `Once again the engineers remove your outfit scanner, take a copy of the scan logs, and hand it to the Heliarch agents, who give you . "Grateful to you, we are, Captain ," the Saryd says. "Remember your assistance, the consul will."` + ` When the engineers return, they put your outfit scanner back in place. The Heliarch agents say their goodbyes, reassuring you that the Quarg shouldn't attack you for this. "If interested in doing some investigation of your own, you wish, maybe land on their rings again, you could," the Kimek suggests. "Maybe find out something of interest for us, you will."` + ` He wishes you safe travels and leaves with his colleagues.` + on fail + "assisting heliarchy" -- + +mission "Quarg Interrogation" + invisible + landing + deadline 1 + source + attributes "quarg" + not planet "Humanika" + destination "Earth" + to offer + has "Heliarch Recon 2-B: done" + on offer + conversation + `As you land on , a Quarg is patiently waiting right outside your ship, as if expecting you to open the hatch. You think nothing of it at first, but when you try and access the local news feed, you notice your monitors' interfaces aren't showing any of the local services and facilities. A few more minutes go by until you realize your ship hasn't been refueled either. You look out to see some more Quarg standing by the refueling machines of the landing pad you landed on, simply looking at your ship. Seeing that the other Quarg is still waiting by your hatch, you head outside to speak with it.` + ` "Hello, ," it says.` + choice + ` "Hello, can I help you?"` + ` "Is there some sort of problem?"` + ` It blinks, then slowly looks to a Wardragon parked farther away. "You were seen landing on some of our worlds and rings, bringing about strange scanning mechanisms, and were also found to be scanning some of our ships. Why is that?"` + choice + ` "I was just curious about your species."` + goto lie + ` "What are you talking about? I never did any of that."` + goto lie + ` "Scanning? I'm sorry, I think my ship just had some malfunctions. I didn't mean to offend."` + goto lie + ` "The Heliarchs asked me to do it."` + goto truth + label lie + ` Around ten seconds pass without it saying anything, simply staring at your eyes and blinking slowly. "I see." Without another word, it walks away, heading towards the Wardragon.` + accept + label truth + ` "And why did you agree? Do you wish to join their ranks, perhaps?" it asks.` + choice + ` "I just wanted to help. It's not like I destroyed your ships or something."` + ` "They told me that the Quarg keep others in 'separate boxes', and that you hinder their development."` + goto hinder + ` "Perhaps not, but you agreed to collect information on us and our worlds, which hold countless civilians, and deliver the findings to a group that despises us."` + goto end + label hinder + ` "And you believe that? Have we restricted your movement? Chastised you for interacting with the Hai or Korath? Even after you agreed to help those foolish, tyrannical Heliarchs, are you not here, in one of our worlds, peacefully conversing with a Quarg?"` + label end + ` It blinks a few more times as a few small stripes on its face rapidly alternate between shades of deep blue and bright red. It then ends with, "It would be most wise to cut off all your ties with these 'Heliarchs,' human." It walks away, headed to the Wardragon it looked at before.` + decline + npc save + government "Quarg" + personality launching uninterested + fleet + names "quarg" + variant + "Quarg Wardragon" + +mission "Heliarch Recon 3-A" + name "Preparations for Scanning" + description "Head to , where the Heliarchs will discuss the next recon task they have for you." + landing + source + near "Ekuarik" 1 100 + destination "Ring of Wisdom" + to offer + has "Quarg Interrogation: offered" + has "Rim Archaeology 5B: active" + has "event: rim archaeology results" + not "Lunarium: Questions: done" + not "assisting lunarium" + "coalition jobs" >= 65 + on offer + conversation + `Upon landing, you're contacted by the Heliarch agents who have had you scan Quarg worlds and ships. "Hello again, Captain !" the Kimek greets you. "Thank you again, we must, for your latest service. Much more detailed than what we had, your scans are."` + ` The Saryd interrupts him. "Not... satisfied with them, Consul Aulori was, however. Tasked with acquiring your help again, we were."` + branch license + has "Heliarch License: done" + ` "An exception, the council has decided to make," the Arach explains. "Granted one of our Scanning Modules, you will be. Just for the mission, it is, so return it once it's over, you must. Install it on your ship, a team on the will."` + goto choice + label license + ` "A 'proper' close-up scan, with a Heliarch Scanning Module, the consul wants," the Arach explains. "Now that in our ranks, you are, simple enough for you, purchasing one should be. Once ready, you are, head to the to hear the plan, you must."` + label choice + choice + ` "Okay, I'll be heading there as soon as possible."` + accept + ` "Sorry, but I don't want to risk upsetting the Quarg any more than I already have."` + goto decline + ` "Why didn't you just have me do that last time?"` + branch license2 + has "Heliarch License: done" + ` "Restricted technology, it is. For Heliarch use only," the Arach tells you.` + ` "Dangerous for you, it also was," the Saryd adds. "Provoked into attacking you, the Quarg might have been, if our technology, on your ship they noticed."` + choice + ` "And why would that be any different this time?"` + goto choice2 + ` "Well, I don't want to risk any of that. Sorry, but I can't help you."` + goto decline + label license2 + ` "Dangerous for you, it could have been," the Arach explains. "Provoked the Quarg into attacking you, it might have."` + choice + ` "And why would that be any different this time?"` + ` "Well, I don't want to risk any of that. Sorry, but I can't help you."` + goto decline + label choice2 + ` "Come upon some valuable information, the consuls have," the Saryd responds. "A much safer, easier task it would be. Until at the , you are, permitted to discuss the details, we are not. Interested in helping us once again, are you, Captain?"` + choice + ` "Alright, if you're sure it'll be safe, I'll help you."` + accept + ` "Sorry, I don't like the sound of this."` + label decline + branch license3 + has "Heliarch License: done" + ` They are both surprised and distraught by your refusal, clearly not having expected it. They insist a bit further, but eventually give up on trying to convince you to help. Disappointed, they leave for a Heliarch office.` + decline + label license3 + ` They are both surprised and distraught by your refusal, clearly not having expected it. Their expressions then coalesce into cold, fearful gazes. They whisper briefly among themselves, then the Saryd addresses you.` + ` "Captain, insist we must. An order from the consul, it is. In our ranks now you are, so do you should as dictates the chain of command."` + ` "Lose your rank, you could, if to disobey such an order you were. For the best it is that continue aiding us and the consul, you do," the Kimek continues.` + ` "Continue, you will. Inform the consul of that we shall." The Arach says, bringing out a device and seemingly confirming you'll be heading to . Without giving you much window to protest, the three thank you for your compliance and board a Heliarch ship.` + accept + on accept + "assisting heliarchy" ++ + on complete + "assisting heliarchy" -- + fail "Rim Archaeology 5B" + on fail + "assisting heliarchy" -- + +mission "Heliarch Recon 3-B" + name "Not So Silent Scan" + description "Now that your ship is equipped with a Heliarch Scanning Module, head to the system and scan the Quarg Wardragon there." + landing + source "Ring of Wisdom" + destination "Ring of Wisdom" + waypoint "Zubeneschamali" + deadline 15 + to offer + has "Heliarch Recon 3-A: done" + not "Lunarium: Questions: done" + not "Heliarch License: done" + not "assisting lunarium" + on offer + conversation + `The Heliarch agents and engineers are waiting for you when you land, immediately getting to work on installing the Scanning Module in your ship.` + ` "Remember Captain, only borrowing, you are. Once returned, you have, take our scanner back, we will," the Saryd says.` + ` "At most until , keep it, you may. Considered theft, it will be, if any longer you take," the Arach adds.` + choice + ` "And will that time be enough?"` + ` "What exactly will I do with this scanner?"` + ` "Normally, unavailable for us low ranks, this information would be," the Kimek begins. "But, instructed us on it, Consul Aulori has, so that relay the plan to you we could. Learned, the consuls have, that guarding a nearby archaeological site in human space, a lone Quarg Wardragon is. Aware of that, were you?"` + ` You confirm it, explaining to them that you were involved in the work around the site on Zug, and were there when the Wardragon came in to protect it.` + ` "Then no trouble finding it, you should have," the Arach says. "Far from other Quarg, that ship is, so easier for you to flee, it should be, if attack you it does."` + ` "All we need, a quick scan is," the Saryd tells you. "Once scanned it, you have, come back right away, you should."` + ` You're warned not to disable or destroy the Wardragon should it attack you, as that would no doubt permanently damage your standing with the Quarg.` + ` When the engineers are done, the agents wish you good luck, and you head back inside your ship.` + accept + npc save "scan outfits" + government "Quarg" + personality heroic staying uninterested + system "Zubeneschamali" + ship "Quarg Wardragon" "Gloref Esa Kurayi" + on accept + "assisting heliarchy" ++ + outfit "Scanning Module" 1 + on complete + "assisting heliarchy" -- + "coalition jobs" ++ + "assisted heliarch" ++ + log "Scanned the Quarg Wardragon flying around the Zubeneschamali system, and delivered the scan logs to the Heliarchs." + outfit "Scanning Module" -1 + payment 690000 + conversation + `The Heliarch agents have the engineers remove their scanners from your ship immediately when you land back. They seem pleased with the results, looking at the scan logs for the first time as they hand you .` + ` "Survived, you thankfully have, Captain," the Saryd taps your arm.` + ` "Odd, it is, that attack the Captain, the Wardragon did not..." the Arach thinks out loud, looking at the scan data. "A fortunate thing, no doubt, but very odd of them."` + ` "Much more detailed, these scans are. Certain, I am, that pleased with the results, Consul Aulori will be," the Kimek tells you. "Assisted us greatly you have, Captain."` + ` They pass along a message from the consul, who thanks you for all your efforts, and asks that you seek out his agents on , should you acquire any significant information on Quarg ships or ringworlds. The Heliarchs say their goodbyes and head on their way.` + on fail + "assisting heliarchy" -- + "reputation: Heliarch" = -1000 + "reputation: Coalition" = -1000 + +mission "Heliarch Recon 3-C" + name "Not So Silent Scan" + description "Now that your ship is equipped with a Heliarch Scanning Module, head to the system and scan the Quarg Wardragon there." + landing + source "Ring of Wisdom" + destination "Ring of Wisdom" + waypoint "Zubeneschamali" + to offer + has "Heliarch Recon 3-A: done" + has "Heliarch License: done" + not "assisting lunarium" + on offer + require "Scanning Module" 1 + conversation + `The Heliarch agents are waiting for you when you land with a team of engineers. They have them perform some quick tests on your Scanning Module.` + ` "Take your time with this task, you of course can, Captain, but told us to ask you to be hasty, Consul Aulori has," the Arach says. "Unsure about how long this window of opportunity will last, all of us are."` + choice + ` "What's this 'window of opportunity' about?"` + ` "What exactly is the task?"` + ` "Normally, unavailable for us low ranks, this information would be," the Kimek begins. "But, instructed us on it, Consul Aulori has, so that relay the plan to you we could. Learned, the consuls have, that guarding a nearby archaeological site in human space, a lone Quarg Wardragon is. Aware of that, were you?"` + ` You confirm it, explaining to them that you were involved in the work around the site on Zug, and were there when the Wardragon came in to protect it.` + ` "Then no trouble finding it, you should have," the Arach says. "Far from other Quarg, that ship is, so easier for you to flee, it should be, if attack you it does."` + ` "All we need, a quick scan is," the Saryd tells you. "Once scanned it, you have, come back right away, you should."` + ` You're warned not to disable or destroy the Wardragon should it attack you, as that would no doubt permanently damage your standing with them.` + ` When the engineers are done, the agents wish you good luck, and you head back inside your ship.` + accept + npc save "scan outfits" + government "Quarg" + personality heroic staying uninterested + system "Zubeneschamali" + ship "Quarg Wardragon" "Gloref Esa Kurayi" + on accept + "assisting heliarchy" ++ + on complete + "assisting heliarchy" -- + "coalition jobs" ++ + "assisted heliarch" ++ + log "Scanned the Quarg Wardragon flying around the Zubeneschamali system, and delivered the scan logs to the Heliarchs." + payment 690000 + conversation + `The Heliarch agents seem pleased with the results, looking at the scan logs for the first time as they hand you .` + ` "Survived, you thankfully have, Captain," the Saryd taps your arm.` + ` "Odd, it is, that attack the Captain, the Wardragon did not..." the Arach thinks out loud, looking at the scan data. "A fortunate thing, no doubt, but very odd of them."` + ` "Much more detailed, these scans are. Certain, I am, that pleased with the results, Consul Aulori will be," the Kimek tells you. "Assisted us greatly you have, Captain."` + ` They pass along a message from the consul, who thanks you for all your efforts, and asks that you seek out his agents on should you acquire any significant information on the Quarg ships or ringworlds. The Heliarchs say their goodbyes and head on their way.` + on fail + "assisting heliarchy" -- + +mission "Keep Zug Wardragon" + landing + invisible + source "Ring of Wisdom" + to offer + or + has "Heliarch Recon 3-B: done" + has "Heliarch Recon 3-C: done" + npc kill + government "Quarg" + personality heroic staying uninterested + system "Zubeneschamali" + ship "Quarg Wardragon" "Gloref Esa Kurayi" + + + +mission "Heliarch Expedition 1" + name "Extraterritorial Reconnaissance" + description "Head through the wormhole in Deneb, land on the planet there, and enter the system with the broken ringworld to get data for the Heliarchy." + minor + landing + source "Ring of Wisdom" + stopover "Ruin" + waypoint "World's End" + to offer + has "Ruin: Landing: offered" + or + has "Heliarch Recon 3-B: done" + has "Heliarch Recon 3-C: done" + not "assisting lunarium" + on offer + conversation + `As you land on the , you remember that the Heliarchs have asked you to share with them any information you get on Quarg ships and ringworlds. Would you like to tell them about the destroyed ring you saw on the other side of the wormhole in Deneb?` + choice + ` (Yes.)` + ` (Not right now.)` + defer + ` (No, they don't need to know.)` + decline + ` You flag down a group of Heliarch agents who were walking by, and they salute you. "A valuable friend, you've proven to be, Captain," a Saryd of the group says. "Of assistance, how can we be?"` + choice + ` "Can you bring me to a higher-up? I have some information on ringworlds."` + ` "Is there anyone I can talk to about a broken ringworld?"` + ` The group discusses among themselves for a bit before bringing you into a restricted section of the ringworld. The inner halls of the are unlike those of any other Heliarch facility you've been to, with messy arrays of large canisters, equipment boxes, and some form of isolating texture plastered all over the walls, floor and ceiling. Most notable of all, though, is the sheer number of guards stationed here, which, if the few halls you've passed are anything to go by, might well outnumber the civilians present in the ring. "Wait here, please," the Heliarchs escorting you tell you, opening a door to something akin to a conference room. They offer you a seat on one end of a long table.` + ` Some ten minutes pass before anyone comes in, but after that many Heliarch members start filling up the room, taking their own seats at the table. When the door opens for the last of them to come in, the guard announces "Consul Aulori," to which all the Helliarchs stand up and salute, the noise of conversation giving room to hooves hitting the ground. He is an old Saryd, with gray eyes, pale hair, and a short, well-kept beard. He wears a peculiar necklace with four large gemstones hanging from it. He sits opposite to you, the other Heliarchs sitting back down when he does.` + ` "Forgive me for the delay you must, colleagues," he says to the other Heliarchs. "Caught up in my evening prayers, I was." He examines the room for a while, briefly glancing at each of the Heliarchs, until his eyes settle on yours. "Told, I was, that some valuable information for us, you have, Captain ."` + choice + ` "I know of a system where a broken Quarg ringworld is. I figured I should tell you."` + ` "Would I be paid if I told you about a place where you can find a broken Quarg ringworld?"` + ` He squints his eyes, then speaks, "Repeat that, could you?" You say it again, and he once more looks puzzled. He gestures to a Heliarch beside him, then takes off the translation box from around his neck, swapping it for theirs.` + ` He asks again, and you repeat it again. "An... incomplete ringworld, is it?"` + choice + ` "No, it is definitely broken. There's tons of debris littering the system, and no sign of life in it."` + goto how + ` "I didn't say incomplete, I said broken. I know the difference."` + ` The other Heliarchs freeze at your tone, and all keep staring at you, as if afraid to look toward Aulori for his reaction.` + branch license + has "Heliarch License: done" + ` He stares intently at you for a few seconds, then at the agents guarding the entry door. They open it, and call for some more Heliarchs. They come in and position themselves to your sides, and behind you. "Afraid I am that once again, failed to understand it I have, . Now, one final time, repeat it, would you?" Reading the room, you carefully repeat the information, taking care to not come off as impolite again.` + goto how + label license + ` "Do you now?" He begins. "And hope might I that get to explaining the difference, today still you shall? Require my attention, important work does, so if done being insubordinate, you are, suggest I do that enlighten us all on the difference, you do. Then, decide on whether or not to drop the symbol you seem so eager to disrespect into this system's sun, I will," he says, gesturing to your head and the Heliarch circlet you bear. You carefully repeat the information, taking care to not come off as impolite again.` + label how + ` He leans forward lightly, staring at you. Looking around the table, the other Heliarchs are engaged in a what appears to be a quiet, heated discussion, gesticulating and occasionally tilting the table with their body weight amidst whispers.` + ` "How?" Aulori asks, eyes still locked on you. You explain as best as you can about where Deneb is, and what you saw on the other side of the wormhole. When you get to explaining how the system was discovered, the Heliarchs seem to collectively gasp when you first utter the word "Pug." You pause, and many go back to the quiet, whispering discussions, some laughing it off, and others staying silent.` + ` One Saryd moves as if getting up, but sits back down once Aulori stands, firmly pushing one hand against the table. Conversation around the table dies out, as he stares you down for a long minute. "Leave us for a moment, would you?" he finally says, having some guards bring you outside the room.` + ` The whispering discussion from earlier now becomes a much louder debate, though the door muffles it all enough that no translator outside the room manages to pick up what is being said. After half an hour, most voices are cut as someone rapidly hits the table, roughly, yelling something in what you think is the Saryd language.` + ` It all grows quiet for a while, and then the door opens again. Some of the other Heliarchs leave in a haste, and you're asked to head inside again. Consul Aulori is standing up still, giving you a nod as you come in.` + ` "Adjusted, your ship's sensors will be. Better suited, they will become, for detailed tridimensional projections," he says. He has a pair of Heliarch guards bring you back to your ship, where some engineers go inside your ship and spend some time tinkering with it. After they're done, one of the Heliarchs that was in the room approaches you, telling you they need you to land on the planet you described, , and to travel to to scan the ringworld. He wishes you luck, then hurries back to the restricted areas.` + accept + on accept + "assisting heliarchy" ++ + on stopover + dialog `You fly around the mysterious world for a while, until your sensors beep in an odd way, in what you guess is the signal that the Heliarch's modifications are done doing their read on the planet.` + on enter "World's End" + dialog `You fire up your ship's sensors, letting it collect the data the Heliarch want for hours on end. Eventually you hear a series of beeps in a dull rhythm, and look to see that their performance is back to normal.` + on complete + "assisting heliarchy" -- + event "heliarch expedition break 1" 22 34 + payment 3000000 + conversation + `You're met by a dozen Heliarch guards when you land, and they quickly escort you to the ring's restricted sections after you transmit the scan logs. Aulori, as well as several other Heliarchs from the meeting you had last time, are waiting for you in a large room, where a holographic model of the broken ringworld starts being projected for all to see.` + ` "Skeptical of what you told us, we all were, Captain," Aulori says, gesturing for you to accompany him as he walks around the projection. "Claimed that insane, you were, some of those here did." He looks down at a Kimek briefly. "Or that wasting our time with jokes, you were." A Saryd steps back as you two continue, making way for the consul. "Assured me, some of them had, that wholly impossible, it was, to break a ring." He stomps down his hooves close to an Arach and stops where the projection shows signs of greater damage. A large, cut off chunk of the ring is in full display, surrounded by clouds of floating debris. "But not insane, neither a joker, you are. And impossible, this clearly is not. Invaluable information, what you've brought us is, Captain . Investigate the site thoroughly, we must, so ask for your assistance again, we will, when a suitable crew for it, we have found."` + ` A Saryd rushes closer once Aulori says that, "Sir, against sending off anyone, the council is-".` + ` "Agree, the council will," Aulori cuts him off, still looking at the projection.` + ` The Saryd thinks for a while, then continues, "Take years, it would, to find and train someone willing to become an inspector. A dangerous task it-"` + branch "expeditions past" + has "Coalition: Expeditions Past 10: done" + ` "And wait around for years, we will not," Aulori interrupts him again. "On borrowed time, we already are. Either find someone willing, and find them fast, you should, or find another line of work, you will," he looks at the Saryd, then at the door.` + goto end + label "expeditions past" + ` "Dangerous?" Aulori scoffs, interrupting the Heliarch once again. "Plagued by the council's cowardice, your mind is. Make it back, Arbiter Sedlitaris did. Alive and well she is, and helped by this very human in her expedition, she was," he says as he nods your way. "Living proof she is that unfounded, the council's archaic paranoia is. Now, find someone willing quickly, you must, before learn of this and meddle with our work again, they do."` + label end + ` The Heliarch leaves the room, and Aulori hands you a chip worth . He has you escorted out of the room and back to your ship, promising to have more work for you soon.` + on fail + "assisting heliarchy" -- + +event "heliarch expedition break 1" + +mission "Heliarch Expedition 2" + name "Contacted" + description "Head to where the Heliarchs will tell you about their future plans for investigating the broken Quarg ringworld." + landing + source + government "Coalition" + destination "Ring of Wisdom" + to offer + has "event: heliarch expedition break 1" + not "assisting lunarium" + on offer + conversation + `A Heliarch delegation contacts you as you land on . "Greetings, Captain. Sent by Consul Aulori, we were," one of them says. "Requested, your presence is, at the ."` + ` They tell you they weren't informed as to what the consul needs of you, but ask that you head to the when possible.` + accept + on accept + "assisting heliarchy" ++ + on complete + "assisting heliarchy" -- + on fail + "assisting heliarchy" -- + +mission "Heliarch Expedition 3" + name "Extraterritorial Venture" + description "Escort a Heliarch ship to to pick up supplies, then guide them through human space and through the wormhole in Deneb so that they can further investigate the broken ringworld." + landing + source "Ring of Wisdom" + destination "Ablub's Invention" + to offer + has "Heliarch Expedition 2: done" + not "assisting lunarium" + on offer + conversation + `When you arrive, you find the landing bays empty of ships save for one Heliarch Punisher close to your own ship. What must be hundreds of armed Heliarchs patrol the area. Consul Aulori meets you as you're coming down the ramp. "Carefully analyzing your findings, we have been, Captain. Much insight, they have brought us," he says. "Only so much can be gained from second hand observation, unfortunately. For that reason, escort one of our own ships there, you must."` + ` He points to the Punisher close to your ship, and you see its crew loading dozens of cargo containers into it. He tells you the ship will follow you to the broken ring, and set up a base on Ruin so that they may study the debris closely for a longer period.` + choice + ` "Of course. I'll show them the way."` + goto accept + ` "What do you expect to find there? Spare parts?"` + goto parts + ` "Well, I think they're probably good to get there on their own. Sorry, but I'm not interested."` + label decline + branch license + has "Heliarch License: done" + ` He grimaces lightly. "Afraid I am, Captain, that an option, that is not. Very unfamiliar with navigating human space as is, we are, and in a truly exceptional location, this ring is. Remind you, I must, that bring us to our attention in the first place, you did, abandon this work now, you cannot. On behalf of our Coalition, insist I must that aid us in this effort, you do." Pausing for just a second, he continues in a lower tone. "Very... unwelcoming to you, the Coalition would become, if drop this now, you did. A few last scanners, the scientists have requested, so after quick stop at , to the ringworld, you will bring them."` + goto end + label license + ` "Asking for your cooperation, I was not. Orders, these are." He looks at you sternly. "Escort the ship there, you will, or find our Coalition much less hospitable to you, you shall. A few last scanners, the scientists have requested, so after a quick stop at , bring them you will to the broken ring."` + goto end + label parts + ` "Too advanced, the composites that make up this and all other ringworlds are. Replicate them, we cannot. Not yet. If how this one was destroyed, we learn, maybe how to construct parts of our own, we could. If not, then perhaps find we may what means used to damage it were, and so ways of our own to damage the rings, we may find. Managed to do so before, we haven't."` + choice + ` "Alright, I'll show them the way."` + goto accept + ` "Well, I'm no megastructure engineer, so I don't see the need to go there myself. They can find their own way."` + goto decline + label accept + ` "Excellent. Equipped with a jump drive, the ship is, and to reach this 'Ruin' planet, enough fuel, it has. A few last scanners, the scientists have requested, so after quick stop at , to the ringworld, you may bring them."` + label end + ` He introduces you to the Punisher's crew, and the dozens of scientists and engineers who are preparing to board the warship, ready to accompany you. He wishes you all good luck and leaves, escorted by a few dozen guards. Once the consul is out of sight, some among the Punisher's crew start fidgeting. Their Captain, an Arach, has them ready the ship to follow yours, and they prepare to depart.` + accept + npc accompany save + personality escort heroic opportunistic + government "Heliarch" + ship "Heliarch Punisher (Fuel)" "Eldest Inspector" + on accept + "assisting heliarchy" ++ + on complete + "assisting heliarchy" -- + on fail + "assisting heliarchy" -- + "reputation: Heliarch" = -1000 + "reputation: Coalition" = -1000 + +mission "Heliarch Expedition 4" + name "Extraterritorial Venture" + description "Escort a Heliarch ship through human space and into the wormhole in Deneb, so that they can further investigate the broken ringworld." + landing + source "Ablub's Invention" + destination "Ruin" + to offer + has "Heliarch Expedition 3: done" + not "assisting lunarium" + on offer + conversation + `The Punisher's captain has some equipment loaded onto the ship, and the mechanics do one last maintenance check on the ship before it leaves Coalition space. The captain tells you they will follow your lead when you launch. Every other minute, he looks nervously at the sky.` + accept + npc accompany save + personality escort heroic opportunistic + government "Heliarch" + ship "Heliarch Punisher (Fuel)" "Eldest Inspector" + on accept + "assisting heliarchy" ++ + on visit + dialog `You've reached but left the Heliarch ship behind. Best depart and wait for them to arrive.` + on complete + "assisting heliarchy" -- + event "heliarch expedition break 2" 275 496 + conversation + `The Punisher's captain had you follow his ship all over the planet after they refueled in 's odd facilities. Apparently they want an isolated place to set up their camp here, somewhere they wouldn't be easily spotted.` + ` They settle for a cavern on the way up a mountain, overlooking a foggy valley. A river is faintly visible through the dense fog. As they unload the cargo and start setting up, the captain comes to you. He is a young Arach, and his previous demeanor of taking worried glances at the sky has grown even more intense here, as he struggles to so much as look at you as he begins talking. "In the name of the crew, thank you I must for guiding us, Captain ." He finally settles on a compromise: one pair of eyes fixated on you, and the rest scouring the skies. "Stocked with enough supplies to last just under a year, the ship is, but if fruitful our efforts to establish some manner of farm we are, remain for much longer, we will. The consul's orders, those are. When about to head back into the Coalition we are, send I will a message to you, notifying that our work here is finished."` + choice + ` "Understood. Until then, good luck on your research here."` + goto end + ` "Is something wrong?"` + ` He goes back to looking to the sky with all eyes. "Forbidden it is, to leave the Coalition. To both civilians and Heliarchs alike. Far too dangerous, the outside has proven, and not deemed worthy to risk our jump drives like this, it has been. Worried I am about the ship's - the crew's - safety."` + branch "expeditions past" + has "Coalition: Expeditions Past 10: done" + choice + ` "Why is that forbidden?"` + ` "Don't worry, I'm sure you'll be alright. Good luck on your research."` + goto end + ` "Fared poorly, previous Heliarch expeditions to the outside have, besides the very first." He breaks watch of the sky and focuses entirely on you. "Understand I do the importance of this mission, and that counting on us the consul is. Only... sometimes, wonder I do if worth risking us all, the mission is."` + goto end + label "expeditions past" + choice + ` "It's still forbidden? But Sedlitaris returned just fine, I flew her through human space and back with no issues."` + ` "Don't worry, I'm sure you'll be alright. Good luck on your research."` + goto end + ` "True that is, but repealed, the measure that prohibits everyone leaving was not. Spoken with Arbiter Sedlitaris myself I did, and admit I must that much more at ease I now am. But, still, remain vigilant for the crew's sake, I must. Changed their opinions like me, not many of them have."` + label end + ` He thanks you again for your help, and with a salute bids you farewell, heading to help the Punisher's crew establish their base of operations inside the caverns. You get back in your ship and fly back to the empty docks of . Now it's a matter of waiting for the Heliarch teams here to do their job and return to the Coalition.` + on fail + "assisting heliarchy" -- + "reputation: Heliarch" = -1000 + "reputation: Coalition" = -1000 + +event "heliarch expedition break 2" + +mission "Heliarch Expedition 5" + name "Meet With Aulori" + description "Head to , where Consul Aulori wishes to speak with you about the Heliarch's findings on the destroyed ringworld." + landing + source + near "Sol" 1 100 + destination "Ring of Wisdom" + to offer + has "event: heliarch expedition break 2" + not "assisting lunarium" + on offer + conversation + `When you've touched down on the landing pads, you see you've received a message from the Heliarchs you brought to Ruin, the mysterious world on the other side of the wormhole the Pug left in Deneb. "Captain , finished what research we could do on the broken ring, we have. About to jump back into the Coalition, we are. Imagine I do that like to speak with you after receiving our report, Consul Aulori will, so head you should to the as soon as possible."` + accept + on complete + "assisting heliarchy" ++ + on complete + "assisting heliarchy" -- + "assisted heliarch" ++ + payment 20000000 + conversation + `To your surprise, your arrival to the sees no reception party waiting for you, or so much as a payment message from Aulori. You leave your ship, and mention to the nearest Heliarch that you were asked to see Consul Aulori here. They brush you off, saying there has been no such request by the consul. You try and explain that the Heliarch leading the expedition to Ruin mentioned you should come, but they again dismiss you, seemingly unaware of what you're talking about and going on about their business.` + ` You try a few more times to no avail, and decide to head back to your ship for the time being. It's not until the day is about to turn that a pair of Heliarch guards come to your ship, asking that you step outside. You comply, and they tell you to follow, "for ready to see you, the consul is."` + ` Once again you're led through the inscrutable, guard-crowded halls of the , being brought to a long corridor with dozens of closed doors. The one at the very end is apparently your goal. From there, however, two more guards arrive, and they explain to those escorting you that "received word, the Ring of Friendship has." They apologize to you, saying Aulori might be busy for some time more. You are brought to just outside the room, so that you're received as soon as his "meeting" ends.` + ` From another room, a Heliarch arbiter waves for the guards waiting with you, and passes some other task to them. Three of them leave, and you're left with the one who fetched you from your ship, a Saryd. Despite the door to Aulori's room being locked, you two can still clearly hear intense shouting from within - not just his, but from many others who you assume to be consuls as well. After a particularly long - and heated - debate segment from what seems to be Aulori's voice, the Heliarch guard waiting with you declares they'll be coming back soon and hastily moves away, turning the corner.` + branch license + has "Heliarch License: done" + label waited + ` A few more minutes pass, and you hear some more of the heated discussion from within. After a while it stops and the door opens, with Aulori on the other side, alone. "I see that arrived you have, Captain. Forgive me for the wait you must. Just going over the findings of the expedition, some more consuls and I were."` + choice + ` "It's alright, I didn't mind the wait."` + ` "I was just about to head back to my ship. It seemed your meeting was never going to end."` + label beckon + ` He beckons you to the middle of the room, still lit up only by the many monitors used for the video calls with other consuls. He moves to a small desk near the wall with the monitors, and picks up in chips, handing them to you. "Find what they could with what time they had, the expedition did. Only so much time to experiment there is, when a single ship - a warship - the fleet had. Mistake me not, greatly pleased with the preliminary results, I so far have been, but frustrating it is that limited we are by such time and resource constraints." He sighs. "Like I would for a larger, more substantial expedition to that ring. But, as it stands, seem it does that wait I must for the council's approval, before taking any further action."` + ` He moves to pick up a small box on the other side of the room, sitting atop a table surrounded by boards with scribbled notes and mock-up schematics. He brings the box to you and opens it, revealing inside a very small piece of something clearly metallic in nature, but with some odd, unknown property to it you can't identify. "One billion."` + choice + ` "What?"` + ` "Is this that expensive?"` + ` "Over the course of the War of Independence, the amount of kilotons of fissile material used in projectiles that bombarded this ring. One billion. For this ring alone. They left not one dent. Not one." He picks up the piece. "One of the smaller shards of the shattered ring that recover, the expedition could." He gazes at it for a few seconds, before putting it back in the box and returning it to the table. "In my position, to learn of the Quarg, learn as a Quarg, I have had to. To think like them, I must, if to attempt to breach the many blockades they have placed to impede others from learning from their technology, I am. Outnumbered by them, we are. Inferior we remain in our technology. If a means to close the gap, I do not find, then perhaps learning what monstrous weapon could break their rings, learning how to create such a weapon, the only hope for deterring a Quarg offensive is."` + ` Aulori pauses for nearly a minute, looking at the monitors. "It matters not what nonsense other consuls may tell you, Captain. Know this: give up on their rings the Quarg never will. With your help, and the efforts of the expedition, prepared yet for them, we may become."` + ` He thanks you again, and gestures for the door. Many guards arrive soon after you two leave, and you're accompanied back to your ship. As you leave, Aulori heads deeper into the ring's hallways to further study the report about the destroyed ringworld.` + accept + label license + ` The discussion inside continues, with no sign of dying down. Judging from the relatively quick journey from your ship to here, you figure you're not very deep into the ring's restricted sections, so your circlet's neural interface might have permission to open the door.` + choice + ` (Try to open it.)` + ` (Just wait outside.)` + goto waited + ` As you thought, the door responds to your command. The room is dark, with many lab instruments, computers, and countless boards with notes all over them being lit up solely by the various monitors on one end of the room. Aulori is there, alone, speaking with several other consuls via video call.` + branch "knows iekie" + has "Heliarch Investigation 2: done" + ` A Kimek consul occupies the most prominent monitor, and seems to be leading the discussion at the moment. "Exempt you are not from our laws and protocol. Your transgression aside, call I must for the others involved to be deposed at once. The Punisher's captain, and crew as well."` + goto response + label "knows iekie" + ` On the most prominent monitor, you recognize Consul Iekie, the Kimek Heliarch who you aided in investigating various Coalition worlds for suspicious activity. She seems to be leading the discussion at the moment. "Exempt you are not from our laws and protocol. Your transgression aside, call I must for the others involved to be deposed at once. The Punisher's captain, and crew as well."` + label response + ` "Come to pass that will not. Given they were those orders by me. Serving the will of a superior, they were," Aulori replies. "Surely encourage the lower ranks to disobey, you would not."` + ` "So claim you do full responsibility over this clear transgression?"` + ` "Claim I do that acting on my behalf and on my orders, my subordinates were. Committed, no transgressions were. Now, if to talk about taking responsibility for the actions of those working under us, we are-"` + ` "Weasel out of the matter at hand you will not," she interrupts him. "Aware you of course were that forbidden, further expeditions to the outside are, and to not have alerted the council of it, broken law twice-fold, you have."` + ` The other consuls lash out some more at Aulori after she's done, and he waits for them to finish. "Made chief researcher I was on Quarg artifacts and ringworlds, centuries ago. Continued to study and deepen our knowledge on the subject, I since then have, and acted against the interest of uncovering the secrets of the Quarg, I not once have. Saved us centuries - if not millennia - of research, this expedition has. Now, look deeper into the findings myself, I must. To further our fight, and so that a fighting chance we may have. Believe, I do, that likewise, much more productive activities you all have, where concerned the well-being and stability of our Coalition is?"` + ` The others deliberate for a few minutes, before settling on an end to the discussion. "Once done analyzing the findings you are, report them at once you must, before the full council on the Ring of Friendship. Decide then, we shall, whether overlooked, these transgressions will be." Aulori agrees, and the call ends.` + ` He turns to leave, and you see the quick surprise on his face as he spots you, clearly too immersed in the discussion before to have noticed you watching. "Well, clear it is that arrived you have. Curious, were we, ?"` + choice + ` "I was only here for the end."` + ` "They didn't seem too happy with you."` + ` He grunts. "Cowards, the lot of them. True, it is, that something of a gamble I took, risking one of our jump drives beyond an unknown wormhole. But, necessary it was. Necessary for our understanding. For our survival."` + goto beckon + on fail + "assisting heliarchy" -- + + + +mission "Heliarch Containment 1" + name "Transport Heliarch Soldiers" + description "Bring these Heliarch soldiers, along with , to by so they can combat a terrorist group." + minor + deadline + passengers 33 + cargo "military supplies" 25 + to offer + has "license: Coalition" + has "main plot completed" + not "Lunarium: Questions: done" + not "assisting lunarium" + "coalition jobs" >= 60 + random > 25 + source + near "3 Spring Rising" 2 5 + destination "Fourth Shadow" + on offer + conversation + `The spaceport on is in quite a lot of turmoil, as dozens of Heliarch agents march around at an accelerated pace. Some prepare to board their own ships, and others speak with some of the captains here. It's no different with you, as a Kimek agent approaches you after noticing you watching.` + ` "Much assistance, we require, Captain," they say. "A transport for , we need. For of us, and . Of great urgency, this task is."` + ` Without you even noticing it, an Arach agent has also gotten close, and after the Kimek is done speaking, says, "Attacking several factory districts and government buildings, the terrorists are, so at once we must go. , you will receive, if by we arrive."` + choice + ` "I'd be glad to help. Bring your colleagues and the cargo to my ship."` + goto accept + ` "Terrorists? Can't the Heliarchs on that planet take care of it themselves?"` + ` "You'll have to find someone else. I'm not heading there right now."` + goto decline + ` "As I said, hit many government buildings, they have," the Arach explains. "Damaged several garrisons, the attacks did, and crippled the local agents' immediate response capabilities, they have. Not to mention, a very populous and busy world, is, so a more difficult task, locating and arresting the criminals is."` + ` "To keep the peace, our job is," the Kimek adds. "If to assist in achieving that goal, you wish, transport us there, you should."` + choice + ` "Okay. Bring your colleagues and the cargo to my ship."` + ` "You'll have to find someone else. I'm not heading there right now."` + goto decline + label accept + ` They thank you for your cooperation, and use a device to call the rest of the agents to your ship. After securing the last of their cargo in your hold, you show them to their bunks and head to the cockpit.` + accept + label decline + branch license + has "Heliarch License: done" + ` They're clearly disappointed, but thank you for your time anyway, before moving on to the next merchant captain and try to recruit their assistance.` + decline + label license + ` They're confused by your refusal. "Willing are you not to help your fellow troops? A danger to the civilians of the area, the criminals are."` + ` "A shame that is," the Arach backs away, disapprovingly. "Find others to help, we will."` + ` The two leave, moving to nearby merchant captains to try and recruit their assistance.` + decline + on accept + "assisting heliarchy" ++ + on visit + dialog phrase "generic cargo and passenger on visit" + on complete + "assisting heliarchy" -- + payment 420000 + dialog `You're told to open your hatch as soon as you land, and when you do, the Heliarch agents storm out of your ship while a separate group that was waiting for you unloads the cargo. A few seconds later you see that have been added to your account.` + on fail + "assisting heliarchy" -- + conversation + `Having failed to deliver the Heliarch agents on time, they leave your ship with sour looks on their faces. You're contacted by the Heliarchs who had enlisted your help.` + ` "Thanks to your lack of discipline, lost we have a prime opportunity to capture dangerous criminals. Unreliable you have proven, ."` + ` They sign off. It seems you'll not be getting more offers to help the Heliarchs with this particular type of work again.` + +mission "Heliarch Containment 2" + name "Pick Up Injured Soldiers" + description "Land on , to pick up the Heliarch soldiers in need of medical attention, and transport them to by ." + deadline + passengers 21 + to offer + has "Heliarch Containment 1: done" + not "Lunarium: Questions: done" + not "assisting lunarium" + random > 35 + source + near "Bloptab" 1 3 + stopover "Delve of Bloptab" + destination "Ahr" + on offer + conversation + `You're stopped by a group of Heliarch agents as you enter the spaceport, most of them Arachi.` + ` "Injured, many colleagues of ours have been. On , they are," one of them says. "Dealing with containing criminal operations, they were, and surprised them with an attack amidst civilians, the rogues did. Given the circumstances, dangerous for them, it might be, if treated within hospitals there, they are."` + ` ", in total, you would transport. To by , they must be brought," the one Saryd of the group adds.` + choice + ` "Don't worry, I'll make sure they get help quickly."` + goto accept + ` "Can't you pick them up in your own ships?"` + goto ships + ` "Tragic, but I'm not interested. Sorry."` + decline + label ships + ` The Saryd shakes her head. "Fled right after the attack, many of the outlaws have. On high alert, local fleets are, to attempt to intercept their ships. Sent a few available ships as aid, we of course have, but still, use more help, we could."` + ` "Enlisting the aid of other captains, we have been," another Arach from the group replies. "Heading there, seven other ships already are. As much help as possible, in need of we are."` + choice + ` "I see. Alright, I'll head there to pick them up."` + ` "Sorry, but it sounds like you've got a lot of help already, and I'm busy with something else."` + goto decline + label accept + ` They thank you, and urge you to move to with haste. Spotting a convoy of Kimek ships landing nearby, the group moves to new potential captains to help with the efforts.` + accept + label decline + branch license + has "Heliarch License: done" + ` The Saryd frowns. "A shame that is, use we could all the help available." The group leaves, moving to ask the next merchant captain for help.` + decline + label license + ` The group is clearly apalled. "Willing are you not to help your fellow troops?!" One of the Arachi exclaims.` + ` "Disgraceful." The Saryd shakes her head. "If injured were you, would you not from your fellow Heliarchs help expect?"` + ` The group stomps away, trying to recruit more civilian captains to help.` + decline + on accept + "assisting heliarchy" ++ + on stopover + dialog `You notice dozens of Heliarch warships rapidly surveying the planet. When you land, you see more of the ships that came to help pick up the injured agents. Hundreds of bandaged Saryds, Kimek, and Arachi are being brought to the ships that keep arriving and departing. You pick up your passengers and prepare to head to the medical center on .` + on visit + dialog phrase "generic missing stopover or passengers" + on complete + "assisting heliarchy" -- + payment 360000 + conversation + `You help the medical workers get the agents on transport vehicles, and one of the Arach Heliarchs supervising the operation hands you .` + ` "Avoided, many casualties were, thanks to your assistance in our joint efforts, Captain," she says. "Of this cooperativeness, inform my superiors, I shall."` + choice + ` "Thank you, but I didn't really do anything too impressive. It was just a simple transport mission."` + ` "There were a lot of injured people there. What happened there with the outlaws, exactly?"` + goto accident + ` "Nonsense. Looking for 'impressive' actions, we are not, when asking for assistance we are. Much more valued, your continuous assistance and cooperation is. The key to our Coalition's success, such assistance is."` + goto end + label accident + ` "A terrorist attack, it was. The valuable resources and equipment stockpiled there, they sought. Thanks to the agents' efforts though, robbed, the warehouses were not," she says, pointing to the injured Heliarchs being moved from your ship and into the land vehicles.` + label end + ` She bids you farewell and goes back to making sure the injured agents find their way to hospitals.` + accept + on fail + "assisting heliarchy" -- + conversation + `Having failed to pick up and deliver the injured Heliarch agents to the healthcare facilities on time, some have succumbed to their wounds, and those who are still alive leave your ship while angrily throwing insults and complaints your way. You're contacted by the Heliarchs who had enlisted your help.` + ` "Unbelievable. Cost us the lives of valuable soldiers, your lack of discipline has. Unreliable and apathetic to the woes of our troops you have proven, ."` + ` They sign off. It seems you'll not be getting more offers to help the Heliarchs with this particular type of work again.` + +mission "Heliarch Containment 3" + name "Informational Medicine" + description "While picking up from , let loose the spy bots the Heliarchs gave you to act as surveillance for the planet." + cargo "medication" 15 + to offer + has "Heliarch Containment 2: done" + not "Lunarium: Questions: done" + not "assisting lunarium" + source "Ring of Power" + stopover "Secret Sky" + on offer + conversation + branch license + has "Heliarch License: done" + `Three Heliarch officers approach you as you're walking around the spaceport. "Greetings, Captain . Interested, would you be, in accompanying us? A proposition, we have," the Saryd says.` + choice + ` "What's it about?"` + ` "Sure, lead the way."` + goto way + ` "Sorry, not up for taking a stroll right now."` + decline + ` "Inform you of that, we cannot," the Kimek says. "Not until accepted our offer, you have."` + choice + ` "Fine. Bring me to somewhere you can tell me."` + ` "That seems a bit sketchy, I'll pass."` + decline + label license + `Three Heliarch officers approach you as you're walking around the spaceport. They salute you, and the Saryd speaks. "Greetings, Captain . Sent by Consul Plortub, we were."` + ` "A mission for you, he has, but to discuss it in private, he wishes to." The Kimek explains. "Follow us, would you?"` + label way + ` After a few dozen twists and turns through the restricted sections of the ring, they bring you to a room where an Arach is waiting, alongside a few other Heliarchs who are discussing something while pointing at a map of the Coalition projected over the table.` + ` "Ready to work with us, are you, Captain?" the Arach asks. "The one who asked for you, I am. Call me Consul Plortub, you may."` + choice + ` " . Pleasure to meet you."` + ` "What job did you have for me?"` + ` "In need of one such as you, we are. Anonymous reports, we have received, from loyal patriots and colleagues alike. On , a Saryd world, terrible activity may be brewing. Rising in activity there, outlaw groups are, we fear," he says. "Your destination, that is."` + ` A couple small boxes are brought inside and set on the table. Upon opening them, Plortub shows you they contain several small drones - drones very similar to those employed by the hull repair modules used in Coalition ships.` + ` "A union of technologies, it is. Of the scanning module, the incredible surveillance capabilities are. Of the repair drones, the versatile mobility and durable shells are." He explains to you that you're to head to to pick up produced on the planet, but as you're coming in for a landing, you are to jettison the crates with the drones so that they may act as spybots. "Inconspicuous, you must be. Appear to be a simple, regular job, this must. Back to , you must return, after completed this task, you have. Readily available then, your payment will be. Suffice, will, surely."` + ` He wishes you good luck, and the trio from earlier escorts you back to your ship.` + accept + on accept + "assisting heliarchy" ++ + on stopover + dialog `As instructed, you release the drones as you come in for a landing. Judging by the normal conditions of the spaceport, no one seems to have noticed anything as you pick up the cargo.` + on complete + "assisting heliarchy" -- + payment 330000 + conversation + `Landing back on , you're met by a squad of armed Heliarchs, who are escorting Consul Plortub. He hands you your payment of with an approving nod.` + ` "Aided us once more, you have, Captain. To further work with you, I look forward. Search for one of my subordinates in the local spaceport anytime, you should. More work for you soon, I might have." He performs a brief salute, and leaves for some other section of the ring.` + on fail + "assisting heliarchy" -- + +mission "Heliarch Containment 4-A" + name "Undercover Transports" + description "Escort three Kimek Spires full of Heliarch agents to , where they hope the use of civilian ships will give them the element of surprise." + to offer + has "event: plasma turret available" + has "Heliarch Containment 2: done" + has "Heliarch Containment 3: done" + not "Lunarium: Questions: done" + not "assisting lunarium" + source "Ring of Power" + destination "Remote Blue" + on offer + conversation + `You're stopped by one of the many armed Heliarchs in the spaceport, and are asked to follow him into the restricted sections. You comply and are led through the corridors until you're brought before Consul Plortub, in a smaller room than last time. Three Kimek Heliarchs are with him.` + ` "Ask for your assistance, once again, I must, Captain ," he begins. "Long been a difficult world for the Heliarchy, has. Admit I must, that known and, to my shame, ignored, lawless behavior there has been. Your continued support, we hope you'll once more provide, Captain."` + choice + ` "What do you have in mind?"` + goto plan + ` "I'm not really comfortable in helping with these. Can you let me go?"` + branch license + has "Heliarch License: done" + ` He perks his head up a bit, then mumbles something in his own language, momentarily turning off the translator. He gives in, and has someone bring you back to your ship in a quick march.` + decline + label license + ` He stares at you for a few seconds, almost like a statue. "Afraid I am that orders, these are. Received them directly from the Ring of Friendship, from Consul Iekie, I have. A great asset for this task, you would be, Captain, so insist upon your involvement, I must."` + label plan + ` He introduces you to the three Kimek, and goes to explain the plan. "Granted access to our civilian ships, you have been. Three new Kimek Spires, you have very recently bought. Many passengers to , in them you are carrying. A very lucrative job, it is." He pauses, and gives the Kimek permission to head out. "Pose as civilians, working in your ships, they will. Armed and ready to investigate thoroughly, the soldiers in those Spires are. Instructed to follow your ship there, these three were."` + ` Plortub wishes you all good luck, and you're escorted back to your ship. You see the three aforementioned Kimek Spires parked near the , and one of the Kimek Heliarchs hails you, saying they're ready to depart when you are.` + accept + npc accompany save + personality escort heroic opportunistic + government "Coalition" + ship "Kimek Spire" "Kiry Paichee" + ship "Kimek Spire" "Achipa Kyrri" + ship "Kimek Spire" "Pakee Pikary" + on accept + "assisting heliarchy" ++ + on visit + dialog `You've reached , but the Heliarch transports haven't arrived yet! Best depart and wait for them to get here.` + on complete + "assisting heliarchy" -- + on fail + "assisting heliarchy" -- + +mission "Heliarch Containment 4-B" + name "Meet with Plortub" + description "Collect your payment for escorting the Heliarch transports." + landing + to offer + has "Heliarch Containment 4-A: done" + not "Lunarium: Questions: done" + not "assisting lunarium" + source "Remote Blue" + destination "Station Cian" + on offer + conversation + `Hundreds of Heliarch agents pour out of the three Kimek transports, rushing in groups to separate parts of the city. They march in unison, weapons in hand. From the reactions of the locals, it's clear they were neither expecting such a thing, nor are they happy with the agents going about the city in that manner.` + ` When the last of the Heliarchs leave the transports, one of the Kimek captains inform you that you should now head to to meet with Consul Plortub collect your payment of , and to "avoid getting caught in any potential retaliation."` + accept + on accept + "assisting heliarchy" ++ + on complete + "assisting heliarchy" -- + payment 495000 + conversation + `You land in the station to find that have been transferred to you. Along with the credits comes a transmission from Plortub. "For my absence, forgive me you must, Captain. Hit Fourth Shadow again, criminals have, so organizing some ships from within the Ring of Power, I am."` + ` He goes on to explain that the attack was quite a large one, and much of the fleet stationed here was sent there to help contain it. What remained is helping with the operation, so the station is fairly devoid of a military presence at the moment. "A troubled week, this will be, but bother you with that, I will not. Very useful to us your support has been, Captain."` + on fail + "assisting heliarchy" -- + +mission "Heliarch Containment 5" + name "Stop The Fleeing Ships" + description "Defeat the criminal ships that are attempting to flee. You must disable and board their ships in order to help the Heliarchs find the source of their weapons." + landing + to offer + has "Heliarch Containment 4-B: done" + not "Lunarium: Questions: done" + not "assisting lunarium" + source "Station Cian" + on offer + "reputation: Lunarium" = -1000 + event "lunarium fleeing rb" + conversation + `After the transmission with Plortub ends, the station is awfully quiet for a few hours. You head outside your ship to see if you can find something interesting to do, but you don't find anything particularly eye-catching, as the station holds few shops. You move to the job board, but find it completely empty. You also notice that the market's trade values are not updating, and any news system is non-functional.` + ` Suddenly, some of the few Heliarchs still stationed here rush past you heading for an office. They quickly reemerge and approach you.` + ` "Captain! Helped us, you have, yes? Aiding in the Remote Blue operation?" You nod. "Think you trustworthy, the consul does, and in dire need of a combat-ready ship, we are. Aid us, you must!"` + choice + ` "What's going on?"` + ` "What do you mean combat-ready? Are we being attacked?"` + ` They explain that it's not simply the station's mercantile and news systems that haven't been functioning properly - they haven't been able to contact the group on Remote Blue, nor the fleet that left for Fourth Shadow, nor get in any sort of contact with anywhere else in the Coalition.` + ` "Only readings of the local systems, we can get, and alerted us, they have, of incoming ships! Armed, civilian ships! Criminals, no doubt, and fleeing Remote Blue, they are!"` + ` You can't say much before they've practically pushed you back into your ship. They promise you'll be greatly compensated for this, and ask that you only disable the ships so you can board and check for hostages, or possibly allow for capture and questioning of the outlaws.` + launch + npc board + personality timid plunders entering target + government "Lunarium" + ship "Saryd Sojourner (Bombardments)" "Hodoviah" + conversation + `As you suspected from when you were fighting it, this ship is equipped with Heliarch weaponry. Unfortunately you can neither verify the equipment it is using nor check for hostages, as a self destruction sequence starts when you're about to enter it.` + launch + npc board + personality timid plunders entering target + government "Lunarium" + ship "Arach Spindle (Plasma)" "Aramitess" + conversation + `This ship is equipped with Plasma Turrets from human space, the very weapons the Free Worlds developed. Unfortunately, it initiates a self destruction sequence as you're about to board it, so you cannot verify if it had any hostages.` + launch + npc board + personality timid plunders entering target + government "Lunarium" + ship "Kimek Thistle (Torpedoes)" "Resheph" + conversation + `This ship is equipped with Torpedo Launchers. Somehow, the criminals have acquired human outfits. You're about to enter the ship and look for any hostages that might have been there, but you rush back when you notice its self destruction sequence start.` + launch + on accept + "assisting heliarchy" ++ + on complete + "assisting heliarchy" -- + "reputation: Lunarium" = 1 + event "lunarium detained rb" + "assisted heliarch" ++ + payment 1320000 + conversation + `Though you never managed to find out if there were any hostages on board, the Heliarchs stationed at still herald you as a hero for "detaining the bandits". They immediately set to repair your ship. You're still on alert for a few hours in case any more ships come through, but nothing appears to be out of the ordinary. Near the end of the day, the station returns to normal as well; communications and other functions are restored.` + ` As soon as the commlinks are back, the Heliarchs contact Consul Plortub and inform him of what happened. Shortly after, are added to your account, and you're put on a call with the consul.` + ` "Humiliating, it would be, had under such circumstances, the criminal ships escaped. Done well, you have, Captain." He discusses with you the outfits that the ships were using and is alarmed to learn that they had not only Heliarch equipment, but had also acquired human weapons. He lets out something you can't quite put, resembling a gasp or a roar; you only know that your ears don't want to hear it again.` + ` "Bring this report to the other consuls, at once I will. Further tasks, of you we may ask, but for now, done your work is, Captain." He ends the transmission after a short salute. Heliarch ships rush back in as the local garrison returns from Remote Blue. Many of the ship captains come to personally congratulate you for stopping the fleeing ships.` + on fail + "assisting heliarchy" -- + +event "lunarium fleeing rb" + system "12 Autumn Above" + remove fleet "Heliarch" + +event "lunarium detained rb" + system "12 Autumn Above" + add fleet "Heliarch" 800 + + + +mission "Heliarch Drills 1" + name "Refueling Drill" + description "Escort the two Heliarch Judicators to , as part of a drill testing the Coalition's refueling capabilities in emergency situations." + minor + source + near "Belug" 6 100 + destination "Belug's Plunge" + to offer + has "license: Coalition" + not "Lunarium: Questions: done" + not "assisting lunarium" + random < 8 + "combat rating" >= 8104 + on offer + conversation + `A pair of Heliarch Judicators land by your ship as you leave for the spaceport. The workers storm to the ships, getting ready to refuel them. Coming down from one of the Judicators, a young Saryd with black hair barely reaching her shoulders pulls out a watch of sorts, seeming to time how long they take to completely fill up the ships' fuel tanks.` + ` When they're done, she gives an approving nod and takes a look around the hangars. When she notices you watching, she approaches you. "Greetings, human visitor," she says. "Magister Lotuora, I am. Intrigued by our ships, were you?" You begin a nod, and that's enough for her to keep talking. "A refueling drill, it was. When coming down, inform the local authorities at the last minute, we do, so that more 'authentic' it is. An important part it is, in testing how well prepared for emergencies we are."` + choice + ` "What sort of emergencies?"` + ` "And you want me to help with some of these drills, I take it?"` + goto help + ` "It's good that you do that. I should get going now, though."` + decline + ` "All sorts of emergencies," she responds. "Quarg invasions, criminal attacks, response action to natural disasters. Ready for all of them, we need to be."` + label help + ` She takes a look at your ship, then to the two Judicators. "About done with the refueling drills, we were. Heading back to , I was. Some more interesting drills, I could set up, if your assistance, I had. Accompany us back there, would you?"` + choice + ` "Alright, what do you need me to do?"` + goto accept + ` "What would these 'more interesting drills' involve?"` + ` "Sorry, I'm not interested in that kind of work."` + decline + ` "Thought of that, I still haven't," she says. "Some ship combat training, potentially. Very beneficial, training with an outsider could be."` + choice + ` "Alright, so should I just follow your ships now?"` + ` "Sorry, but I'm not interested in that kind of work."` + decline + label accept + ` "Follow you to , my ships will," she says, pointing at the Judicators. "In a rush to head back, we are not, so if immediate business elsewhere, you have, follow you for a while, we could. An extension to the refueling drills, it would be."` + ` She tells you she'll pay you when you reach , and will prepare another "drill" for you to help with too. She heads back inside one of the Judicators, and they prepare to follow your ship when you launch.` + accept + npc accompany save + personality escort heroic opportunistic + government "Heliarch" + fleet + names "heliarch" + fighters + names "heliarch fighter" + variant + "Heliarch Judicator" 2 + "Heliarch Pursuer" 4 + "Heliarch Rover" 4 + "Heliarch Stalker" 4 + on accept + "assisting heliarchy" ++ + on visit + dialog `You have reached , but you left some of the Heliarch escorts behind. Better depart and wait for them to get here.` + on complete + "assisting heliarchy" -- + "coalition jobs" ++ + payment 150000 + conversation + `Lotuora pays you when you land. "An idea for the next drill, I've had," she says. "Need to arrange some more ships, I will, so some hours, I will need. Meet me in the spaceport when I'm done, you should."` + on fail + "assisting heliarchy" -- + +mission "Heliarch Drills 2-A" + name "Pursuit Drill" + description "Land on while avoiding the Heliarch Hunters." + source "Belug's Plunge" + destination "Shadow of Leaves" + "apparent payment" 300000 + to offer + has "Heliarch Drills 1: done" + not "Lunarium: Questions: done" + not "assisting lunarium" + on offer + conversation + `When you find Magister Lotuora in the spaceport, she shows you to a map of the Coalition. Pointing to two systems, she indicates one in Kimek and one in Saryd space. "Made many calls, I have, and to assemble many ships for this drill, I've managed. How fit for their job, our Hunters are, we shall see."` + choice + ` "What do you mean?"` + goto explain + ` "Will I be fighting them?"` + ` "No, no fighting," she says. "Not yet. Only simulating a pursuit, they will be."` + label explain + ` She points to the systems again. "To land on and Ashy Reach unseen by the Hunters, your task is. Attack you, they will not, but allow them to be in the system when you land, you cannot. Once cleared both planets, you have, return here for , you may."` + choice + ` "Okay, I'll head out to the planets then."` + goto accept + ` "Can you tell me where my pursuers will be?"` + ` "Know of their pursuers, the pursued do not," she says, letting a laugh as if it was a joke. "Well, usually... From many systems across the Coalition, the Hunters are. Ready to follow your ship when you launch, they will be."` + label accept + ` She points again to one of the planets. "Still preparing, some Hunters around Ashy Reach are, so head for first, you should." She wishes you luck on avoiding the Hunters and heads off to a Heliarch military building.` + accept + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Silver Bell" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Hunter" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Fallen Leaf" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Companion" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Good Omen" + on accept + "assisting heliarchy" ++ + on visit + dialog `After you land, one of the Heliarch Hunters who was pursuing you lands beside you. You'll need to shake it off before landing here to succeed.` + on complete + "assisting heliarchy" -- + on fail + "assisting heliarchy" -- + +mission "Heliarch Drills 2-B" + landing + name "Pursuit Drill" + description "Land on while avoiding the Heliarch Hunters." + source "Shadow of Leaves" + destination "Ashy Reach" + to offer + has "Heliarch Drills 2-A: done" + not "Lunarium: Questions: done" + not "assisting lunarium" + on offer + conversation + `You land without any of the Hunters tailing you, and a Heliarch on the ground speaks into a communicator while looking at your ship. Minutes later, Magister Lotuora contacts you. "Well done, Captain! Onto the next target, , you may move." She wishes you good luck again and signs off.` + accept + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "4 Axis" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Sol Kimek" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "3 Spring Rising" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "5 Summer Above" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "3 Pole" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "12 Autumn Above" + on accept + "assisting heliarchy" ++ + on visit + dialog `After you land, one of the Heliarch Hunters who was pursuing you lands beside you. You'll need to shake it off before landing here to succeed.` + on complete + "assisting heliarchy" -- + on fail + "assisting heliarchy" -- + +mission "Heliarch Drills 2-C" + landing + name "Pursuit Drill" + description "Land on while avoiding the Heliarch Hunters." + source "Ashy Reach" + destination "Belug's Plunge" + to offer + has "Heliarch Drills 2-B: done" + not "Lunarium: Questions: done" + not "assisting lunarium" + on offer + conversation + `Once again, you managed to avoid the Hunters while landing on , and a local Heliarch agent informs Magister Lotuora of your success. "Excellent work, Captain ," she says when she contacts you. "Now, talked with some contacts I have, and one more drill for you to help with, I have arranged. Return to at your earliest convenience, you may." She signs off, but calls back seconds after. "Ah, forgive me Captain. Forgotten something, I had. Heard of the recent drills, some colleagues did, and readied their own Hunters to participate, they now have. Avoid them on your return to , as per usual, you should."` + ` She mentions they've contributed some credits to your reward, now a total of , which will be yours when you land on without any of the Hunters on your tail.` + accept + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "1 Axis" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "4 Winter Rising" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "5 Spring Below" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Ki War Ek" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "8 Winter Below" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Quaru" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Last Word" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Homeward" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Fell Omen" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Ekuarik" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Belug" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Speloog" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Torbab" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Flugbu" + npc evade + government "Heliarch" + personality heroic opportunistic target + fleet + names "heliarch" + variant + "Heliarch Hunter" + system "Debrugt" + on accept + "assisting heliarchy" ++ + on visit + dialog `After you land, one of the Heliarch Hunters who was pursuing you lands beside you. You'll need to shake it off before landing here to succeed.` + on complete + "assisting heliarchy" -- + "coalition jobs" ++ + payment 470000 + conversation + `Magister Lotuora meets you when you land, handing you your payment of , and congratulating you for managing to evade the pursuing ships. "Frustrated many of the Hunter pilots, I heard you have," she says with a laugh. "Good training for them, I hope this was. Finishing up the arrangements for one more drill, I am. When ready, you are, meet me in the spaceport, you must."` + on fail + "assisting heliarchy" -- + +mission "Heliarch Drills 3" + name "Combat Drill" + description "Head to the system to fight the , and report back to when you succeed. You must only disable the ship. Destroying or capturing it would deem you an enemy of the Heliarchs." + source "Belug's Plunge" + waypoint "Torbab" + to offer + has "Heliarch Drills 2-C: done" + not "Lunarium: Questions: done" + not "assisting lunarium" + on offer + conversation + `Lotuora is speaking with a Kimek Heliarch captain at the entrance to the spaceport. "Ah, there the Captain is," she tells the Kimek. "Captain , your sparring partner, this is," she says, gesturing to the Kimek, who salutes you with a short bow of her head. "Excited to test her ship against an outsider, she is."` + ` The Kimek doesn't stay for long, only wishing you a "good fight" and heading to the hangars, where she boards a Punisher and flies away. You look to Lotuora, waiting for her to explain. "Tough ships, our Punishers are, but looked into your encounter records, we have, and experience in fighting, you have," she says. "To avoid any accidents, we want, so swapped out, the ship's Finisher Pods were. A mere drill, this is, so only aim to disable one another, you shall. If successful, you are, set aside for your efforts, we have."` + choice + ` "Great. I'm excited to test my skills against one of your warships."` + goto accept + ` "Actually, I'm not sure I'm up for this. I don't think my ship can make it against a Punisher."` + ` For the first time you see Lotuora drop her smile, seemingly confused and saddened by the prospect of having to call off the match. "What? Come now, Captain, sure I am that do fine you will. If well equipped, your ship is not, free to arm yourself however you wish and return to duel the Punisher at a later time, you are." She takes on a softer tone, and continues. "If really not agreeable to you, this is, cancel the duel I can, but get an opportunity like this, we often do not. Really appreciated, your cooperation with this last drill would be."` + choice + ` "Well, alright, I suppose I can look for ways to prepare myself for the fight."` + ` "I'm sorry, but I'm just not comfortable taking on a warship of yours like that."` + decline + ` She nearly jumps, and her jolly demeanor returns as if flipped by a switch. "Thank you Captain ! Truly an unique experience, this shall be."` + label accept + ` She stares on for a while, then brings up a map. "Headed to the system, the Punisher is. Wait for you there, it will." She tells you to head to when you're ready to fight the Punisher, and reminds you to only disable the ship, as any harsher action would make you a criminal to the Heliarchs.` + accept + npc disable save + government "Heliarch Test Dummy" + personality disables staying nemesis heroic + system "Torbab" + fleet + names "heliarch" + variant + "Heliarch Punisher (Scrappy)" + on accept + "assisting heliarchy" ++ + on fail + "assisting heliarchy" -- + "reputation: Heliarch" = -1000 + "reputation: Coalition" = -1000 + on visit + dialog `You've landed on , but you have not disabled the yet. Disable it before returning.` + on complete + "assisting heliarchy" -- + "coalition jobs" ++ + "assisted heliarch" ++ + payment 800000 + conversation + `Magister Lotuora greets you when you return. "Prevailed over one of our Punishers, you have! Perhaps the real threat, you are, not the Quarg," she says, looking at you for a few seconds as if expecting you to laugh. She hands you , and continues, "Sent a recording of the fight, I was. Learn much from it, I hope we can."` + ` She thanks you for helping her with the drills, saying it will be a great help in training the cadets at the local academy. She concludes by wishing you safe travels, and then heads to a Heliarch building.` + + + + +mission "Heliarch License 1" + name "Meet With The Consuls" + description "Head to the , where the Heliarch consuls will make you a Heliarch agent." + minor + landing + source + near "Quaru" 1 100 + destination "Ring of Friendship" + to offer + or + "assisted heliarch" == 5 + and + "coalition jobs" >= 90 + "assisted heliarch" == 4 + and + "coalition jobs" >= 120 + "assisted heliarch" == 3 + not "Lunarium: Questions: done" + not "assisting heliarchy" + not "assisting lunarium" + to fail + has "Lunarium: Questions: done" + to complete + has "Heliarch License 2: accepted" + on offer + conversation + `When you land on , you find a Heliarch delegation waiting for you outside. When you meet them, the Saryd of the group says, "A great ally to our Coalition, you have proven to be."` + ` "Discussed your exploits, the consuls have. Much satisfaction, your contributions brought us," the Kimek continues.` + ` "With you, a meeting they request. To you must go, if to join our ranks, you so wish," the Arach finishes.` + accept + +mission "Heliarch License 2" + invisible + landing + deadline 1 + source "Ring of Friendship" + to offer + has "Heliarch License 1: active" + not "Lunarium: Questions: done" + not "assisting lunarium" + on offer + conversation + `The Heliarch authorities of the have offered you a position in the ranks of the Heliarchs. Would you like to meet with them and officially join the Heliarchy? Given their history with the Quarg, and the rumors of rebellion stirring in Coalition space, this would no doubt set you on path to conflict with the Quarg and the resistance forces.` + choice + ` (Yes.)` + ` (Not yet.)` + defer + ` (No. I don't want to support the Heliarchs at all.)` + decline + log "Was given a special circlet by the Heliarchs, which grants access to some of their technology. Was also given a translation device to freely converse with the Coalition species." + set "language: Coalition" + event "first heliarch unlock" + set "license: Heliarch" + ` When you land, you're met with a bit of ceremony. A trio of Heliarch consuls welcomes you, each carrying a gemstone: an emerald for the Saryd, a ruby for the Kimek, and a sapphire for the Arach. They each pass the precious stones to you, starting with the Saryd, then the Kimek, and lastly the Arach. Cameras and photographers surround the scene, kept at bay by lines of Heliarch guards. It seems your joining the ranks has turned into something of an event.` + ` When the consuls are done, they have you follow them into the restricted sections of the ring, bringing you to a very large, circular room, somewhat like a colosseum or an auditorium, with hundreds of Heliarch consuls seated. There are also many more camera workers and photographers, though all of them are Heliarch members this time. You're instructed to head to the center.` + ` The consuls who brought you here speak, and once again you're reminded of your "contributions and loyalty" to the Coalition. "Truly special, this ceremony is," the Arach says. "Join our ranks, for the first time, an outsider does. Contributed much and shown devotion to our Coalition, this outsider has."` + ` "From humanity, has come," the Kimek continues. "Our most recent neighbor, and a group still under the chiding eyes of the Quarg, they are. To reach them all, to free them all, we still cannot, but, our first step in that front, Captain 's coronation is."` + ` The Saryd approaches you, carrying some type of chest. Opening it, she reveals a golden circlet inside, staying silent and looking at you.` + choice + ` "Do I put it on myself?"` + ` (Take the circlet.)` + goto circlet + ` "Allow others to crown us, we do not," she says. "Not anymore."` + choice + ` (Take the circlet.)` + label circlet + ` You pick up the circlet and raise it to your head, the Heliarch consuls all standing up when you do. You bring it down and adjust it so that it fits you well. Once the "crowning" is done, many of the consuls cheer in celebration, which is followed with something akin to a round of applause and more of the speeches from before.` + ` When it's all over, you're escorted out by some of the guards, but remain in the restricted sections. Here you are now brought to a much smaller room, where a pair of Heliarchs in lab coats are working at some device reminiscent of a hospital's ultrasound machine. One of them asks you for your circlet, attaching it to various cables near the machine's controls. "Configure your circlet we now shall, so that to your will it responds," the other says, gesturing for you to take a seat. He holds a large, helmet-like piece, with a cable at the top connecting to the machine.` + choice + ` "To my will? What do you mean?"` + ` "Is this really necessary?"` + ` "Mere jewelry pieces or symbols of rank, these are not," the one tinkering with your circlet explains. "Serve they do as links, interfaces between a Heliarch's will and our Coalition's machines and programs. Allow you they will to access some of our restricted ring sections, and serve as keys to our many outfitters, they do."` + ` They gesture for you to sit and you comply, having the helmet placed over your head. It blocks out your sight completely, and it feels a lot heavier that you had imagined. "Begin now, we shall," you barely hear one of the Heliarchs say, as most of the sound is muffled. Once the process starts, you hear some wave-like humming echo inside your head, and it doesn't take long before you feel as if you're being spun around. Before you get too uncomfortable, the Heliarchs stop the machine and take the helmet off of you. "All done, we are. Here," one says, handing you your circlet back.` + ` Putting it on again, you don't notice any difference, but they push you to try it out on one of the doors. You get up from your seat, moving to the entrance door, and it opens up when you're a few steps away. You think to close it, and it does. You repeat a few more times, and turn back to the Heliarchs, who seem amused by seeing you play with your new ability. You look now to the helmet, and with a thought it turns around, seemingly spinning around a head it assumes it is attached to. You turn it off, and begin to test the circlet with the lights and computers in the room.` + ` When you're done, the two Heliarchs explain some more. "As of a lower rank you are, permit you access to everything and everywhere, your circlet will not. Not yet, at least. But, as mentioned, come to some of the restricted sections, you now many. On many of our worlds, find you will Heliarch outfitters, where now available some of our equipment will be. Permit you to take on some jobs we put up for Heliarch agents here in the restricted sections, the circlet also will."` + ` They commend you for having joined up, and bid you farewell, having the guards now bring you back to your ship. The three Heliarch consuls who greeted you are waiting for you when you arrive, and hand you a small box which you soon realize is a translation device. "One of us you now are, Captain," the Saryd says. "Trust you we do to uphold the Coalition's values and laws."` + ` The trio congratulates you once again and wishes you safe travels.` + accept + +event "first heliarch unlock" + planet "Ring of Friendship" + outfitter "Heliarch Basics" + planet "Ring of Power" + outfitter "Heliarch Basics" + planet "Ring of Wisdom" + outfitter "Heliarch Basics" + planet "Saros" + outfitter "Heliarch Basics" + planet "Ahr" + outfitter "Heliarch Basics" + planet "Ki Patek Ka" + outfitter "Heliarch Basics" + planet "Belug's Plunge" + outfitter "Heliarch Basics" + planet "Stronghold of Flugbu" + outfitter "Heliarch Basics" + planet "Delve of Bloptab" + outfitter "Heliarch Basics" + planet "Far Home" + outfitter "Heliarch Basics" + planet "Dwelling of Speloog" + outfitter "Heliarch Basics" + planet "Blue Interor" + outfitter "Heliarch Basics" + planet "Sandy Two" + outfitter "Heliarch Basics" + planet "Second Rose" + outfitter "Heliarch Basics" diff --git a/data/governments.txt b/data/governments.txt index 95739bec4e3e..85d0575348ac 100644 --- a/data/governments.txt +++ b/data/governments.txt @@ -640,6 +640,16 @@ government "Heliarch" "Quarg (Gegno)" -.01 "Coalition" 1 +government "Heliarch Test Dummy" + "display name" "Heliarch" + swizzle 0 + color 1 .8 .5 + "player reputation" -1000 + "hostile hail" "heliarch test dummy" + "hostile disabled hail" "disabled heliarch test dummy" + "bribe" 0 + "fine" 0 + color "governments: Independent" .78 .36 .36 government "Independent" diff --git a/images/outfit/heliarch license.png b/images/outfit/heliarch license.png new file mode 100644 index 0000000000000000000000000000000000000000..a39cd009ab9a510d9aebb0da32c9f0b41906fcf4 GIT binary patch literal 13659 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 Date: Sun, 24 Sep 2023 06:09:33 +0200 Subject: [PATCH 25/79] fix(segfault): Always return a valid CargoHold when getting planetary storage (#9335) --- source/OutfitterPanel.cpp | 41 ++++++++++++++++++--------------------- source/PlayerInfo.cpp | 15 +++++--------- source/PlayerInfo.h | 2 +- source/ShopPanel.cpp | 4 ++-- 4 files changed, 27 insertions(+), 35 deletions(-) diff --git a/source/OutfitterPanel.cpp b/source/OutfitterPanel.cpp index 13f9d1511db5..9facc0d21498 100644 --- a/source/OutfitterPanel.cpp +++ b/source/OutfitterPanel.cpp @@ -132,7 +132,7 @@ bool OutfitterPanel::HasItem(const string &name) const if(showCargo && player.Cargo().Get(outfit)) return true; - if(showStorage && player.Storage() && player.Storage()->Get(outfit)) + if(showStorage && player.Storage().Get(outfit)) return true; for(const Ship *ship : playerShips) @@ -198,7 +198,7 @@ void OutfitterPanel::DrawItem(const string &name, const Point &point) if(!outfitter.Has(outfit) && outfit->Get("installable") >= 0.) stock = max(0, player.Stock(outfit)); int cargo = player.Cargo().Get(outfit); - int storage = player.Storage() ? player.Storage()->Get(outfit) : 0; + int storage = player.Storage().Get(outfit); string message; if(cargo && storage && stock) @@ -335,7 +335,7 @@ ShopPanel::BuyResult OutfitterPanel::CanBuy(bool onlyOwned) const // Check if the outfit is available to get at all. bool isInCargo = player.Cargo().Get(selectedOutfit); - bool isInStorage = player.Storage() && player.Storage()->Get(selectedOutfit); + bool isInStorage = player.Storage().Get(selectedOutfit); bool isInStore = outfitter.Has(selectedOutfit) || player.Stock(selectedOutfit) > 0; if(isInStorage && (onlyOwned || isInStore || playerShip)) { @@ -504,10 +504,10 @@ void OutfitterPanel::Buy(bool onlyOwned) { if(onlyOwned) { - if(!player.Storage() || !player.Storage()->Get(selectedOutfit)) + if(!player.Storage().Get(selectedOutfit)) continue; player.Cargo().Add(selectedOutfit); - player.Storage()->Remove(selectedOutfit); + player.Storage().Remove(selectedOutfit); } else { @@ -532,8 +532,8 @@ void OutfitterPanel::Buy(bool onlyOwned) if(player.Cargo().Get(selectedOutfit)) player.Cargo().Remove(selectedOutfit); - else if(player.Storage() && player.Storage()->Get(selectedOutfit)) - player.Storage()->Remove(selectedOutfit); + else if(player.Storage().Get(selectedOutfit)) + player.Storage().Remove(selectedOutfit); else if(onlyOwned || !(player.Stock(selectedOutfit) > 0 || outfitter.Has(selectedOutfit))) break; else @@ -561,7 +561,7 @@ bool OutfitterPanel::CanSell(bool toStorage) const if(player.Cargo().Get(selectedOutfit)) return true; - if(!toStorage && player.Storage() && player.Storage()->Get(selectedOutfit)) + if(!toStorage && player.Storage().Get(selectedOutfit)) return true; for(const Ship *ship : playerShips) @@ -575,15 +575,12 @@ bool OutfitterPanel::CanSell(bool toStorage) const void OutfitterPanel::Sell(bool toStorage) { - // Retrieve the players storage. If we want to store to storage, then - // we also request storage to be created if possible. - // Will be nullptr if no storage is available. - CargoHold *storage = player.Storage(toStorage); + CargoHold &storage = player.Storage(); if(player.Cargo().Get(selectedOutfit)) { player.Cargo().Remove(selectedOutfit); - if(toStorage && storage && storage->Add(selectedOutfit)) + if(toStorage && storage.Add(selectedOutfit)) { // Transfer to planetary storage completed. // The storage->Add() function should never fail as long as @@ -611,7 +608,7 @@ void OutfitterPanel::Sell(bool toStorage) ship->AddCrew(-selectedOutfit->Get("required crew")); ship->Recharge(); - if(toStorage && storage && storage->Add(selectedOutfit)) + if(toStorage && storage.Add(selectedOutfit)) { // Transfer to planetary storage completed. } @@ -643,8 +640,8 @@ void OutfitterPanel::Sell(bool toStorage) if(mustSell) { ship->AddOutfit(ammo, -mustSell); - if(toStorage && storage) - mustSell -= storage->Add(ammo, mustSell); + if(toStorage) + mustSell -= storage.Add(ammo, mustSell); if(mustSell) { int64_t price = player.FleetDepreciation().Value(ammo, day, mustSell); @@ -657,9 +654,9 @@ void OutfitterPanel::Sell(bool toStorage) return; } - if(!toStorage && storage && storage->Get(selectedOutfit)) + if(!toStorage && storage.Get(selectedOutfit)) { - storage->Remove(selectedOutfit); + storage.Remove(selectedOutfit); int64_t price = player.FleetDepreciation().Value(selectedOutfit, day); player.Accounts().AddCredits(price); player.AddStock(selectedOutfit, 1); @@ -680,7 +677,7 @@ void OutfitterPanel::FailSell(bool toStorage) const else { bool hasOutfit = player.Cargo().Get(selectedOutfit); - hasOutfit = hasOutfit || (!toStorage && player.Storage() && player.Storage()->Get(selectedOutfit)); + hasOutfit = hasOutfit || (!toStorage && player.Storage().Get(selectedOutfit)); for(const Ship *ship : playerShips) if(ship->OutfitCount(selectedOutfit)) { @@ -894,7 +891,7 @@ void OutfitterPanel::CheckRefill() if(amount > 0) { bool available = outfitter.Has(outfit) || player.Stock(outfit) > 0; - available = available || player.Cargo().Get(outfit) || player.Storage()->Get(outfit); + available = available || player.Cargo().Get(outfit) || player.Storage().Get(outfit); if(available) needed[outfit] += amount; } @@ -905,7 +902,7 @@ void OutfitterPanel::CheckRefill() for(auto &it : needed) { // Don't count cost of anything installed from cargo or storage. - it.second = max(0, it.second - player.Cargo().Get(it.first) - player.Storage()->Get(it.first)); + it.second = max(0, it.second - player.Cargo().Get(it.first) - player.Storage().Get(it.first)); if(!outfitter.Has(it.first)) it.second = min(it.second, max(0, player.Stock(it.first))); cost += player.StockDepreciation().Value(it.first, day, it.second); @@ -937,7 +934,7 @@ void OutfitterPanel::Refill() if(neededAmmo > 0) { // Fill first from any stockpiles in storage. - const int fromStorage = player.Storage()->Remove(outfit, neededAmmo); + const int fromStorage = player.Storage().Remove(outfit, neededAmmo); neededAmmo -= fromStorage; // Then from cargo. const int fromCargo = player.Cargo().Remove(outfit, neededAmmo); diff --git a/source/PlayerInfo.cpp b/source/PlayerInfo.cpp index f2cabc0b4bea..222e8b7b50ff 100644 --- a/source/PlayerInfo.cpp +++ b/source/PlayerInfo.cpp @@ -1410,16 +1410,11 @@ const CargoHold &PlayerInfo::Cargo() const -// Get planetary storage information for current planet. Returns a pointer, -// since we might not be on a planet, or since the storage might be empty. -CargoHold *PlayerInfo::Storage(bool forceCreate) +// Get items stored on the player's current planet. +CargoHold &PlayerInfo::Storage() { - if(planet && (forceCreate || planetaryStorage.count(planet))) - return &(planetaryStorage[planet]); - - // Nullptr can be returned when forceCreate is true if there is no - // planet; nullptr is the best we can offer in such cases. - return nullptr; + assert(planet && "can't get planetary storage in-flight"); + return planetaryStorage[planet]; } @@ -1792,7 +1787,7 @@ bool PlayerInfo::TakeOff(UI *ui, const bool distributeCargo) // Transfer the outfits from cargo to the storage on this planet. if(!outfit.second) continue; - cargo.Transfer(outfit.first, outfit.second, *Storage(true)); + cargo.Transfer(outfit.first, outfit.second, Storage()); } } accounts.AddCredits(income); diff --git a/source/PlayerInfo.h b/source/PlayerInfo.h index 574735bd1881..ebbca398274b 100644 --- a/source/PlayerInfo.h +++ b/source/PlayerInfo.h @@ -185,7 +185,7 @@ class PlayerInfo { CargoHold &Cargo(); const CargoHold &Cargo() const; // Get items stored on the player's current planet. - CargoHold *Storage(bool forceCreate = false); + CargoHold &Storage(); // Get items stored on all planets (for map display). const std::map &PlanetaryStorage() const; // Get cost basis for commodities. diff --git a/source/ShopPanel.cpp b/source/ShopPanel.cpp index 7a336a56408e..77be9d275624 100644 --- a/source/ShopPanel.cpp +++ b/source/ShopPanel.cpp @@ -240,7 +240,7 @@ bool ShopPanel::CanSellMultiple() const bool ShopPanel::IsAlreadyOwned() const { return (playerShip && selectedOutfit && player.Cargo().Get(selectedOutfit)) - || (player.Storage() && player.Storage()->Get(selectedOutfit)); + || player.Storage().Get(selectedOutfit); } @@ -610,7 +610,7 @@ int64_t ShopPanel::LicenseCost(const Outfit *outfit, bool onlyOwned) const // If the player is attempting to install an outfit from cargo, storage, or that they just // sold to the shop, then ignore its license requirement, if any. (Otherwise there // would be no way to use or transfer license-restricted outfits between ships.) - bool owned = (player.Cargo().Get(outfit) && playerShip) || (player.Storage() && player.Storage()->Get(outfit)); + bool owned = (player.Cargo().Get(outfit) && playerShip) || player.Storage().Get(outfit); if((owned && onlyOwned) || player.Stock(outfit) > 0) return 0; From 2134b8aa54c916161e594f79c25577abd03551ae Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 24 Sep 2023 07:06:06 +0200 Subject: [PATCH 26/79] fix(build): Allow building for MinGW without having a VS toolchain installed (#9319) --- CMakePresets.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakePresets.json b/CMakePresets.json index 588cee7f4cac..523e5120608a 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -150,6 +150,7 @@ "cacheVariables": { "CMAKE_CXX_COMPILER": "x86_64-w64-mingw32-g++", "CMAKE_RC_COMPILER": "windres", + "VCPKG_HOST_TRIPLET": "x64-mingw-dynamic", "VCPKG_TARGET_TRIPLET": "x64-mingw-dynamic" }, "condition": { @@ -170,6 +171,7 @@ "cacheVariables": { "CMAKE_CXX_COMPILER": "i686-w64-mingw32-g++", "CMAKE_RC_COMPILER": "windres", + "VCPKG_HOST_TRIPLET": "x86-mingw-dynamic", "VCPKG_TARGET_TRIPLET": "x86-mingw-dynamic" }, "condition": { From 3e113772acef8fffd1f3746cd5ee2393e7946949 Mon Sep 17 00:00:00 2001 From: DarcyManoel Date: Sun, 24 Sep 2023 14:36:25 +0930 Subject: [PATCH 27/79] fix(content): Recategorize the Heliarch License (#9336) --- data/coalition/coalition outfits.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/coalition/coalition outfits.txt b/data/coalition/coalition outfits.txt index 0e17737c98e9..31aae994988c 100644 --- a/data/coalition/coalition outfits.txt +++ b/data/coalition/coalition outfits.txt @@ -432,6 +432,6 @@ outfit "Coalition License" description "Completed a lot of Coalition jobs and received permission to purchase civilian technology and ships." outfit "Heliarch License" - category "Special" + category "Licenses" thumbnail "outfit/heliarch license" description "An ornate circlet of gold and platinum, it serves as both a symbol of rank and as a license to access exclusive Heliarch facilities. Custom-made to fit a human's head, it's surprisingly light and comfortable." From f52da6510be9310675eba63b182334278706141d Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 24 Sep 2023 07:11:36 +0200 Subject: [PATCH 28/79] fix(ui): Fix race condition when drawing the planet labels (#9332) --- source/Engine.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/source/Engine.cpp b/source/Engine.cpp index 9570afc1cf96..6f54608288f6 100644 --- a/source/Engine.cpp +++ b/source/Engine.cpp @@ -504,6 +504,14 @@ void Engine::Step(bool isActive) centerVelocity = flagship->Velocity(); if(flagship->IsHyperspacing() && Preferences::Has("Extended jump effects")) centerVelocity *= 1. + pow(flagship->GetHyperspacePercentage() / 20., 2); + if(doEnter) + { + // Create the planet labels as soon as we entered a new system. + labels.clear(); + for(const StellarObject &object : player.GetSystem()->Objects()) + if(object.HasSprite() && object.HasValidPlanet() && object.GetPlanet()->IsAccessible(flagship.get())) + labels.emplace_back(labels, *player.GetSystem(), object); + } if(doEnter && flagship->Zoom() == 1. && !flagship->IsHyperspacing()) { doEnter = false; @@ -1381,13 +1389,6 @@ void Engine::EnterSystem() Messages::Add(GameData::HelpMessage("basics 1"), Messages::Importance::High); Messages::Add(GameData::HelpMessage("basics 2"), Messages::Importance::High); } - - // Create the planet labels. - labels.clear(); - if(system) - for(const StellarObject &object : system->Objects()) - if(object.HasSprite() && object.HasValidPlanet() && object.GetPlanet()->IsAccessible(flagship)) - labels.emplace_back(labels, *system, object); } From 96a20e004bb1361733d517676e35df079b7c7873 Mon Sep 17 00:00:00 2001 From: Anarchist2 <60202690+Anarchist2@users.noreply.github.com> Date: Sun, 24 Sep 2023 15:27:35 +1000 Subject: [PATCH 29/79] feat(content): Add more high-end passenger transport missions to human space (#9252) --- data/human/deep jobs.txt | 25 +++- data/human/dirt belt jobs.txt | 76 +++++++++- data/human/jobs.txt | 224 +++++++++++++++++++++++++++-- data/human/near earth jobs.txt | 68 ++++++++- data/human/paradise world jobs.txt | 30 +++- data/human/rim jobs.txt | 33 +++++ data/human/syndicate jobs.txt | 32 ++++- 7 files changed, 457 insertions(+), 31 deletions(-) diff --git a/data/human/deep jobs.txt b/data/human/deep jobs.txt index 95f6c6d497df..ef6dd70fb76f 100644 --- a/data/human/deep jobs.txt +++ b/data/human/deep jobs.txt @@ -326,8 +326,9 @@ mission "Transport scientists" attributes "deep" stopover attributes "research" + not attributes "uninhabited" distance 2 50 - passengers 5 16 + passengers 3 4 .43 to offer random < 15 on stopover @@ -340,6 +341,28 @@ mission "Transport scientists" payment 30000 +mission "Transport science department" + job + repeat + description "A department of scientists needs some research notes analyzed at the facility on . Take the scientists there and then return them to for ." + source + attributes "deep" + stopover + attributes "research" + not attributes "uninhabited" + distance 2 50 + passengers 20 4 .1 + to offer + random < "passenger space" - 30 + on stopover + dialog "The scientists have been giddily sharing and discussing the results of each of their research teams during the entire trip. You're happy for a bit of peace and quiet as they make tracks for a prominent research lab to have the results analyzed. You prepare for the return journey to ." + on visit + dialog phrase "generic missing stopover or passengers" + on complete + dialog "You bid goodbye to the scientists and accept your payment of ." + payment 180000 100 + + mission "Escort science vessel" job repeat diff --git a/data/human/dirt belt jobs.txt b/data/human/dirt belt jobs.txt index 25c1a463dfc0..2f12fc7166a5 100644 --- a/data/human/dirt belt jobs.txt +++ b/data/human/dirt belt jobs.txt @@ -55,8 +55,7 @@ mission "To Remembrance Day celebration [0]" month == 2 day < 19 to fail - month == 2 - day == 19 + month * 100 + day >= 219 source attributes "dirt belt" destination @@ -90,8 +89,7 @@ mission "To Remembrance Day celebration [1]" month == 2 day < 19 to fail - month == 2 - day == 19 + month * 100 + day >= 219 source attributes "dirt belt" destination @@ -124,8 +122,7 @@ mission "To Remembrance Day celebration [2]" month == 2 day < 19 to fail - month == 2 - day == 19 + month * 100 + day >= 219 source attributes "dirt belt" destination @@ -138,6 +135,41 @@ mission "To Remembrance Day celebration [2]" dialog `Spaceport workers already festively dressed for Remembrance Day remove the cargo of from your ship and hand you your payment of .` +mission "To Remembrance Day celebration [3]" + name `Remembrance Day celebration` + job + repeat + description `Bring to by for the Remembrance Day celebration on February 19th. Payment is .` + passengers 20 4 .15 + deadline + to offer + random < ( "passenger space" - 30 ) * 2 + or + and + random < 20 + month == 12 + day >= 21 + and + random < 90 + month == 1 + and + random < 30 + month == 2 + day < 19 + to fail + month * 100 + day >= 219 + source + attributes "dirt belt" + destination + distance 3 15 + attributes "dirt belt" + on visit + dialog phrase "generic passenger on visit" + on complete + payment 200000 120 + dialog "You wish your the best of luck on . The children run off your ship in green face paint, and the parents pay you ." + + mission "From Remembrance Day celebration [0]" name `Return from Remembrance Day` job @@ -202,6 +234,38 @@ mission "From Remembrance Day celebration [1]" dialog `Your passengers thank you for returning them to , and you collect your payment of .` +mission "From Remembrance Day celebration [2]" + name `Return from Remembrance Day` + job + repeat + description `Bring home to after the Remembrance Day celebration. Payment is .` + passengers 20 4 .15 + to offer + random < ( "passenger space" - 30 ) * 2 + or + and + random < 60 + month == 2 + day > 19 + and + random < 30 + month == 3 + and + random < 15 + month == 4 + day < 20 + source + attributes "dirt belt" + destination + distance 3 15 + attributes "dirt belt" + on visit + dialog phrase "generic passenger on visit" + on complete + payment 120000 100 + dialog `Your passengers thank you for returning them to , and you collect your payment of .` + + mission "Food Convoy [0]" name `Food convoy to ` job diff --git a/data/human/jobs.txt b/data/human/jobs.txt index 3119d091f448..1f5cc41bedcd 100644 --- a/data/human/jobs.txt +++ b/data/human/jobs.txt @@ -2034,6 +2034,54 @@ mission "Wealthy tourists out" payment 10000 200 dialog phrase "generic passenger dropoff payment" +mission "Wealthy tourist group out [0]" + name "Wealthy tourist group to " + job + repeat + description "A group of wealthy tourists, consisting of members, want to see , and wish to travel in a luxurious ship for the journey. They are willing to pay you ." + passengers 15 5 .09 + to offer + random < 75 + random < ( "passenger space" - 35 ) * 2 + to accept + has "outfit (installed): Luxury Accommodations" + source + attributes "rich" "urban" + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + destination + attributes "tourism" + distance 4 30 + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + on visit + dialog phrase "generic passenger on visit" + on complete + payment 210000 135 + dialog phrase "generic passenger dropoff payment" + +mission "Wealthy tourist group out [1]" + name "Wealthy tourist group to " + job + repeat + description "A group of wealthy tourists, consisting of members, want to see , and wish to travel in a luxurious ship for the journey. They are willing to pay you ." + passengers 15 5 .09 + to offer + random < 75 + random < ( "passenger space" - 35 ) * 2 + to accept + has "outfit (installed): Luxury Accommodations" + source + attributes "rich" "urban" + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + destination + attributes "tourism" + distance 4 30 + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + on visit + dialog phrase "generic passenger on visit" + on complete + payment 210000 135 + dialog phrase "generic passenger dropoff payment" + mission "Tourists back [0]" name "Bring a tourist home to " job @@ -2077,7 +2125,7 @@ mission "Tourists back [1]" dialog phrase "generic passenger dropoff payment" mission "Wealthy tourists back" - name "Bring wealthy tourists home to " + name "Wealthy tourists home to " job repeat description "These wealthy tourists are headed home to , and wish to travel in a luxurious ship for the journey. They are willing to pay you ." @@ -2099,6 +2147,54 @@ mission "Wealthy tourists back" payment 10000 200 dialog phrase "generic passenger dropoff payment" +mission "Wealthy tourist group back [0]" + name "Wealthy tourists home to " + job + repeat + description "A group of wealthy tourists, consisting of members, are headed home to , and wish to travel in a luxurious ship for the journey. They are willing to pay you ." + passengers 15 5 .09 + to offer + random < 75 + random < ( "passenger space" - 35 ) * 2 + to accept + has "outfit (installed): Luxury Accommodations" + source + attributes "tourism" + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + destination + attributes "rich" "urban" + distance 4 30 + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + on visit + dialog phrase "generic passenger on visit" + on complete + payment 210000 135 + dialog phrase "generic passenger dropoff payment" + +mission "Wealthy tourist group back [1]" + name "Wealthy tourists home to " + job + repeat + description "A group of wealthy tourists, consisting of members, are headed home to , and wish to travel in a luxurious ship for the journey. They are willing to pay you ." + passengers 15 5 .09 + to offer + random < 75 + random < ( "passenger space" - 35 ) * 2 + to accept + has "outfit (installed): Luxury Accommodations" + source + attributes "tourism" + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + destination + attributes "rich" "urban" + distance 4 30 + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + on visit + dialog phrase "generic passenger on visit" + on complete + payment 210000 135 + dialog phrase "generic passenger dropoff payment" + mission "Family [0]" name "Transport family to " job @@ -2205,6 +2301,26 @@ mission "Strike Breakers [mining]" payment 10000 dialog "You unload the strike breakers amid an angry crowd of protesters held back by police. When you return to your ship, you find that the company has transferred the agreed-upon payment of into your account." +mission "Strike Breakers [large mining]" + name "Strike breakers to " + job + repeat + description "Bring strike breakers to , to take the place of mine workers who are on strike. The company will pay you ." + passengers 40 4 .08 + to offer + random < ( "passenger space" - 45 ) / 2 + source + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + destination + attributes "mining" + distance 2 20 + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + on visit + dialog phrase "generic passenger on visit" + on complete + payment 130000 100 + dialog "You unload the strike breakers amid an angry crowd of protesters held back by police. When you return to your ship, you find that the company has transferred the agreed-upon payment of into your account." + mission "Strike Breakers [textile]" name "Strike breakers to " job @@ -2227,6 +2343,26 @@ mission "Strike Breakers [textile]" payment 10000 dialog "You unload the strike breakers amid an angry crowd of protesters held back by police. When you return to your ship, you find that the company has transferred the agreed-upon payment of into your account." +mission "Strike Breakers [large textile]" + name "Strike breakers to " + job + repeat + description "Bring strike breakers to , to take the place of textile workers who are on strike. The company will pay you ." + passengers 40 4 .08 + to offer + random < ( "passenger space" - 45 ) / 2 + source + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + destination + attributes "textiles" + distance 2 20 + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + on visit + dialog phrase "generic passenger on visit" + on complete + payment 130000 100 + dialog "You unload the strike breakers amid an angry crowd of protesters held back by police. When you return to your ship, you find that the company has transferred the agreed-upon payment of into your account." + mission "Strike Breakers [factory]" name "Strike breakers to " job @@ -2249,6 +2385,26 @@ mission "Strike Breakers [factory]" payment 10000 dialog "You unload the strike breakers amid an angry crowd of protesters held back by police. When you return to your ship, you find that the company has transferred the agreed-upon payment of into your account." +mission "Strike Breakers [large factory]" + name "Strike breakers to " + job + repeat + description "Bring strike breakers to , to take the place of factory workers who are on strike. The company will pay you ." + passengers 40 4 .08 + to offer + random < ( "passenger space" - 45 ) / 2 + source + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + destination + attributes "factory" + distance 2 20 + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + on visit + dialog phrase "generic passenger on visit" + on complete + payment 130000 100 + dialog "You unload the strike breakers amid an angry crowd of protesters held back by police. When you return to your ship, you find that the company has transferred the agreed-upon payment of into your account." + mission "Colonists [0]" name "Colonists to " job @@ -2256,8 +2412,7 @@ mission "Colonists [0]" description "These people are hoping to join a colony on . They will pay you to take them there." passengers 10 4 .1 to offer - random < 30 - "passenger space" > 30 + random < ( "passenger space" - 20 ) / 2 source attributes "urban" "near earth" "core" "factory" government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" @@ -2269,9 +2424,8 @@ mission "Colonists [0]" on visit dialog phrase "generic passenger on visit" on complete - payment - payment 8000 - dialog "The colonists depart your ship after paying you ." + payment 70000 100 + dialog "The colonists hand you before departing your ship, eager to start their new life on ." mission "Colonists [1]" name "Colonists to " @@ -2280,8 +2434,7 @@ mission "Colonists [1]" description "These people are hoping to join a colony on . They will pay you to take them there." passengers 10 4 .1 to offer - random < 20 - "passenger space" > 20 + random < ( "passenger space" - 20 ) / 2 source attributes "urban" "near earth" "core" "factory" government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" @@ -2293,9 +2446,52 @@ mission "Colonists [1]" on visit dialog phrase "generic passenger on visit" on complete - payment - payment 10000 - dialog "The colonists depart your ship after paying you ." + payment 80000 100 + dialog "The colonists hand you before departing your ship, eager to start their new life on ." + +mission "Colonists [2]" + name "Colonists to " + job + repeat + description "These people are hoping to join a colony on . They will pay you to take them there." + passengers 10 4 .1 + to offer + random < ( "passenger space" - 20 ) / 2 + source + attributes "urban" "near earth" "core" "factory" + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + destination + attributes "frontier" "dirt belt" "south" "farming" "mining" "rim" "forest" + not attributes "station" "urban" + distance 2 20 + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + on visit + dialog phrase "generic passenger on visit" + on complete + payment 90000 100 + dialog "The colonists hand you before departing your ship, eager to start their new life on ." + +mission "Colonists [3]" + name "Colonists to " + job + repeat + description "These people are hoping to join a colony on . They will pay you to take them there." + passengers 10 4 .1 + to offer + random < ( "passenger space" - 20 ) / 2 + source + attributes "urban" "near earth" "core" "factory" + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + destination + attributes "frontier" "dirt belt" "south" "farming" "mining" "rim" "forest" + not attributes "station" "urban" + distance 4 30 + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" + on visit + dialog phrase "generic passenger on visit" + on complete + payment 100000 100 + dialog "The colonists hand you before departing your ship, eager to start their new life on ." mission "Stranded Field Trip" name "Stranded field trip to " @@ -2305,8 +2501,7 @@ mission "Stranded Field Trip" passengers 20 4 .1 cargo "educational supplies" 2 10 .6 to offer - random < 10 - "passenger space" > 30 + random < ( "passenger space" - 30 ) / 2 source attributes "near earth" "deep" "paradise" "tourism" government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" @@ -2318,8 +2513,7 @@ mission "Stranded Field Trip" on visit dialog phrase "generic passenger on visit" on complete - payment - payment 10000 + payment 100000 120 dialog `The students excitedly rush off your ship into the arms of their waiting parents. The adventure was fun, but they're very pleased to be safely home after so long. The school deposits into your account.` mission "Prisoners [0]" diff --git a/data/human/near earth jobs.txt b/data/human/near earth jobs.txt index 307d51759d9d..55ecfdb7c96e 100644 --- a/data/human/near earth jobs.txt +++ b/data/human/near earth jobs.txt @@ -15,7 +15,7 @@ mission "Historical field trip to " job repeat description `These school students need to reach by for a historical field trip. The school will pay you .` - passengers 20 100 + passengers 15 5 .1 deadline to offer random < 10 @@ -100,6 +100,41 @@ mission "To Earth Day celebration [1]" dialog `Spaceport workers already festively dressed for Earth Day remove the cargo of from your ship and hand you your payment of .` +mission "To Earth Day celebration [2]" + name `Earth Day celebration` + job + repeat + description `Bring to by for the Earth Day celebration on April 22nd. Payment is .` + passengers 15 5 .1 + deadline 0 2 + to offer + random < ( "passenger space" - 30 ) * 2 + or + and + random < 60 + month == 2 + day >= 6 + and + random < 80 + month == 3 + and + random < 20 + month == 4 + day < 22 + "days until year end" - 2 * "hyperjumps to system: Sol" > 253 + to fail + month * 100 + day >= 422 + source + near "Sol" 1 15 + government "Republic" "Free Worlds" "Syndicate" "Neutral" + destination "Earth" + on visit + dialog phrase "generic passenger on visit" + on complete + payment 1000 120 + dialog "You wish your the best of luck on . After collecting your payment of , your put on their Earth Day hats and leave with their belongings." + + mission "From Earth Day celebration [0]" name `Return from Earth Day` job @@ -162,6 +197,37 @@ mission "From Earth Day celebration [1]" dialog `Your passengers thank you for returning them to , and you collect your payment of .` +mission "From Earth Day celebration [2]" + name `Return from Earth Day` + job + repeat + description `Bring home to after the Earth Day celebration. Payment is .` + passengers 15 5 .1 + to offer + random < ( "passenger space" - 30 ) * 2 + or + and + random < 50 + month == 4 + day > 22 + and + random < 30 + month == 5 + and + random < 10 + month == 6 + day <= 22 + source "Earth" + destination + distance 1 15 + government "Republic" "Free Worlds" "Syndicate" "Neutral" + on visit + dialog phrase "generic passenger on visit" + on complete + payment 1000 100 + dialog `Your passengers thank you for returning them to , and you collect your payment of .` + + mission "Transport farmers to Mars" job repeat diff --git a/data/human/paradise world jobs.txt b/data/human/paradise world jobs.txt index 834d7cac2701..99b211d34237 100644 --- a/data/human/paradise world jobs.txt +++ b/data/human/paradise world jobs.txt @@ -376,7 +376,7 @@ mission "Transport high-class tourists" description "Bring outrageously wealthy tourists on a fabulous journey to the wild and exotic world of . They'll only consider thinking about your ship if you have the 'appropriate facilities' for a comfortable journey. Payment is ." job repeat - passengers 8 22 + passengers 5 5 .37 to offer random < 10 to accept @@ -393,6 +393,28 @@ mission "Transport high-class tourists" payment 25000 250 +mission "Transport high-class tourist group" + description "Bring outrageously wealthy tourists on a fabulous journey to the wild and exotic world of . They'll only consider thinking about your ship if you have the 'appropriate facilities' for a comfortable journey. Payment is ." + job + repeat + passengers 15 5 .15 + to offer + random < 30 + random < "passenger space" - 35 + to accept + has "outfit (installed): Luxury Accommodations" + source + attributes "paradise" + destination + attributes "religious" "quarg" "pirate" "volcanic" "frontier" + distance 8 20 + on visit + dialog phrase "generic passenger on visit" + on complete + dialog "Your passengers begin to wander off, some of them sporting puzzled looks as the memories of glossy photos in the brochures give way to reality. You collect your payment of ." + payment 25000 170 + + mission "Pleasure cruise security" description "Escort the on a pleasure cruise to the wild and exotic planet of along with of their , then return to , where you will be paid ." job @@ -447,8 +469,7 @@ mission "Paradise Job: Parolees" on visit dialog phrase "generic passenger on visit" on complete - payment - payment 10000 + payment 170000 110 dialog "The passengers shuffle unhappily out of the ship under the watchful eye of a local security force as they prepare to repay their debts to society. A clerk on checks their condition as they're led off. He seems mostly pleased and hands you your payment of ." @@ -471,8 +492,7 @@ mission "Paradise Job: Debtors" on visit dialog phrase "generic passenger on visit" on complete - payment - payment 10000 + payment 170000 110 dialog "The passengers shuffle unhappily out of the ship under the watchful eye of immigration officials. A grinning job service provider is on hand to pay you the you are owed." diff --git a/data/human/rim jobs.txt b/data/human/rim jobs.txt index 03be7aae4a04..e2d0c0da5fd6 100644 --- a/data/human/rim jobs.txt +++ b/data/human/rim jobs.txt @@ -173,3 +173,36 @@ mission "Han Sizer Month [2]" on complete payment 20000 170 dialog `Your guests thank you for taking them on a journey along the flight path of Han Sizer and cheerfully pay you . You notice one has a star chart open to Sabik's entry as they head off.` + + +mission "Han Sizer Month [3]" + name `Han Sizer celebration` + job + repeat + description `In celebration of Han Sizer month, bring to all the marked systems and return to for .` + passengers 25 4 .1 + substitutions + "" "near here" + has "flagship planet: Longjump" + "" "on Longjump" + not "flagship planet: Longjump" + to offer + random < "passenger space" - 30 + month == 8 + source + attributes "rim" + stopover + distance 2 3 + attributes "rim" + not attributes "station" + stopover + distance 3 4 + attributes "rim" + not attributes "station" + stopover + distance 5 10 + attributes "rim" + not attributes "station" + on complete + payment 150000 110 + dialog `Your passengers are excited to have completed their journey around the Rim and pay you the agreed fee of . One is already uploading a travelogue to someone as they start walking away.` diff --git a/data/human/syndicate jobs.txt b/data/human/syndicate jobs.txt index 0e812a4d0568..90666af07679 100644 --- a/data/human/syndicate jobs.txt +++ b/data/human/syndicate jobs.txt @@ -40,7 +40,7 @@ mission "Corporate retreat to " repeat deadline description "A team of engineers needs transport to a corporate retreat on , after which they must return back to by . They want a comfortable journey, so your ship must be outfitted suitably. Payment is ." - passengers 7 18 + passengers 3 10 .56 to offer random < 20 to accept @@ -59,6 +59,32 @@ mission "Corporate retreat to " dialog "The team's boss thanks you for a smooth trip and authorizes a payment of ." +mission "Large Corporate retreat" + name "Corporate retreat to " + job + repeat + deadline + description "A team of engineers needs transport to a corporate retreat on , after which they must return back to by . They want a comfortable journey, so your ship must be outfitted suitably. Payment is ." + passengers 20 6 .15 + to offer + random < 20 + random < ( "passenger space" - 25 ) * 2 + to accept + has "outfit (installed): Luxury Accommodations" + source + government "Syndicate" + stopover + attributes "quarg" "volcanic" "frontier" "north" "south" + not attributes "station" "military" + distance 3 12 + government "Republic" "Free Worlds" "Syndicate" "Neutral" "Independent" "Quarg" + on stopover + dialog "For days your ship has played host to endless discussions about load calculations, tensile strengths, and thermodynamic limits. You're grateful for some peace and quiet as the team of engineers tromps out of the hatch and heads for their exotic corporate retreat. You prepare for the return journey to ." + on complete + payment 130000 110 + dialog "The team's boss thanks you for a smooth trip and authorizes a payment of ." + + mission "Corporate espionage" description "The is about to enter this system. Intercept it and make detailed scans of its cargo for Syndicate researchers on ; proceed there before for after retrieving the data." job @@ -439,7 +465,7 @@ mission "Syndicate Prisoner Transport [4]" job repeat description `Transport a group of detained labor organizers to for "processing" as suspected terrorists. They must be held in suitable facilities made for the transfer of criminals. Payment is .` - passengers 3 15 + passengers 3 10 .56 source government "Syndicate" attributes "factory" "farming" "mining" @@ -465,7 +491,7 @@ mission "Return Syndicate Prisoners [0]" repeat description `Transport an acquitted white-collar criminal with his assistants, lawyers, and collection of home to . He requires a suitably comfortable ship for the journey. Payment is .` cargo "Luxury Goods" 1 10 - passengers 5 12 + passengers 3 10 .56 source government "Syndicate" attributes "rich" From af25e092f8355116cc2ecae524bf62d7bca3e210 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 24 Sep 2023 20:30:25 +0200 Subject: [PATCH 30/79] fix(mechanics): The player takes off from the stellar object they landed on when other objects link to the same planet (#9324) --- source/Engine.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/Engine.cpp b/source/Engine.cpp index 6f54608288f6..431177812a05 100644 --- a/source/Engine.cpp +++ b/source/Engine.cpp @@ -352,7 +352,8 @@ void Engine::Place() const Personality &person = ship->GetPersonality(); bool hasOwnPlanet = ship->GetPlanet(); bool launchesWithPlayer = (planet && planet->CanLand(*ship)) - && !(person.IsStaying() || person.IsWaiting() || hasOwnPlanet); + && !person.IsStaying() && !person.IsWaiting() + && (!hasOwnPlanet || (ship->IsYours() && ship->GetPlanet() == planet)); const StellarObject *object = hasOwnPlanet ? ship->GetSystem()->FindStellar(ship->GetPlanet()) : nullptr; // Default to the player's planet in the case of data definition errors. From bfac366e8e297446f99e1ce2724659cb383ca40e Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 24 Sep 2023 21:12:44 +0200 Subject: [PATCH 31/79] perf: Only generate planet labels once when entering a system (#9339) --- source/Engine.cpp | 4 +++- source/Engine.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/source/Engine.cpp b/source/Engine.cpp index 431177812a05..ea05d1ec8c8e 100644 --- a/source/Engine.cpp +++ b/source/Engine.cpp @@ -505,8 +505,9 @@ void Engine::Step(bool isActive) centerVelocity = flagship->Velocity(); if(flagship->IsHyperspacing() && Preferences::Has("Extended jump effects")) centerVelocity *= 1. + pow(flagship->GetHyperspacePercentage() / 20., 2); - if(doEnter) + if(doEnterLabels) { + doEnterLabels = false; // Create the planet labels as soon as we entered a new system. labels.clear(); for(const StellarObject &object : player.GetSystem()->Objects()) @@ -1265,6 +1266,7 @@ void Engine::EnterSystem() return; doEnter = true; + doEnterLabels = true; player.IncrementDate(); const Date &today = player.GetDate(); diff --git a/source/Engine.h b/source/Engine.h index af4ef1e56f5b..6852258737a0 100644 --- a/source/Engine.h +++ b/source/Engine.h @@ -230,6 +230,7 @@ class Engine { int alarmTime = 0; double flash = 0.; bool doFlash = false; + bool doEnterLabels = false; bool doEnter = false; bool hadHostiles = false; From c50e944aa0c7c6cc27cc929aa3173e6cdc14dfe2 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 24 Sep 2023 21:16:24 +0200 Subject: [PATCH 32/79] fix(build): Correctly add compiler flags for main.cpp (#9337) --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d9762206cd7c..afb466a83f3f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -226,7 +226,7 @@ else() endif() # Link with the library dependencies. -target_link_libraries(EndlessSky PRIVATE ExternalLibraries $ $) +target_link_libraries(EndlessSky PRIVATE ExternalLibraries EndlessSkyLib $) # Copy the MinGW runtime DLLs if necessary. if(MINGW AND WIN32) From aed90d922c89e519abd872eb7ea2a9c4899300cd Mon Sep 17 00:00:00 2001 From: Arachi-Lover <82293490+Arachi-Lover@users.noreply.github.com> Date: Sun, 24 Sep 2023 16:20:47 -0300 Subject: [PATCH 33/79] fix(content): Coalition Intro Tweaks (#9340) --- data/coalition/heliarch intro.txt | 1 - data/coalition/lunarium intro.txt | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index 77aac2a3a296..fc0de1b37ec3 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -1467,7 +1467,6 @@ mission "Heliarch Containment 4-A" description "Escort three Kimek Spires full of Heliarch agents to , where they hope the use of civilian ships will give them the element of surprise." to offer has "event: plasma turret available" - has "Heliarch Containment 2: done" has "Heliarch Containment 3: done" not "Lunarium: Questions: done" not "assisting lunarium" diff --git a/data/coalition/lunarium intro.txt b/data/coalition/lunarium intro.txt index 476b4345b326..b815ed85d803 100644 --- a/data/coalition/lunarium intro.txt +++ b/data/coalition/lunarium intro.txt @@ -1326,6 +1326,7 @@ mission "Lunarium: Propaganda 1" destination "Bright Echo" to offer random < 25 + has "Coalition: First Contact: done" not "Heliarch License: done" not "assisting heliarchy" on offer From d44f1c030824eedc54e4ca621a5486552e52703e Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 24 Sep 2023 21:51:03 +0200 Subject: [PATCH 34/79] perf: Batch apply the changes from multiple events occurring at once (#9333) --- source/GameEvent.cpp | 13 ++++++++----- source/GameEvent.h | 4 +++- source/PlayerInfo.cpp | 5 ++++- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/source/GameEvent.cpp b/source/GameEvent.cpp index d3e45715261b..8c97141ccc1b 100644 --- a/source/GameEvent.cpp +++ b/source/GameEvent.cpp @@ -218,16 +218,15 @@ void GameEvent::SetDate(const Date &date) -void GameEvent::Apply(PlayerInfo &player) +// Apply this event's changes to the player. Returns a list of data changes that need to +// be applied in a batch with other events that are applied at the same time. +list GameEvent::Apply(PlayerInfo &player) { if(isDisabled) - return; + return {}; // Apply this event's ConditionSet to the player's conditions. conditionsToApply.Apply(player.Conditions()); - // Apply (and store a record of applying) this event's other general - // changes (e.g. updating an outfitter's inventory). - player.AddChanges(changes); for(const System *system : systemsToUnvisit) player.Unvisit(*system); @@ -240,6 +239,10 @@ void GameEvent::Apply(PlayerInfo &player) player.Visit(*system); for(const Planet *planet : planetsToVisit) player.Visit(*planet); + + // Return this event's data changes so that they can be batch applied + // with the changes from other events. + return std::move(changes); } diff --git a/source/GameEvent.h b/source/GameEvent.h index e3d5bad1aa74..540977d9a4e6 100644 --- a/source/GameEvent.h +++ b/source/GameEvent.h @@ -67,7 +67,9 @@ class GameEvent { const Date &GetDate() const; void SetDate(const Date &date); - void Apply(PlayerInfo &player); + // Apply this event's changes to the player. Returns a list of data changes that need to + // be applied in a batch with other events that are applied at the same time. + std::list Apply(PlayerInfo &player); const std::list &Changes() const; diff --git a/source/PlayerInfo.cpp b/source/PlayerInfo.cpp index 222e8b7b50ff..1bc3d57cf80e 100644 --- a/source/PlayerInfo.cpp +++ b/source/PlayerInfo.cpp @@ -706,16 +706,19 @@ void PlayerInfo::IncrementDate() // Check if any special events should happen today. auto it = gameEvents.begin(); + list eventChanges; while(it != gameEvents.end()) { if(date < it->GetDate()) ++it; else { - it->Apply(*this); + eventChanges.splice(eventChanges.end(), it->Apply(*this)); it = gameEvents.erase(it); } } + if(!eventChanges.empty()) + AddChanges(eventChanges); // Check if any missions have failed because of deadlines and // do any daily mission actions for those that have not failed. From 980d56dadaf6982c1957f665abdbb2477fe531c5 Mon Sep 17 00:00:00 2001 From: Dzmitry <40037467+AmbushedRaccoon@users.noreply.github.com> Date: Sun, 24 Sep 2023 23:35:23 +0300 Subject: [PATCH 35/79] feat(ui): Messages about being unable to land now use the "Highest" message importance (#9338) --- source/AI.cpp | 7 ++++++- source/Engine.cpp | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/source/AI.cpp b/source/AI.cpp index a009b16e153f..cf5b442de7c6 100644 --- a/source/AI.cpp +++ b/source/AI.cpp @@ -4015,6 +4015,8 @@ void AI::MovePlayer(Ship &ship, const PlayerInfo &player, Command &activeCommand if(landIt == landables.cend()) target = nullptr; + Messages::Importance messageImportance = Messages::Importance::High; + if(target && (ship.Zoom() < 1. || ship.Position().Distance(target->Position()) < target->Radius())) { // Special case: if there are two planets in system and you have one @@ -4033,6 +4035,7 @@ void AI::MovePlayer(Ship &ship, const PlayerInfo &player, Command &activeCommand { message = "The authorities on this " + next->GetPlanet()->Noun() + " refuse to clear you to land here."; + messageImportance = Messages::Importance::Highest; Audio::Play(Audio::Get("fail")); } else if(next != target) @@ -4071,12 +4074,14 @@ void AI::MovePlayer(Ship &ship, const PlayerInfo &player, Command &activeCommand if(!target) { message = "There are no planets in this system that you can land on."; + messageImportance = Messages::Importance::Highest; Audio::Play(Audio::Get("fail")); } else if(!target->GetPlanet()->CanLand()) { message = "The authorities on this " + target->GetPlanet()->Noun() + " refuse to clear you to land here."; + messageImportance = Messages::Importance::Highest; Audio::Play(Audio::Get("fail")); } else if(!types.empty()) @@ -4099,7 +4104,7 @@ void AI::MovePlayer(Ship &ship, const PlayerInfo &player, Command &activeCommand message = "Landing on " + target->Name() + "."; } if(!message.empty()) - Messages::Add(message, Messages::Importance::High); + Messages::Add(message, messageImportance); } else if(activeCommands.Has(Command::JUMP | Command::FLEET_JUMP)) { diff --git a/source/Engine.cpp b/source/Engine.cpp index ea05d1ec8c8e..51a3c5d5f8b3 100644 --- a/source/Engine.cpp +++ b/source/Engine.cpp @@ -2015,7 +2015,7 @@ void Engine::HandleMouseClicks() { if(!planet->CanLand(*flagship)) Messages::Add("The authorities on " + planet->Name() - + " refuse to let you land.", Messages::Importance::High); + + " refuse to let you land.", Messages::Importance::Highest); else { activeCommands |= Command::LAND; From 80609c8b2dd0b112d66135e425a50c3f4fb0535f Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 24 Sep 2023 22:54:58 +0200 Subject: [PATCH 36/79] fix(internal): Correctly use SDL_GetPrefPath (#9296) --- source/Files.cpp | 60 +++++++++++++++++++++++++++--------------------- source/Files.h | 1 + 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/source/Files.cpp b/source/Files.cpp index 1f7211758d0d..1578073e8b0a 100644 --- a/source/Files.cpp +++ b/source/Files.cpp @@ -140,44 +140,37 @@ void Files::Init(const char * const *argv) if(config.empty()) { - // Find the path to the directory for saved games (and create it if it does - // not already exist). This can also be overridden in the command line. - char *str = SDL_GetPrefPath("endless-sky", "saves"); + // Create the directory for the saved games, preferences, etc., if necessary. + char *str = SDL_GetPrefPath(nullptr, "endless-sky"); if(!str) - throw runtime_error("Unable to get path to saves directory!"); - - savePath = str; -#if defined _WIN32 - FixWindowsSlashes(savePath); -#endif + throw runtime_error("Unable to get path to config directory!"); + config = str; SDL_free(str); - if(savePath.back() != '/') - savePath += '/'; - config = savePath.substr(0, savePath.rfind('/', savePath.length() - 2) + 1); } - else - { -#if defined _WIN32 - FixWindowsSlashes(config); + +#ifdef _WIN32 + FixWindowsSlashes(config); #endif - if(config.back() != '/') - config += '/'; - savePath = config + "saves/"; - } + if(config.back() != '/') + config += '/'; + + if(!Exists(config)) + throw runtime_error("Unable to create config directory!"); + + savePath = config + "saves/"; + CreateFolder(savePath); // Create the "plugins" directory if it does not yet exist, so that it is // clear to the user where plugins should go. - { - char *str = SDL_GetPrefPath("endless-sky", "plugins"); - if(str != nullptr) - SDL_free(str); - } + CreateFolder(config + "plugins/"); // Check that all the directories exist. if(!Exists(dataPath) || !Exists(imagePath) || !Exists(soundPath)) throw runtime_error("Unable to find the resource directories!"); if(!Exists(savePath)) - throw runtime_error("Unable to create config directory!"); + throw runtime_error("Unable to create save directory!"); + if(!Exists(config + "plugins/")) + throw runtime_error("Unable to create plugins directory!"); } @@ -561,6 +554,21 @@ void Files::Write(FILE *file, const string &data) +void Files::CreateFolder(const std::string &path) +{ + if(Exists(path)) + return; + +#ifdef _WIN32 + CreateDirectoryW(Utf8::ToUTF16(path).c_str(), nullptr); +#else + mkdir(path.c_str(), 0700); +#endif +} + + + + // Open this user's plugins directory in their native file explorer. void Files::OpenUserPluginFolder() { diff --git a/source/Files.h b/source/Files.h index 1a9d82dd666d..646127384cc0 100644 --- a/source/Files.h +++ b/source/Files.h @@ -68,6 +68,7 @@ class Files { static std::string Read(FILE *file); static void Write(const std::string &path, const std::string &data); static void Write(FILE *file, const std::string &data); + static void CreateFolder(const std::string &path); // Open this user's plugins directory in their native file explorer. static void OpenUserPluginFolder(); From 4b449e32497a7317146b6b50e78dd03504e98d8e Mon Sep 17 00:00:00 2001 From: roadrunner56 <65418682+roadrunner56@users.noreply.github.com> Date: Mon, 25 Sep 2023 07:35:52 -0600 Subject: [PATCH 37/79] fix(typo): Typo in 'Refugees to Humanika' (#9343) --- data/human/human missions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/human/human missions.txt b/data/human/human missions.txt index 22a9c687a4b6..89714e93e217 100644 --- a/data/human/human missions.txt +++ b/data/human/human missions.txt @@ -6803,7 +6803,7 @@ mission "FW Refugees to Humanika" ` (Approach them.)` ` (Ignore them.)` defer - ` The parents introduce themselves as Penny Little and Rosa Perkins. Their young child is named Eduardo. Penny asks, "any chance you're willing to take us and of our belongings to ? We're concerned that the war between the Republic and the Free Worlds is going to get dangerous, so we want to raise Eduardo on a Quarg planet instead. We can pay ."` + ` The parents introduce themselves as Penny Little and Rosa Perkins. Their young child is named Eduardo. Penny asks, "Any chance you're willing to take us and of our belongings to ? We're concerned that the war between the Republic and the Free Worlds is going to get dangerous, so we want to raise Eduardo on a Quarg planet instead. We can pay ."` label "main choice" choice ` "Why were all those other captains refusing to take you?"` From 95b5c4e95f715c2a13c201396d6dda5ea33d8cf7 Mon Sep 17 00:00:00 2001 From: ziproot <109186806+ziproot@users.noreply.github.com> Date: Mon, 25 Sep 2023 16:18:36 -0400 Subject: [PATCH 38/79] fix(content): Correct offer condition of "Care Package to South 3a" to refer to the previous mission, instead of itself (#9348) --- data/human/human missions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/human/human missions.txt b/data/human/human missions.txt index 89714e93e217..2984e24ded49 100644 --- a/data/human/human missions.txt +++ b/data/human/human missions.txt @@ -6374,7 +6374,7 @@ mission "Care Package to South 3a" landing invisible to offer - has "Care Package to South 3a: offered" + has "Care Package to South 2a: offered" has "FW Pirates: Attack 3: done" on offer conversation From 4734f5c05a82651645bf04344c4dad63a36ee64d Mon Sep 17 00:00:00 2001 From: roadrunner56 <65418682+roadrunner56@users.noreply.github.com> Date: Mon, 25 Sep 2023 14:20:33 -0600 Subject: [PATCH 39/79] fix(typo): Correct references to the types of passengers in two intra-Sol jobs (#9347) --- data/human/near earth jobs.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/human/near earth jobs.txt b/data/human/near earth jobs.txt index 55ecfdb7c96e..986d96799720 100644 --- a/data/human/near earth jobs.txt +++ b/data/human/near earth jobs.txt @@ -242,7 +242,7 @@ mission "Transport farmers to Mars" on complete payment payment 2000 - dialog "You wish the workers the best of luck on , and collect your payment of ." + dialog "You wish the farmers the best of luck on , and collect your payment of ." mission "Transport tourists to Luna" @@ -259,7 +259,7 @@ mission "Transport tourists to Luna" on complete payment payment 2000 - dialog "You wish the workers the best of luck on , and collect your payment of ." + dialog "You wish the tourists the best of luck on , and collect your payment of ." mission "Transport seasonal workers to Earth" job From 5f5b7660fc48d0d77c6b7c3db59d32f3d8bcd549 Mon Sep 17 00:00:00 2001 From: Arachi-Lover <82293490+Arachi-Lover@users.noreply.github.com> Date: Mon, 25 Sep 2023 17:23:56 -0300 Subject: [PATCH 40/79] feat(content): Add a dialog upon destroying an NPC that must be "save"d in "Heliarch Drills 3" (#9342) --- data/coalition/heliarch intro.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index fc0de1b37ec3..40f1dd7b5843 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -2014,10 +2014,9 @@ mission "Heliarch Drills 3" government "Heliarch Test Dummy" personality disables staying nemesis heroic system "Torbab" - fleet - names "heliarch" - variant - "Heliarch Punisher (Scrappy)" + ship "Heliarch Punisher (Scrappy)" "Awaiting Adversary" + on kill + dialog `The Punisher's captain tries to hail you as the ship collapses around them, but you never get to hear their final cries. You have failed to simply disable the ship, and doomed the entire crew. It seems that you will not be welcome in Coalition space any longer.` on accept "assisting heliarchy" ++ on fail From bfca1e085926dbf57541c1920abb03185ee0bdad Mon Sep 17 00:00:00 2001 From: Arachi-Lover <82293490+Arachi-Lover@users.noreply.github.com> Date: Mon, 25 Sep 2023 23:02:45 -0300 Subject: [PATCH 41/79] feat(content): "Towards" to "Toward" in Coalition Files (#9352) --- data/coalition/coalition missions.txt | 12 ++++++------ data/coalition/heliarch intro.txt | 4 ++-- data/coalition/lunarium intro.txt | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/data/coalition/coalition missions.txt b/data/coalition/coalition missions.txt index ede75dc44941..22cb694a525f 100644 --- a/data/coalition/coalition missions.txt +++ b/data/coalition/coalition missions.txt @@ -1420,7 +1420,7 @@ mission "Coalition: Alpha Encounter" event "alitis freed" 1095 log "Minor People" "Alitis" `Alitis, formerly known as Athis, is an Alpha who lives in the Coalition. Centuries ago, he stole a jump drive from an alien ship and used it to explore, but after some sort of encounter in the galactic east, he decided to give up on his former life.` conversation - `You're window-browsing a shop in the spaceport when you catch the scuff of too quick footsteps coming towards you. Before you can glance in that direction, you're suddenly tackled into the ground by someone astonishingly human-shaped. You try to get up, but whoever attacked you pins you down, pressing your face into the ground and holding your arms behind your back to restrain you. As you struggle against your attacker you manage to catch sight of long hair and then, with a flash of concern, a glimpse of green skin - an Alpha.` + `You're window-browsing a shop in the spaceport when you catch the scuff of too quick footsteps coming toward you. Before you can glance in that direction, you're suddenly tackled into the ground by someone astonishingly human-shaped. You try to get up, but whoever attacked you pins you down, pressing your face into the ground and holding your arms behind your back to restrain you. As you struggle against your attacker you manage to catch sight of long hair and then, with a flash of concern, a glimpse of green skin - an Alpha.` ` You are not pressed for long though. You feel the Alpha's attention shift to the side you cannot see, as an Arach swoops in with a tackle. The Alpha lets go of your arms in an attempt to block the attack, but it does not prevent the Arach from bowling them clear off of you where the two begin to wrestle in your line of sight. The Alpha is a man and, surprisingly to you, despite his strength, it doesn't take long for the Arach Heliarch to restrain your attacker. The Arach firmly pins his arms to his torso with four legs, holds his hips down with two, and uses her last pair to lever herself until she rests her entire body weight into pinning the Alpha.` ` A Saryd Heliarch approaches and tells you to keep your distance before interposing himself partially between you and your assailant. He then looks at the Alpha and asks through his translator box, "What reason for attacking this person, did you have?"` ` The Alpha is still struggling to try and get out of the Arach's grip, and you notice an intricate gold necklace which has splayed across his shoulder and onto the floor in the scuffle, jangling in the quiet every time he struggles. At this point, everyone else has cleared out of the area and is giving the scene a wide berth. As you get to your feet he ignores the Saryd's question and looks at you intensely. "You're with the Navy, aren't you? Finally figured out I was here, thought you'd finish the job?"` @@ -1486,7 +1486,7 @@ mission "Saryd University Lecture" destination "Shadow of Leaves" on offer conversation - `As you exit a restaurant in the spaceport, you notice a rumpled-looking Saryd staring at you. Attention from others is not new for you in Coalition space, as you are quite an unusual sight here. You don't pay him much mind until he begins to gallop towards you, hailing you down.` + `As you exit a restaurant in the spaceport, you notice a rumpled-looking Saryd staring at you. Attention from others is not new for you in Coalition space, as you are quite an unusual sight here. You don't pay him much mind until he begins to gallop toward you, hailing you down.` ` "Captain! Excited to finally meet you, I am. Heard of the human in our space, I have, but to see you myself, special it is."` ` "A scientist, I am, and invited to speak at a university seminar, I have been. Be there by , I must. The honor of transporting me to , will you give me?"` choice @@ -1906,14 +1906,14 @@ mission "Coalition: Pilgrimage 5" goto shrine ` "Sorry, but I'd rather rest in the ship."` ` She takes a step back, looking down to the bangle again. "Alright. Yes, your responsibility, this is not. Meet you in the spaceport later, I shall."` - ` You open the hatch for her, and she heads to one of the Saryds nearby and begins to talk to them. A few seconds into the conversation, they tense up, crossing their arms and swiping them down as if refusing something, then running off. She tries again with some of the other Saryds, but continues to be rejected. She looks back at your ship dejectedly, then starts eyeing the other ships docked nearby before heading towards a Kimek Thorn that has just landed. As she talks to the captain, the Kimek seems confused, but after a moment he briefly reenters their ship, returning in a puffy coat to follow Vellorae to the railway hub.` + ` You open the hatch for her, and she heads to one of the Saryds nearby and begins to talk to them. A few seconds into the conversation, they tense up, crossing their arms and swiping them down as if refusing something, then running off. She tries again with some of the other Saryds, but continues to be rejected. She looks back at your ship dejectedly, then starts eyeing the other ships docked nearby before heading toward a Kimek Thorn that has just landed. As she talks to the captain, the Kimek seems confused, but after a moment he briefly reenters their ship, returning in a puffy coat to follow Vellorae to the railway hub.` ` Long after the sun has set, the Kimek returns, rushing to their ship while trying to shake off the cold. You ask them about Vellorae, and they tell you she headed for the spaceport to "clear her head."` accept label shrine ` She takes a long, deep breath. "Thank you, Captain. Far outside the village, the site is. Come, show you the way there, I will." You leave your ship, follow her to the railway hub, and board one of trains that appears to be one of the oldest and most simple. It lacks seats for non-Saryds, so you are forced to hold tight to what handrails you can reach.` ` You remain on the train until the very last stop, when the sun is already starting to set. As you depart, you see a rural village with just a few dozen buildings and a simple dirt road, where a couple workers battle the snow and ice to keep it clear and easy to traverse. You follow Vellorae down the road, and once you reach a rocky pillar with a hole carved through it, she turns to the forest, heading out on a thin, straight trail. Looking behind you, you see the setting sun fitting inside the pillar's opening.` ` As you follow Vellorae down the trail, you see the trees gradually show more and more signs of a forest fire, with darker, damaged barks, increasingly ashy soil, and many fallen, decomposing portions of the forest. The trail ends abruptly at a large scar scorched through the forest. The piles of ash still present below your feet almost resemble the rest of the planet's otherwise snowy ground, but somehow are kept from mixing with the snow. Whether deliberately cleared by more workers or some other force, you cannot tell. Near the center of the scar you see a small mound with an opening in the side, almost like a "shack" made out of the charred tree trunks and rocks. A faint light comes from within it.` - ` While you're looking at the mound, Vellorae grabs your hand and starts hesitantly pulling you towards it. Inside, the fading sunlight behind you contrasts with the source of the light within, a small pyre in the middle of the "shack" which has only a few lone flames dancing on the embers. Vellorae lays down in front of it, removes her bangle, and places it in the flames for a brief moment before snatching it up and standing again. Once on her feet, she grabs your hand again, tugging you along as she hurries back to the edge of the scorched clearing.` + ` While you're looking at the mound, Vellorae grabs your hand and starts hesitantly pulling you toward it. Inside, the fading sunlight behind you contrasts with the source of the light within, a small pyre in the middle of the "shack" which has only a few lone flames dancing on the embers. Vellorae lays down in front of it, removes her bangle, and places it in the flames for a brief moment before snatching it up and standing again. Once on her feet, she grabs your hand again, tugging you along as she hurries back to the edge of the scorched clearing.` ` She seems to settle again once you have reached the trail, letting go of your hand and slowing her pace.` choice ` "What was that about? What got you so agitated?"` @@ -2326,7 +2326,7 @@ mission "Coalition: Submarines 4" ` "Let's see..." Apri'ie heads to the prop to check on the welded parts. "Yes, very good. Performed well, the welder arms have. Good for deployment, they should be." The submarines go ahead once again, lighting the way back to the port as the ships follow them until docking.` goto end label refuse - ` He heads to the tanker, and the ships set off, following the submarines. You walk for a while by the spaceport, stopping at a restaurant to have a Saryd pastry dish. You return to the port at sunset and wait until you finally spot the submarines' lights on the horizon heading towards the shore.` + ` He heads to the tanker, and the ships set off, following the submarines. You walk for a while by the spaceport, stopping at a restaurant to have a Saryd pastry dish. You return to the port at sunset and wait until you finally spot the submarines' lights on the horizon heading toward the shore.` ` "Worked perfectly, the welders have. Ready for deployment, the subs should be," Apri'ie tells you as he steps off of the tanker.` label end ` The subs are once again placed atop the sleds and brought into your ship. Apri'ie thanks the Kimek team for handling the subs and heads back into your ship, saying, "Time for their final trip, it is. Bring the vessels and I to , you may."` @@ -2425,7 +2425,7 @@ mission "Coalition: Expeditions Past 2" ` "Approval for us to leave, they gave me, but provide any further assistance - be that a jump drive, or funding - they won't," she explains. "Saved up well over the past few years, I have, so once done we are, pay you several million credits, I shall. But, who knows, maybe if exciting enough, our findings out there are, convinced to give you a bonus, the consuls might be," she smiles.` label heading ` "Ready to go outside, we are not. Not for the purpose of finding out about the last expedition, at least. A tool from House Idriss, we need, if to trace my ancestor's steps, we are. To , we must go."` - ` As she's about to continue, your conversation is cut short by a Kimek rushing towards you two, shouting frantically. Once he's closer, you recognize him as Arbiter Kicharri from earlier, and Sedlitaris tries to calm him down while he's catching his breath. "Professor, if about my request this is, already met with the council, I have. Approved it-"` + ` As she's about to continue, your conversation is cut short by a Kimek rushing toward you two, shouting frantically. Once he's closer, you recognize him as Arbiter Kicharri from earlier, and Sedlitaris tries to calm him down while he's catching his breath. "Professor, if about my request this is, already met with the council, I have. Approved it-"` ` "Know that, I do! Exactly what I'm furious about, that is!" He shouts. "Asked them to give you a definitive answer, I had, but not this kind of definitive! Listen, permission or not, safe to leave, it is not. Know that, you do." He looks at her for a few moments, then to you. "Captain, as her superior, greatly appreciate your intent to help Sedlitaris, I do, but too brash about this, she has been. Take her out of our space, you must not."` ` He looks at her again, as if expecting some response. When no response comes, he turns away slowly, saying, "Waste not, your life on this," and walks away. Sedlitaris sighs once he turns a corridor and says she's ready for the trip.` choice diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index 40f1dd7b5843..cfe006c407a8 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -44,7 +44,7 @@ mission "Heliarch Investigation 1" "coalition jobs" ++ payment 90000 conversation - `The three Heliarchs disembark and head immediately towards the spaceport, but not before Iplora hands you . "Speak with our superior, we must. Need your services again, we likely will, so if interested in further work, you are, look for us in the spaceport, you should." She bows her head lightly, and follows her colleagues into one of the Heliarch-only sections of the ring.` + `The three Heliarchs disembark and head immediately toward the spaceport, but not before Iplora hands you . "Speak with our superior, we must. Need your services again, we likely will, so if interested in further work, you are, look for us in the spaceport, you should." She bows her head lightly, and follows her colleagues into one of the Heliarch-only sections of the ring.` on fail "assisting heliarchy" -- @@ -774,7 +774,7 @@ mission "Quarg Interrogation" ` "The Heliarchs asked me to do it."` goto truth label lie - ` Around ten seconds pass without it saying anything, simply staring at your eyes and blinking slowly. "I see." Without another word, it walks away, heading towards the Wardragon.` + ` Around ten seconds pass without it saying anything, simply staring at your eyes and blinking slowly. "I see." Without another word, it walks away, heading toward the Wardragon.` accept label truth ` "And why did you agree? Do you wish to join their ranks, perhaps?" it asks.` diff --git a/data/coalition/lunarium intro.txt b/data/coalition/lunarium intro.txt index b815ed85d803..dd1b6efd5b2f 100644 --- a/data/coalition/lunarium intro.txt +++ b/data/coalition/lunarium intro.txt @@ -684,7 +684,7 @@ mission "House Bebliss 3-FW" on offer conversation `You look around for Freya, asking the local dock workers where the people researching the Pug tech left on the planet are. They direct you to a quieter, less crowded place, where some warehouse complexes have been set up. Some are painted in the usual Syndicate colors, some are guarded by a few Navy troops, and a Free Worlds flag flies by the entrance of the one you enter. Inside, you see groups of people surrounding the various artifacts the Pug left behind. Some of them are running complicated looking tests, but it seems that they are mostly discussing what to do with the artifacts next. One of the graviton transmitters sits opposite to the entrance, half intact, half dismantled, with an array of scientists poking and prodding the inside machinery.` - ` Freya is atop a ladder near the transmitter when she sees you. She quickly hops down from her perch and runs towards you. "! It's nice to see you again. What brings you here?" You tell her you have some important matters to discuss, and she has you follow her to an office-like room packed with tools and components.` + ` Freya is atop a ladder near the transmitter when she sees you. She quickly hops down from her perch and runs toward you. "! It's nice to see you again. What brings you here?" You tell her you have some important matters to discuss, and she has you follow her to an office-like room packed with tools and components.` branch lunarium has "Lunarium: Questions: done" label "don't tell" @@ -751,7 +751,7 @@ mission "House Bebliss 4-FW" goto tell ` (Don't mention the Lunarium.)` label standard - ` JJ quietly listens as you explain to him all you've learned about the Coalition. You bring up a map of the Free Worlds and show him and Freya the rough area of Coalition space and where it borders Free Worlds territory. As you gesture towards the map, you tell them of the three species, about the Heliarchs and how they've taken the three Quarg rings. Eventually you get to the Arach Houses, explaining that House Bebliss are the ones who wish to go study the Pug artifacts with Freya.` + ` JJ quietly listens as you explain to him all you've learned about the Coalition. You bring up a map of the Free Worlds and show him and Freya the rough area of Coalition space and where it borders Free Worlds territory. As you gesture toward the map, you tell them of the three species, about the Heliarchs and how they've taken the three Quarg rings. Eventually you get to the Arach Houses, explaining that House Bebliss are the ones who wish to go study the Pug artifacts with Freya.` ` When you're done, JJ is the first to speak up. "So far, we seem to be getting along better with these aliens than we did with the Pug. It's good that they're trying to be diplomatic, though I'm not sure it'd be a good idea for the general public to know of them, given past experiences. At least for right now."` ` "Do they have jump drives?" Freya asks. You nod, but say that they can't make their own. "Well, as long as what stockpile they have isn't too large, we shouldn't be in too much trouble."` ` "Except they took three Quarg rings," JJ chimes in. "They've beaten the Quarg? So they're stronger than the Quarg? More advanced?" He asks.` @@ -763,7 +763,7 @@ mission "House Bebliss 4-FW" ` They stay silent for a while, then JJ picks up the talk again. "If the Quarg have waited six thousand years, then they might wait a few thousand more. What matters now is that we know of these aliens, meaning we must start thinking about possible outcomes to all of this and what they mean for the Free Worlds. If we start preparations now, perhaps we'll get lucky and we won't get caught up in any other wars; especially wars involving the Quarg."` goto accept label tell - ` JJ quietly listens as you explain to him all you've learned about the Coalition. You bring up a map of the Free Worlds and show him and Freya the rough area of Coalition space and where it borders Free Worlds territory. As you gesture towards the map, you tell them of the three species, about the Heliarchs and how they've taken the three Quarg rings. Eventually you get to the Arach Houses, explaining that House Bebliss are the ones who wish to go study the Pug artifacts with Freya. You also tell them about the Lunarium, explaining the group's actions and their wish to take down the Heliarch government, and what role House Bebliss has in helping them.` + ` JJ quietly listens as you explain to him all you've learned about the Coalition. You bring up a map of the Free Worlds and show him and Freya the rough area of Coalition space and where it borders Free Worlds territory. As you gesture toward the map, you tell them of the three species, about the Heliarchs and how they've taken the three Quarg rings. Eventually you get to the Arach Houses, explaining that House Bebliss are the ones who wish to go study the Pug artifacts with Freya. You also tell them about the Lunarium, explaining the group's actions and their wish to take down the Heliarch government, and what role House Bebliss has in helping them.` ` When you're done, JJ is the first to speak up. "So far, we seem to be getting along better with these aliens than we did with the Pug. It's good that they're trying to be diplomatic, though I'm not sure it'd be a good idea for the general public to know of them, given past experiences. At least for right now." He pauses, then addresses you directly. "It's... bold of you to want to help this resistance group of theirs. There's some sympathy given the Free Worlds' own history, but they sound like they have an even worse shot than what we had."` ` "Whatever their government is, or whether it's overthrown or not, it doesn't change that they're right at our doorstep," Freya says. "Do they have jump drives?" she asks. You nod, but say that they can't make their own. "Well, as long as what stockpile they have isn't too large, we shouldn't be in too much trouble."` ` "Except they took three Quarg rings," JJ chimes in. "They've beaten the Quarg? So they're stronger than the Quarg? More advanced?" He asks.` @@ -1267,7 +1267,7 @@ mission "Lunarium: Evacuation 6" payment 7149832 conversation `You receive a message from Elirom as you enter the planet's airspace, passing you some coordinates and instructing you to land there instead of the usual ports here. You come to a complex in the middle of a prairie, with a blue-ish metal building at its center. As you come down for a landing, you see Elirom's own ship is landed there.` - ` Just as quickly as they entered it, your passengers rush out of your ship, greeting and hugging some of the people waiting for them. One of them, Elirom, shyly watches from the Spire, not having come down the ramp yet. The older Saryd who was accompanying the crying Saryd girl leaves her side briefly once he sees him, walking at a quick pace towards Elirom. He grabs him by the shoulders and shouts something in the Saryd language, though no translators pick it up. When he lets go of his shoulders, he goes back to accompanying the girl, and Elirom stays put. You go to him, which prompts him to reach in a pocket and grab a bunch of credit chips, handing them to you. , in total. "Told you I did, that well paid you would be."` + ` Just as quickly as they entered it, your passengers rush out of your ship, greeting and hugging some of the people waiting for them. One of them, Elirom, shyly watches from the Spire, not having come down the ramp yet. The older Saryd who was accompanying the crying Saryd girl leaves her side briefly once he sees him, walking at a quick pace toward Elirom. He grabs him by the shoulders and shouts something in the Saryd language, though no translators pick it up. When he lets go of his shoulders, he goes back to accompanying the girl, and Elirom stays put. You go to him, which prompts him to reach in a pocket and grab a bunch of credit chips, handing them to you. , in total. "Told you I did, that well paid you would be."` branch lunarium has "Lunarium: Questions: done" choice From af6ff0e0e186f57c99594ad5e8bba4f581582bde Mon Sep 17 00:00:00 2001 From: Arachi-Lover <82293490+Arachi-Lover@users.noreply.github.com> Date: Mon, 25 Sep 2023 23:06:19 -0300 Subject: [PATCH 42/79] fix(content): Missing `goto` in Heliarch Containment 3 (#9353) --- data/coalition/heliarch intro.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index cfe006c407a8..cf7770d41186 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -1433,6 +1433,7 @@ mission "Heliarch Containment 3" ` "Inform you of that, we cannot," the Kimek says. "Not until accepted our offer, you have."` choice ` "Fine. Bring me to somewhere you can tell me."` + goto way ` "That seems a bit sketchy, I'll pass."` decline label license From e8d802d6fe45dc43428ae72a15aed192bcef2113 Mon Sep 17 00:00:00 2001 From: warp-core Date: Tue, 26 Sep 2023 19:01:54 +0100 Subject: [PATCH 43/79] fix(content): Fix Heliarch License 2 (#9351) --- data/coalition/heliarch intro.txt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index cf7770d41186..51e4a60b5502 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -2087,10 +2087,11 @@ mission "Heliarch License 2" defer ` (No. I don't want to support the Heliarchs at all.)` decline - log "Was given a special circlet by the Heliarchs, which grants access to some of their technology. Was also given a translation device to freely converse with the Coalition species." - set "language: Coalition" - event "first heliarch unlock" - set "license: Heliarch" + action + log "Was given a special circlet by the Heliarchs, which grants access to some of their technology. Was also given a translation device to freely converse with the Coalition species." + set "license: Heliarch" + set "language: Coalition" + event "first heliarch unlock" ` When you land, you're met with a bit of ceremony. A trio of Heliarch consuls welcomes you, each carrying a gemstone: an emerald for the Saryd, a ruby for the Kimek, and a sapphire for the Arach. They each pass the precious stones to you, starting with the Saryd, then the Kimek, and lastly the Arach. Cameras and photographers surround the scene, kept at bay by lines of Heliarch guards. It seems your joining the ranks has turned into something of an event.` ` When the consuls are done, they have you follow them into the restricted sections of the ring, bringing you to a very large, circular room, somewhat like a colosseum or an auditorium, with hundreds of Heliarch consuls seated. There are also many more camera workers and photographers, though all of them are Heliarch members this time. You're instructed to head to the center.` ` The consuls who brought you here speak, and once again you're reminded of your "contributions and loyalty" to the Coalition. "Truly special, this ceremony is," the Arach says. "Join our ranks, for the first time, an outsider does. Contributed much and shown devotion to our Coalition, this outsider has."` @@ -2115,7 +2116,7 @@ mission "Heliarch License 2" ` When you're done, the two Heliarchs explain some more. "As of a lower rank you are, permit you access to everything and everywhere, your circlet will not. Not yet, at least. But, as mentioned, come to some of the restricted sections, you now many. On many of our worlds, find you will Heliarch outfitters, where now available some of our equipment will be. Permit you to take on some jobs we put up for Heliarch agents here in the restricted sections, the circlet also will."` ` They commend you for having joined up, and bid you farewell, having the guards now bring you back to your ship. The three Heliarch consuls who greeted you are waiting for you when you arrive, and hand you a small box which you soon realize is a translation device. "One of us you now are, Captain," the Saryd says. "Trust you we do to uphold the Coalition's values and laws."` ` The trio congratulates you once again and wishes you safe travels.` - accept + decline event "first heliarch unlock" planet "Ring of Friendship" From 1c1ab9d788331521224c60bc2f7f55dc4a93cebb Mon Sep 17 00:00:00 2001 From: warp-core Date: Wed, 27 Sep 2023 01:09:24 +0100 Subject: [PATCH 44/79] feat(content): Give the Hallucination ship a noun (#9345) --- data/human/human missions.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/data/human/human missions.txt b/data/human/human missions.txt index 2984e24ded49..0009d9c5ef9a 100644 --- a/data/human/human missions.txt +++ b/data/human/human missions.txt @@ -1313,6 +1313,7 @@ outfit "Imaginary Weapon" "tracking" 1. ship "Hallucination" + noun "flower" sprite "ship/hallucination" "frame rate" 1 "random start frame" From c6d74ba340bfb0243011c4e59fe756dcecd313c7 Mon Sep 17 00:00:00 2001 From: warp-core Date: Wed, 27 Sep 2023 01:12:09 +0100 Subject: [PATCH 45/79] fix(content): Don't give reputation penalties for aborting some Heliarch missions (#9349) The reputation penalties are only intended for objective failures. --- data/coalition/heliarch intro.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index 51e4a60b5502..d2057709afd6 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -1138,6 +1138,9 @@ mission "Heliarch Expedition 3" "assisting heliarchy" ++ on complete "assisting heliarchy" -- + # No reputation penalty for aborting this mission. + on abort + "assisting heliarchy" -- on fail "assisting heliarchy" -- "reputation: Heliarch" = -1000 @@ -1191,6 +1194,9 @@ mission "Heliarch Expedition 4" ` "True that is, but repealed, the measure that prohibits everyone leaving was not. Spoken with Arbiter Sedlitaris myself I did, and admit I must that much more at ease I now am. But, still, remain vigilant for the crew's sake, I must. Changed their opinions like me, not many of them have."` label end ` He thanks you again for your help, and with a salute bids you farewell, heading to help the Punisher's crew establish their base of operations inside the caverns. You get back in your ship and fly back to the empty docks of . Now it's a matter of waiting for the Heliarch teams here to do their job and return to the Coalition.` + # No reputation penalty for aborting this mission. + on abort + "assisting heliarchy" -- on fail "assisting heliarchy" -- "reputation: Heliarch" = -1000 @@ -2020,6 +2026,9 @@ mission "Heliarch Drills 3" dialog `The Punisher's captain tries to hail you as the ship collapses around them, but you never get to hear their final cries. You have failed to simply disable the ship, and doomed the entire crew. It seems that you will not be welcome in Coalition space any longer.` on accept "assisting heliarchy" ++ + # No reputation penalty for aborting this mission. + on abort + "assisting heliarchy" -- on fail "assisting heliarchy" -- "reputation: Heliarch" = -1000 From ab6c37e6bc5b26ccc43550e53cfb2e93d63f5b05 Mon Sep 17 00:00:00 2001 From: Arachi-Lover <82293490+Arachi-Lover@users.noreply.github.com> Date: Wed, 27 Sep 2023 01:21:50 -0300 Subject: [PATCH 46/79] feat(balance): Nerf the Refueling Module (#9341) --- copyright | 2 +- data/coalition/coalition outfits.txt | 8 ++++---- data/coalition/coalition.txt | 2 +- .../{refuelling module.png => refueling module.png} | Bin 4 files changed, 6 insertions(+), 6 deletions(-) rename images/outfit/{refuelling module.png => refueling module.png} (100%) diff --git a/copyright b/copyright index ad3954174113..7eeffb42f231 100644 --- a/copyright +++ b/copyright @@ -1449,7 +1449,7 @@ License: CC-BY-SA-4.0 Comment: Derived from works by Nate Graham (under the same license). Files: - images/outfit/refuelling?module* + images/outfit/refueling?module* Copyright: Becca Tommaso License: CC-BY-SA-4.0 Comment: Derived from works by Michael Zahniser (under the same license). diff --git a/data/coalition/coalition outfits.txt b/data/coalition/coalition outfits.txt index 31aae994988c..a247c418e239 100644 --- a/data/coalition/coalition outfits.txt +++ b/data/coalition/coalition outfits.txt @@ -225,15 +225,15 @@ outfit "Decoy Plating" description "This plating takes advantage of a ship's scan logs and reproduces the data of other ships nearby, effectively deflecting attempts to scan a ship's true cargo and equipment." description " Out of a need to protect themselves against destructive Heliarch torpedoes, the Lunarium incorporated small, independent radar jamming systems in each section of the plating, if only to act as a last line of defense." -outfit "Refuelling Module" +outfit "Refueling Module" category "Systems" cost 822000 - thumbnail "outfit/refuelling module" + thumbnail "outfit/refueling module" "mass" 10 "outfit space" -10 "fuel capacity" -100 - "fuel generation" .1 - "energy consumption" .02 + "fuel generation" .05 + "energy consumption" .11 description "To avoid the risk of being inspected by the Heliarchs as they refuel on planets, Lunarium captains employ this outfit when carrying supplies or stolen outfits." description " The outfit's mechanisms need a partitioned amount of fuel set aside to allow it to work properly, so a ship can only install so many of these before becoming incapable of jumping to another system." diff --git a/data/coalition/coalition.txt b/data/coalition/coalition.txt index 4f5603d29298..55717aea1cbb 100644 --- a/data/coalition/coalition.txt +++ b/data/coalition/coalition.txt @@ -405,7 +405,7 @@ outfitter "Heliarch Basics" "Local Map" outfitter "Lunarium Basics" - "Refuelling Module" + "Refueling Module" "Decoy Plating" "Shield Refactor Module" "Small Recovery Module" diff --git a/images/outfit/refuelling module.png b/images/outfit/refueling module.png similarity index 100% rename from images/outfit/refuelling module.png rename to images/outfit/refueling module.png From 9a12b2d9cf737345c6e98580b9ed7d7e5fa6b318 Mon Sep 17 00:00:00 2001 From: warp-core Date: Wed, 27 Sep 2023 05:25:03 +0100 Subject: [PATCH 47/79] style: Clean up Heliarch intro mission definitions (#9357) --- data/coalition/heliarch intro.txt | 271 +++++++++++++++--------------- 1 file changed, 133 insertions(+), 138 deletions(-) diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index d2057709afd6..a40696da532a 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -12,19 +12,19 @@ # this program. If not, see . mission "Heliarch Investigation 1" + minor name "Transport Heliarch Agents" description "Bring Heliarch agents to ." - minor passengers 3 + source + near "Quaru" 4 10 + destination "Ring of Friendship" to offer random < 65 "coalition jobs" >= 70 has "license: Coalition" not "Lunarium: Questions: done" not "assisting lunarium" - source - near "Quaru" 4 10 - destination "Ring of Friendship" on offer conversation `A few minutes into browsing the local shops, you hear the strong sound of Saryd hooves approaching, and turn to see a trio of Heliarch agents hurrying toward you. They briefly salute you before stating their business.` @@ -39,25 +39,25 @@ mission "Heliarch Investigation 1" accept on accept "assisting heliarchy" ++ + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- "coalition jobs" ++ payment 90000 conversation `The three Heliarchs disembark and head immediately toward the spaceport, but not before Iplora hands you . "Speak with our superior, we must. Need your services again, we likely will, so if interested in further work, you are, look for us in the spaceport, you should." She bows her head lightly, and follows her colleagues into one of the Heliarch-only sections of the ring.` - on fail - "assisting heliarchy" -- mission "Heliarch Investigation 2" name "Heliarch Investigation" description "Take the Heliarch agents to the marked planets so that they can investigate signs of criminal activity." + source "Ring of Friendship" + destination "Ring of Friendship" passengers 3 to offer has "Heliarch Investigation 1: done" not "Lunarium: Questions: done" not "assisting lunarium" - source "Ring of Friendship" - destination "Ring of Friendship" to complete has "Heliarch Investigation 2 - Mebla's Portion: done" has "Heliarch Investigation 2 - Stronghold of Flugbu: done" @@ -102,6 +102,8 @@ mission "Heliarch Investigation 2" accept on accept "assisting heliarchy" ++ + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- "assisted heliarch" ++ @@ -129,56 +131,51 @@ mission "Heliarch Investigation 2" label evidence3 ` The agents then get closer to her, and Kirrie whispers something to the consul, handing her three more reports. Iekie turns to you once more, saying, "Enviable, your prowess at investigation is, . Outstanding work, Captain."` goto finalthanks - on fail - "assisting heliarchy" -- mission "Heliarch Investigation 2 - Bonus 1" - invisible landing + invisible + source + government "Coalition" to offer has "Heliarch Investigation 2: done" "lunarium evidence" == 1 - source - government "Coalition" on offer + clear "lunarium evidence" payment 300000 conversation - action - clear "lunarium evidence" `You receive a message from the Heliarch Consul Iekie as you go in for a landing. "Captain ! Analyzed your findings, we have. Brought light to some stolen equipment, your aid has, and for that, grateful we are. Sending a monetary bonus as thanks, I am."` ` When she finishes, are transferred to your account.` decline mission "Heliarch Investigation 2 - Bonus 2" - invisible landing + invisible + source + government "Coalition" to offer has "Heliarch Investigation 2: done" "lunarium evidence" == 2 - source - government "Coalition" on offer + clear "lunarium evidence" payment 700000 conversation - action - clear "lunarium evidence" `You receive a message from the Heliarch consul Iekie as you go in for a landing. "Captain ! Analyzed your findings, we have. A great boon, your assistance was; located two stashes of our stolen equipment, we have. Investigating who was involved in such operations, my teams are. Very grateful for your help, we are, so sending a monetary bonus as thanks, I am."` ` When she finishes, are transferred to your account.` decline mission "Heliarch Investigation 2 - Bonus 3" - invisible landing + invisible + source + government "Coalition" to offer has "Heliarch Investigation 2: done" "lunarium evidence" == 3 - source - government "Coalition" on offer + clear "lunarium evidence" payment 1200000 conversation - action - clear "lunarium evidence" `You receive a message from the Heliarch Consul Iekie as you go in for a landing. "Captain ! Analyzed your findings, we have. Worry me greatly, all these stashes of stolen equipment do. Indebted to you, we are, as without your help, found all these operations, we would not have. A monetary bonus, as thanks, I am sending. Deserve it, you do, Captain."` ` When she finishes, are transferred to your account.` decline @@ -186,10 +183,10 @@ mission "Heliarch Investigation 2 - Bonus 3" mission "Heliarch Investigation 2 - Mebla's Portion" name "Investigate " description "Transport the Heliarch trio to so that they can investigate signs of criminal activity." - to offer - has "Heliarch Investigation 1: done" source "Ring of Friendship" destination "Mebla's Portion" + to offer + has "Heliarch Investigation 1: done" to fail or has "Heliarch Investigation 2: declined" @@ -279,10 +276,10 @@ mission "Heliarch Investigation 2 - Mebla's Portion" mission "Heliarch Investigation 2 - Stronghold of Flugbu" name "Investigate " description "Transport the Heliarch trio to so that they can investigate signs of criminal activity." - to offer - has "Heliarch Investigation 1: done" source "Ring of Friendship" destination "Stronghold of Flugbu" + to offer + has "Heliarch Investigation 1: done" to fail or has "Heliarch Investigation 2: declined" @@ -296,10 +293,10 @@ mission "Heliarch Investigation 2 - Stronghold of Flugbu" mission "Heliarch Investigation 2 - Shifting Sand" name "Investigate " description "Transport the Heliarch trio to so that they can investigate signs of criminal activity." - to offer - has "Heliarch Investigation 1: done" source "Ring of Friendship" destination "Shifting Sand" + to offer + has "Heliarch Investigation 1: done" to fail or has "Heliarch Investigation 2: declined" @@ -389,10 +386,10 @@ mission "Heliarch Investigation 2 - Shifting Sand" mission "Heliarch Investigation 2 - Fourth Shadow" name "Investigate " description "Transport the Heliarch trio to so that they can investigate signs of criminal activity." - to offer - has "Heliarch Investigation 1: done" source "Ring of Friendship" destination "Fourth Shadow" + to offer + has "Heliarch Investigation 1: done" to fail or has "Heliarch Investigation 2: declined" @@ -408,10 +405,10 @@ mission "Heliarch Investigation 2 - Fourth Shadow" mission "Heliarch Investigation 2 - Into White" name "Investigate " description "Transport the Heliarch trio to so that they can investigate signs of criminal activity." - to offer - has "Heliarch Investigation 1: done" source "Ring of Friendship" destination "Into White" + to offer + has "Heliarch Investigation 1: done" to fail or has "Heliarch Investigation 2: declined" @@ -525,13 +522,14 @@ mission "Heliarch Investigation 2 - Into White" ` Each one houses a Heliarch Finisher Torpedo inside, to the agents' surprise. As they open them up and reveal dozens of the torpedoes, Iplora heads out with a group of agents so that she can show them signs of the shootout with the attacker. She gives her thoughts on where they could be fleeing to, and informs another group on the layout of the local caverns before they head underground. When she's back with you, one of the captains of the Neutralizers tell you that they will handle everything from here, and has one of the ships take you two to where your own ship is parked. He leaves as you prepare to take off.` ` You head back to pick up Kirrie and Tugroob, who are excited to hear about what happened. They themselves didn't find anything, but they're content with listening to Iplora as she tells the story.` + mission "Heliarch Investigation 2 - Remote Blue" name "Investigate " description "Transport the Heliarch trio to investigate the isolated ." - to offer - has "Heliarch Investigation 1: done" source "Ring of Friendship" destination "Remote Blue" + to offer + has "Heliarch Investigation 1: done" to fail or has "Heliarch Investigation 2: declined" @@ -546,9 +544,9 @@ mission "Heliarch Investigation 2 - Remote Blue" mission "Heliarch Recon 1" + minor name "Heliarch Reconnaissance" description "Fly to all the Quarg planets and stations the Heliarch asked, land on them, let your modified ship sensors scan their surroundings, and then head back to the ." - minor source government "Heliarch" stopover "Lagrange" @@ -567,6 +565,8 @@ mission "Heliarch Recon 1" has "license: Coalition" not "Lunarium: Questions: done" not "assisting lunarium" + to fail + "reputation: Quarg" < 0 on offer require "Jump Drive" conversation @@ -597,8 +597,8 @@ mission "Heliarch Recon 1" accept on accept "assisting heliarchy" ++ - to fail - "reputation: Quarg" < 0 + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- event "heliarch recon break" 10 21 @@ -610,12 +610,10 @@ mission "Heliarch Recon 1" ` You nod, and the Kimek hits your control panel lightly with one of his legs. "No data on the rings, the sensors collected! Gone wrong, something must have."` ` They have engineers return your sensors to normal, while you explain how your ship behaved while landing on them. They speak among themselves for a while, then the Arach says, "Too straightforward an approach, we might have taken. Captain , contact you again soon, we will."` ` They hand you , and leave to one of the Heliarch sections of the ring.` - on fail - "assisting heliarchy" -- mission "Heliarch Recon Alta Hai" - invisible landing + invisible source "Alta Hai" destination "Earth" to offer @@ -626,8 +624,8 @@ mission "Heliarch Recon Alta Hai" decline mission "Heliarch Recon Forpelog" - invisible landing + invisible source "Forpelog" destination "Earth" to offer @@ -638,8 +636,8 @@ mission "Heliarch Recon Forpelog" decline mission "Heliarch Recon Grakhord" - invisible landing + invisible source "Grakhord" destination "Earth" to offer @@ -650,8 +648,8 @@ mission "Heliarch Recon Grakhord" decline mission "Heliarch Recon Kuwaru Efreti" - invisible landing + invisible source "Kuwaru Efreti" destination "Earth" to offer @@ -662,8 +660,8 @@ mission "Heliarch Recon Kuwaru Efreti" decline mission "Heliarch Recon Lagrange" - invisible landing + invisible source "Lagrange" destination "Earth" to offer @@ -676,9 +674,9 @@ mission "Heliarch Recon Lagrange" event "heliarch recon break" mission "Heliarch Recon 2-A" + landing name "Scanning Preparations" description "Install an Outfit Scanner, then land on , where the Heliarchs will modify it to be able to scan Quarg ships the way they need it." - landing source near "Ekuarik" 1 100 destination "Ring of Wisdom" @@ -703,11 +701,11 @@ mission "Heliarch Recon 2-A" accept on accept "assisting heliarchy" ++ + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- require "Outfit Scanner" - on fail - "assisting heliarchy" -- mission "Heliarch Recon 2-B" name "Silent Scan" @@ -735,6 +733,8 @@ mission "Heliarch Recon 2-B" "Quarg Wardragon" on accept "assisting heliarchy" ++ + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- "coalition jobs" ++ @@ -743,17 +743,15 @@ mission "Heliarch Recon 2-B" `Once again the engineers remove your outfit scanner, take a copy of the scan logs, and hand it to the Heliarch agents, who give you . "Grateful to you, we are, Captain ," the Saryd says. "Remember your assistance, the consul will."` ` When the engineers return, they put your outfit scanner back in place. The Heliarch agents say their goodbyes, reassuring you that the Quarg shouldn't attack you for this. "If interested in doing some investigation of your own, you wish, maybe land on their rings again, you could," the Kimek suggests. "Maybe find out something of interest for us, you will."` ` He wishes you safe travels and leaves with his colleagues.` - on fail - "assisting heliarchy" -- mission "Quarg Interrogation" - invisible landing - deadline 1 + invisible source attributes "quarg" not planet "Humanika" destination "Earth" + deadline 1 to offer has "Heliarch Recon 2-B: done" on offer @@ -798,9 +796,9 @@ mission "Quarg Interrogation" "Quarg Wardragon" mission "Heliarch Recon 3-A" + landing name "Preparations for Scanning" description "Head to , where the Heliarchs will discuss the next recon task they have for you." - landing source near "Ekuarik" 1 100 destination "Ring of Wisdom" @@ -862,16 +860,16 @@ mission "Heliarch Recon 3-A" accept on accept "assisting heliarchy" ++ + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- fail "Rim Archaeology 5B" - on fail - "assisting heliarchy" -- mission "Heliarch Recon 3-B" + landing name "Not So Silent Scan" description "Now that your ship is equipped with a Heliarch Scanning Module, head to the system and scan the Quarg Wardragon there." - landing source "Ring of Wisdom" destination "Ring of Wisdom" waypoint "Zubeneschamali" @@ -904,6 +902,10 @@ mission "Heliarch Recon 3-B" on accept "assisting heliarchy" ++ outfit "Scanning Module" 1 + on fail + "assisting heliarchy" -- + "reputation: Heliarch" = -1000 + "reputation: Coalition" = -1000 on complete "assisting heliarchy" -- "coalition jobs" ++ @@ -917,15 +919,11 @@ mission "Heliarch Recon 3-B" ` "Odd, it is, that attack the Captain, the Wardragon did not..." the Arach thinks out loud, looking at the scan data. "A fortunate thing, no doubt, but very odd of them."` ` "Much more detailed, these scans are. Certain, I am, that pleased with the results, Consul Aulori will be," the Kimek tells you. "Assisted us greatly you have, Captain."` ` They pass along a message from the consul, who thanks you for all your efforts, and asks that you seek out his agents on , should you acquire any significant information on Quarg ships or ringworlds. The Heliarchs say their goodbyes and head on their way.` - on fail - "assisting heliarchy" -- - "reputation: Heliarch" = -1000 - "reputation: Coalition" = -1000 mission "Heliarch Recon 3-C" + landing name "Not So Silent Scan" description "Now that your ship is equipped with a Heliarch Scanning Module, head to the system and scan the Quarg Wardragon there." - landing source "Ring of Wisdom" destination "Ring of Wisdom" waypoint "Zubeneschamali" @@ -955,6 +953,8 @@ mission "Heliarch Recon 3-C" ship "Quarg Wardragon" "Gloref Esa Kurayi" on accept "assisting heliarchy" ++ + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- "coalition jobs" ++ @@ -967,8 +967,6 @@ mission "Heliarch Recon 3-C" ` "Odd, it is, that attack the Captain, the Wardragon did not..." the Arach thinks out loud, looking at the scan data. "A fortunate thing, no doubt, but very odd of them."` ` "Much more detailed, these scans are. Certain, I am, that pleased with the results, Consul Aulori will be," the Kimek tells you. "Assisted us greatly you have, Captain."` ` They pass along a message from the consul, who thanks you for all your efforts, and asks that you seek out his agents on should you acquire any significant information on the Quarg ships or ringworlds. The Heliarchs say their goodbyes and head on their way.` - on fail - "assisting heliarchy" -- mission "Keep Zug Wardragon" landing @@ -987,10 +985,10 @@ mission "Keep Zug Wardragon" mission "Heliarch Expedition 1" - name "Extraterritorial Reconnaissance" - description "Head through the wormhole in Deneb, land on the planet there, and enter the system with the broken ringworld to get data for the Heliarchy." minor landing + name "Extraterritorial Reconnaissance" + description "Head through the wormhole in Deneb, land on the planet there, and enter the system with the broken ringworld to get data for the Heliarchy." source "Ring of Wisdom" stopover "Ruin" waypoint "World's End" @@ -1046,6 +1044,8 @@ mission "Heliarch Expedition 1" dialog `You fly around the mysterious world for a while, until your sensors beep in an odd way, in what you guess is the signal that the Heliarch's modifications are done doing their read on the planet.` on enter "World's End" dialog `You fire up your ship's sensors, letting it collect the data the Heliarch want for hours on end. Eventually you hear a series of beeps in a dull rhythm, and look to see that their performance is back to normal.` + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- event "heliarch expedition break 1" 22 34 @@ -1064,15 +1064,13 @@ mission "Heliarch Expedition 1" ` "Dangerous?" Aulori scoffs, interrupting the Heliarch once again. "Plagued by the council's cowardice, your mind is. Make it back, Arbiter Sedlitaris did. Alive and well she is, and helped by this very human in her expedition, she was," he says as he nods your way. "Living proof she is that unfounded, the council's archaic paranoia is. Now, find someone willing quickly, you must, before learn of this and meddle with our work again, they do."` label end ` The Heliarch leaves the room, and Aulori hands you a chip worth . He has you escorted out of the room and back to your ship, promising to have more work for you soon.` - on fail - "assisting heliarchy" -- event "heliarch expedition break 1" mission "Heliarch Expedition 2" + landing name "Contacted" description "Head to where the Heliarchs will tell you about their future plans for investigating the broken Quarg ringworld." - landing source government "Coalition" destination "Ring of Wisdom" @@ -1086,15 +1084,15 @@ mission "Heliarch Expedition 2" accept on accept "assisting heliarchy" ++ - on complete - "assisting heliarchy" -- on fail "assisting heliarchy" -- + on complete + "assisting heliarchy" -- mission "Heliarch Expedition 3" + landing name "Extraterritorial Venture" description "Escort a Heliarch ship to to pick up supplies, then guide them through human space and through the wormhole in Deneb so that they can further investigate the broken ringworld." - landing source "Ring of Wisdom" destination "Ablub's Invention" to offer @@ -1136,8 +1134,6 @@ mission "Heliarch Expedition 3" ship "Heliarch Punisher (Fuel)" "Eldest Inspector" on accept "assisting heliarchy" ++ - on complete - "assisting heliarchy" -- # No reputation penalty for aborting this mission. on abort "assisting heliarchy" -- @@ -1145,11 +1141,13 @@ mission "Heliarch Expedition 3" "assisting heliarchy" -- "reputation: Heliarch" = -1000 "reputation: Coalition" = -1000 + on complete + "assisting heliarchy" -- mission "Heliarch Expedition 4" + landing name "Extraterritorial Venture" description "Escort a Heliarch ship through human space and into the wormhole in Deneb, so that they can further investigate the broken ringworld." - landing source "Ablub's Invention" destination "Ruin" to offer @@ -1167,6 +1165,13 @@ mission "Heliarch Expedition 4" "assisting heliarchy" ++ on visit dialog `You've reached but left the Heliarch ship behind. Best depart and wait for them to arrive.` + # No reputation penalty for aborting this mission. + on abort + "assisting heliarchy" -- + on fail + "assisting heliarchy" -- + "reputation: Heliarch" = -1000 + "reputation: Coalition" = -1000 on complete "assisting heliarchy" -- event "heliarch expedition break 2" 275 496 @@ -1194,20 +1199,13 @@ mission "Heliarch Expedition 4" ` "True that is, but repealed, the measure that prohibits everyone leaving was not. Spoken with Arbiter Sedlitaris myself I did, and admit I must that much more at ease I now am. But, still, remain vigilant for the crew's sake, I must. Changed their opinions like me, not many of them have."` label end ` He thanks you again for your help, and with a salute bids you farewell, heading to help the Punisher's crew establish their base of operations inside the caverns. You get back in your ship and fly back to the empty docks of . Now it's a matter of waiting for the Heliarch teams here to do their job and return to the Coalition.` - # No reputation penalty for aborting this mission. - on abort - "assisting heliarchy" -- - on fail - "assisting heliarchy" -- - "reputation: Heliarch" = -1000 - "reputation: Coalition" = -1000 event "heliarch expedition break 2" mission "Heliarch Expedition 5" + landing name "Meet With Aulori" description "Head to , where Consul Aulori wishes to speak with you about the Heliarch's findings on the destroyed ringworld." - landing source near "Sol" 1 100 destination "Ring of Wisdom" @@ -1218,8 +1216,8 @@ mission "Heliarch Expedition 5" conversation `When you've touched down on the landing pads, you see you've received a message from the Heliarchs you brought to Ruin, the mysterious world on the other side of the wormhole the Pug left in Deneb. "Captain , finished what research we could do on the broken ring, we have. About to jump back into the Coalition, we are. Imagine I do that like to speak with you after receiving our report, Consul Aulori will, so head you should to the as soon as possible."` accept - on complete - "assisting heliarchy" ++ + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- "assisted heliarch" ++ @@ -1272,18 +1270,19 @@ mission "Heliarch Expedition 5" ` "They didn't seem too happy with you."` ` He grunts. "Cowards, the lot of them. True, it is, that something of a gamble I took, risking one of our jump drives beyond an unknown wormhole. But, necessary it was. Necessary for our understanding. For our survival."` goto beckon - on fail - "assisting heliarchy" -- mission "Heliarch Containment 1" + minor name "Transport Heliarch Soldiers" description "Bring these Heliarch soldiers, along with , to by so they can combat a terrorist group." - minor - deadline passengers 33 cargo "military supplies" 25 + deadline + source + near "3 Spring Rising" 2 5 + destination "Fourth Shadow" to offer has "license: Coalition" has "main plot completed" @@ -1291,9 +1290,6 @@ mission "Heliarch Containment 1" not "assisting lunarium" "coalition jobs" >= 60 random > 25 - source - near "3 Spring Rising" 2 5 - destination "Fourth Shadow" on offer conversation `The spaceport on is in quite a lot of turmoil, as dozens of Heliarch agents march around at an accelerated pace. Some prepare to board their own ships, and others speak with some of the captains here. It's no different with you, as a Kimek agent approaches you after noticing you watching.` @@ -1328,31 +1324,31 @@ mission "Heliarch Containment 1" "assisting heliarchy" ++ on visit dialog phrase "generic cargo and passenger on visit" - on complete - "assisting heliarchy" -- - payment 420000 - dialog `You're told to open your hatch as soon as you land, and when you do, the Heliarch agents storm out of your ship while a separate group that was waiting for you unloads the cargo. A few seconds later you see that have been added to your account.` on fail "assisting heliarchy" -- conversation `Having failed to deliver the Heliarch agents on time, they leave your ship with sour looks on their faces. You're contacted by the Heliarchs who had enlisted your help.` ` "Thanks to your lack of discipline, lost we have a prime opportunity to capture dangerous criminals. Unreliable you have proven, ."` ` They sign off. It seems you'll not be getting more offers to help the Heliarchs with this particular type of work again.` + on complete + "assisting heliarchy" -- + payment 420000 + dialog `You're told to open your hatch as soon as you land, and when you do, the Heliarch agents storm out of your ship while a separate group that was waiting for you unloads the cargo. A few seconds later you see that have been added to your account.` mission "Heliarch Containment 2" name "Pick Up Injured Soldiers" description "Land on , to pick up the Heliarch soldiers in need of medical attention, and transport them to by ." - deadline + source + near "Bloptab" 1 3 + stopover "Delve of Bloptab" + destination "Ahr" passengers 21 + deadline to offer has "Heliarch Containment 1: done" not "Lunarium: Questions: done" not "assisting lunarium" random > 35 - source - near "Bloptab" 1 3 - stopover "Delve of Bloptab" - destination "Ahr" on offer conversation `You're stopped by a group of Heliarch agents as you enter the spaceport, most of them Arachi.` @@ -1391,6 +1387,12 @@ mission "Heliarch Containment 2" dialog `You notice dozens of Heliarch warships rapidly surveying the planet. When you land, you see more of the ships that came to help pick up the injured agents. Hundreds of bandaged Saryds, Kimek, and Arachi are being brought to the ships that keep arriving and departing. You pick up your passengers and prepare to head to the medical center on .` on visit dialog phrase "generic missing stopover or passengers" + on fail + "assisting heliarchy" -- + conversation + `Having failed to pick up and deliver the injured Heliarch agents to the healthcare facilities on time, some have succumbed to their wounds, and those who are still alive leave your ship while angrily throwing insults and complaints your way. You're contacted by the Heliarchs who had enlisted your help.` + ` "Unbelievable. Cost us the lives of valuable soldiers, your lack of discipline has. Unreliable and apathetic to the woes of our troops you have proven, ."` + ` They sign off. It seems you'll not be getting more offers to help the Heliarchs with this particular type of work again.` on complete "assisting heliarchy" -- payment 360000 @@ -1408,23 +1410,17 @@ mission "Heliarch Containment 2" label end ` She bids you farewell and goes back to making sure the injured agents find their way to hospitals.` accept - on fail - "assisting heliarchy" -- - conversation - `Having failed to pick up and deliver the injured Heliarch agents to the healthcare facilities on time, some have succumbed to their wounds, and those who are still alive leave your ship while angrily throwing insults and complaints your way. You're contacted by the Heliarchs who had enlisted your help.` - ` "Unbelievable. Cost us the lives of valuable soldiers, your lack of discipline has. Unreliable and apathetic to the woes of our troops you have proven, ."` - ` They sign off. It seems you'll not be getting more offers to help the Heliarchs with this particular type of work again.` mission "Heliarch Containment 3" name "Informational Medicine" description "While picking up from , let loose the spy bots the Heliarchs gave you to act as surveillance for the planet." + source "Ring of Power" + stopover "Secret Sky" cargo "medication" 15 to offer has "Heliarch Containment 2: done" not "Lunarium: Questions: done" not "assisting lunarium" - source "Ring of Power" - stopover "Secret Sky" on offer conversation branch license @@ -1460,25 +1456,25 @@ mission "Heliarch Containment 3" "assisting heliarchy" ++ on stopover dialog `As instructed, you release the drones as you come in for a landing. Judging by the normal conditions of the spaceport, no one seems to have noticed anything as you pick up the cargo.` + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- payment 330000 conversation `Landing back on , you're met by a squad of armed Heliarchs, who are escorting Consul Plortub. He hands you your payment of with an approving nod.` ` "Aided us once more, you have, Captain. To further work with you, I look forward. Search for one of my subordinates in the local spaceport anytime, you should. More work for you soon, I might have." He performs a brief salute, and leaves for some other section of the ring.` - on fail - "assisting heliarchy" -- mission "Heliarch Containment 4-A" name "Undercover Transports" description "Escort three Kimek Spires full of Heliarch agents to , where they hope the use of civilian ships will give them the element of surprise." + source "Ring of Power" + destination "Remote Blue" to offer has "event: plasma turret available" has "Heliarch Containment 3: done" not "Lunarium: Questions: done" not "assisting lunarium" - source "Ring of Power" - destination "Remote Blue" on offer conversation `You're stopped by one of the many armed Heliarchs in the spaceport, and are asked to follow him into the restricted sections. You comply and are led through the corridors until you're brought before Consul Plortub, in a smaller room than last time. Three Kimek Heliarchs are with him.` @@ -1507,21 +1503,21 @@ mission "Heliarch Containment 4-A" "assisting heliarchy" ++ on visit dialog `You've reached , but the Heliarch transports haven't arrived yet! Best depart and wait for them to get here.` - on complete - "assisting heliarchy" -- on fail "assisting heliarchy" -- + on complete + "assisting heliarchy" -- mission "Heliarch Containment 4-B" + landing name "Meet with Plortub" description "Collect your payment for escorting the Heliarch transports." - landing + source "Remote Blue" + destination "Station Cian" to offer has "Heliarch Containment 4-A: done" not "Lunarium: Questions: done" not "assisting lunarium" - source "Remote Blue" - destination "Station Cian" on offer conversation `Hundreds of Heliarch agents pour out of the three Kimek transports, rushing in groups to separate parts of the city. They march in unison, weapons in hand. From the reactions of the locals, it's clear they were neither expecting such a thing, nor are they happy with the agents going about the city in that manner.` @@ -1529,24 +1525,24 @@ mission "Heliarch Containment 4-B" accept on accept "assisting heliarchy" ++ + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- payment 495000 conversation `You land in the station to find that have been transferred to you. Along with the credits comes a transmission from Plortub. "For my absence, forgive me you must, Captain. Hit Fourth Shadow again, criminals have, so organizing some ships from within the Ring of Power, I am."` ` He goes on to explain that the attack was quite a large one, and much of the fleet stationed here was sent there to help contain it. What remained is helping with the operation, so the station is fairly devoid of a military presence at the moment. "A troubled week, this will be, but bother you with that, I will not. Very useful to us your support has been, Captain."` - on fail - "assisting heliarchy" -- mission "Heliarch Containment 5" + landing name "Stop The Fleeing Ships" description "Defeat the criminal ships that are attempting to flee. You must disable and board their ships in order to help the Heliarchs find the source of their weapons." - landing + source "Station Cian" to offer has "Heliarch Containment 4-B: done" not "Lunarium: Questions: done" not "assisting lunarium" - source "Station Cian" on offer "reputation: Lunarium" = -1000 event "lunarium fleeing rb" @@ -1584,6 +1580,8 @@ mission "Heliarch Containment 5" launch on accept "assisting heliarchy" ++ + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- "reputation: Lunarium" = 1 @@ -1595,8 +1593,6 @@ mission "Heliarch Containment 5" ` As soon as the commlinks are back, the Heliarchs contact Consul Plortub and inform him of what happened. Shortly after, are added to your account, and you're put on a call with the consul.` ` "Humiliating, it would be, had under such circumstances, the criminal ships escaped. Done well, you have, Captain." He discusses with you the outfits that the ships were using and is alarmed to learn that they had not only Heliarch equipment, but had also acquired human weapons. He lets out something you can't quite put, resembling a gasp or a roar; you only know that your ears don't want to hear it again.` ` "Bring this report to the other consuls, at once I will. Further tasks, of you we may ask, but for now, done your work is, Captain." He ends the transmission after a short salute. Heliarch ships rush back in as the local garrison returns from Remote Blue. Many of the ship captains come to personally congratulate you for stopping the fleeing ships.` - on fail - "assisting heliarchy" -- event "lunarium fleeing rb" system "12 Autumn Above" @@ -1609,9 +1605,9 @@ event "lunarium detained rb" mission "Heliarch Drills 1" + minor name "Refueling Drill" description "Escort the two Heliarch Judicators to , as part of a drill testing the Coalition's refueling capabilities in emergency situations." - minor source near "Belug" 6 100 destination "Belug's Plunge" @@ -1665,14 +1661,14 @@ mission "Heliarch Drills 1" "assisting heliarchy" ++ on visit dialog `You have reached , but you left some of the Heliarch escorts behind. Better depart and wait for them to get here.` + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- "coalition jobs" ++ payment 150000 conversation `Lotuora pays you when you land. "An idea for the next drill, I've had," she says. "Need to arrange some more ships, I will, so some hours, I will need. Meet me in the spaceport when I'm done, you should."` - on fail - "assisting heliarchy" -- mission "Heliarch Drills 2-A" name "Pursuit Drill" @@ -1753,10 +1749,10 @@ mission "Heliarch Drills 2-A" "assisting heliarchy" ++ on visit dialog `After you land, one of the Heliarch Hunters who was pursuing you lands beside you. You'll need to shake it off before landing here to succeed.` - on complete - "assisting heliarchy" -- on fail "assisting heliarchy" -- + on complete + "assisting heliarchy" -- mission "Heliarch Drills 2-B" landing @@ -1831,10 +1827,10 @@ mission "Heliarch Drills 2-B" "assisting heliarchy" ++ on visit dialog `After you land, one of the Heliarch Hunters who was pursuing you lands beside you. You'll need to shake it off before landing here to succeed.` - on complete - "assisting heliarchy" -- on fail "assisting heliarchy" -- + on complete + "assisting heliarchy" -- mission "Heliarch Drills 2-C" landing @@ -1982,14 +1978,14 @@ mission "Heliarch Drills 2-C" "assisting heliarchy" ++ on visit dialog `After you land, one of the Heliarch Hunters who was pursuing you lands beside you. You'll need to shake it off before landing here to succeed.` + on fail + "assisting heliarchy" -- on complete "assisting heliarchy" -- "coalition jobs" ++ payment 470000 conversation `Magister Lotuora meets you when you land, handing you your payment of , and congratulating you for managing to evade the pursuing ships. "Frustrated many of the Hunter pilots, I heard you have," she says with a laugh. "Good training for them, I hope this was. Finishing up the arrangements for one more drill, I am. When ready, you are, meet me in the spaceport, you must."` - on fail - "assisting heliarchy" -- mission "Heliarch Drills 3" name "Combat Drill" @@ -2048,10 +2044,10 @@ mission "Heliarch Drills 3" mission "Heliarch License 1" - name "Meet With The Consuls" - description "Head to the , where the Heliarch consuls will make you a Heliarch agent." minor landing + name "Meet With The Consuls" + description "Head to the , where the Heliarch consuls will make you a Heliarch agent." source near "Quaru" 1 100 destination "Ring of Friendship" @@ -2079,9 +2075,8 @@ mission "Heliarch License 1" accept mission "Heliarch License 2" - invisible landing - deadline 1 + invisible source "Ring of Friendship" to offer has "Heliarch License 1: active" From 4b99a932ce6cfed001a9d2d0b3a3212350ff67c2 Mon Sep 17 00:00:00 2001 From: warp-core Date: Wed, 27 Sep 2023 05:27:19 +0100 Subject: [PATCH 48/79] refactor: Replace old (#9358) --- data/coalition/heliarch intro.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index a40696da532a..ae580dea01d4 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -558,6 +558,7 @@ mission "Heliarch Recon 1" to offer "reputation: Quarg" >= 0 "coalition jobs" >= 55 + has "outfit: Jump Drive" has "visited planet: Lagrange" has "visited planet: Alta Hai" has "visited planet: Kuwaru Efreti" @@ -568,7 +569,6 @@ mission "Heliarch Recon 1" to fail "reputation: Quarg" < 0 on offer - require "Jump Drive" conversation `Three Heliarch agents are waiting for you when you land. "The human visitor who so much to our society has contributed, we greet," the Saryd says as they all salute you.` ` "Sent by Consul Aulori, we were," the Kimek says proudly, as if you were supposed to know who that is. "An important task for you, he has in mind."` @@ -684,6 +684,8 @@ mission "Heliarch Recon 2-A" has "event: heliarch recon break" not "Lunarium: Questions: done" not "assisting lunarium" + to complete + has "outfit: Outfit Scanner" on offer conversation `When you land, you're contacted by the Heliarch agents who had you land on some Quarg worlds and rings to collect data. "Captain , a new task for you, we have," the Kimek says.` @@ -705,7 +707,6 @@ mission "Heliarch Recon 2-A" "assisting heliarchy" -- on complete "assisting heliarchy" -- - require "Outfit Scanner" mission "Heliarch Recon 2-B" name "Silent Scan" @@ -930,9 +931,9 @@ mission "Heliarch Recon 3-C" to offer has "Heliarch Recon 3-A: done" has "Heliarch License: done" + has "outfit: Scanning Module" not "assisting lunarium" on offer - require "Scanning Module" 1 conversation `The Heliarch agents are waiting for you when you land with a team of engineers. They have them perform some quick tests on your Scanning Module.` ` "Take your time with this task, you of course can, Captain, but told us to ask you to be hasty, Consul Aulori has," the Arach says. "Unsure about how long this window of opportunity will last, all of us are."` From 242fff9c550e5d058e1e5a9189e14be139bfd285 Mon Sep 17 00:00:00 2001 From: warp-core Date: Wed, 27 Sep 2023 05:33:38 +0100 Subject: [PATCH 49/79] fix(content): Fix use of "Heliarch License: (offered | done)" condition (#9359) --- data/coalition/coalition jobs.txt | 44 +++++++++++++------------- data/coalition/coalition news.txt | 2 +- data/coalition/heliarch intro.txt | 29 ++++++++--------- data/coalition/lunarium intro.txt | 52 +++++++++++++++---------------- 4 files changed, 64 insertions(+), 63 deletions(-) diff --git a/data/coalition/coalition jobs.txt b/data/coalition/coalition jobs.txt index c527fe417150..452a4b32f806 100644 --- a/data/coalition/coalition jobs.txt +++ b/data/coalition/coalition jobs.txt @@ -1525,10 +1525,10 @@ mission "Evacuate Lunarium True" random < 10 has "Lunarium Evacuation 6: done" not "Heliarch Investigation 2: active" - not "Heliarch License: done" + not "joined the heliarchs" to fail has "Heliarch Investigation 2: active" - has "Heliarch License: done" + has "joined the heliarchs" passengers 24 65 source government "Coalition" @@ -1557,10 +1557,10 @@ mission "Evacuate Lunarium Fail" random < 5 has "Lunarium Evacuation 6: done" not "Heliarch Investigation 2: active" - not "Heliarch License: done" + not "joined the heliarchs" to fail has "Heliarch Investigation 2: active" - has "Heliarch License: done" + has "joined the heliarchs" passengers 24 65 source government "Coalition" @@ -1585,10 +1585,10 @@ mission "Lunarium: Armageddon Core Delivery" has "Lunarium: Reactors: done" not "Lunarium: Armageddon Core Delivery: active" not "Heliarch Investigation 2: active" - not "Heliarch License: done" + not "joined the heliarchs" to fail has "Heliarch Investigation 2: active" - has "Heliarch License: done" + has "joined the heliarchs" source government "Coalition" destination @@ -1612,10 +1612,10 @@ mission "Lunarium: Fusion Reactor Delivery" has "Lunarium: Reactors: done" not "Lunarium: Fusion Reactor Delivery: active" not "Heliarch Investigation 2: active" - not "Heliarch License: done" + not "joined the heliarchs" to fail has "Heliarch Investigation 2: active" - has "Heliarch License: done" + has "joined the heliarchs" source government "Coalition" destination @@ -1639,10 +1639,10 @@ mission "Lunarium: Breeder Reactor Delivery" has "Lunarium: Reactors: done" not "Lunarium: Breeder Reactor Delivery: active" not "Heliarch Investigation 2: active" - not "Heliarch License: done" + not "joined the heliarchs" to fail has "Heliarch Investigation 2: active" - has "Heliarch License: done" + has "joined the heliarchs" source government "Coalition" destination @@ -1666,10 +1666,10 @@ mission "Lunarium: Torpedo Delivery" has "Lunarium: Torpedoes: done" not "Lunarium: Torpedo Delivery: active" not "Heliarch Investigation 2: active" - not "Heliarch License: done" + not "joined the heliarchs" to fail has "Heliarch Investigation 2: active" - has "Heliarch License: done" + has "joined the heliarchs" source government "Coalition" destination @@ -1693,10 +1693,10 @@ mission "Lunarium: Typhoon Delivery" has "Lunarium: Torpedoes: done" not "Lunarium: Typhoon Delivery: active" not "Heliarch Investigation 2: active" - not "Heliarch License: done" + not "joined the heliarchs" to fail has "Heliarch Investigation 2: active" - has "Heliarch License: done" + has "joined the heliarchs" source government "Coalition" destination @@ -1718,10 +1718,10 @@ mission "Lunarium: Plasma Delivery" has "Lunarium: Heat: done" not "Lunarium: Plasma Delivery: active" not "Heliarch Investigation 2: active" - not "Heliarch License: done" + not "joined the heliarchs" to fail has "Heliarch Investigation 2: active" - has "Heliarch License: done" + has "joined the heliarchs" source government "Coalition" destination @@ -1742,10 +1742,10 @@ mission "Lunarium: Flamethrower Delivery" has "Lunarium: Heat: done" not "Lunarium: Flamethrower Delivery: active" not "Heliarch Investigation 2: active" - not "Heliarch License: done" + not "joined the heliarchs" to fail has "Heliarch Investigation 2: active" - has "Heliarch License: done" + has "joined the heliarchs" source government "Coalition" destination @@ -1766,10 +1766,10 @@ mission "Lunarium: Grenade Delivery" has "Lunarium: Grenades: done" not "Lunarium: Grenade Delivery: active" not "Heliarch Investigation 2: active" - not "Heliarch License: done" + not "joined the heliarchs" to fail has "Heliarch Investigation 2: active" - has "Heliarch License: done" + has "joined the heliarchs" source government "Coalition" destination @@ -1790,10 +1790,10 @@ mission "Lunarium: Anti-Missile Delivery" has "Lunarium: AM: done" not "Lunarium: Anti-Missile Delivery: active" not "Heliarch Investigation 2: active" - not "Heliarch License: done" + not "joined the heliarchs" to fail has "Heliarch Investigation 2: active" - has "Heliarch License: done" + has "joined the heliarchs" source government "Coalition" destination diff --git a/data/coalition/coalition news.txt b/data/coalition/coalition news.txt index b5553e886287..103d50316a0f 100644 --- a/data/coalition/coalition news.txt +++ b/data/coalition/coalition news.txt @@ -453,7 +453,7 @@ news "lunarium charity" news "lunarium charity worker" to show - not "Heliarch License: offered" + not "Heliarch License 1: offered" location government "Coalition" name diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index ae580dea01d4..7356d2f9674d 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -815,7 +815,7 @@ mission "Heliarch Recon 3-A" `Upon landing, you're contacted by the Heliarch agents who have had you scan Quarg worlds and ships. "Hello again, Captain !" the Kimek greets you. "Thank you again, we must, for your latest service. Much more detailed than what we had, your scans are."` ` The Saryd interrupts him. "Not... satisfied with them, Consul Aulori was, however. Tasked with acquiring your help again, we were."` branch license - has "Heliarch License: done" + has "joined the heliarchs" ` "An exception, the council has decided to make," the Arach explains. "Granted one of our Scanning Modules, you will be. Just for the mission, it is, so return it once it's over, you must. Install it on your ship, a team on the will."` goto choice label license @@ -828,7 +828,7 @@ mission "Heliarch Recon 3-A" goto decline ` "Why didn't you just have me do that last time?"` branch license2 - has "Heliarch License: done" + has "joined the heliarchs" ` "Restricted technology, it is. For Heliarch use only," the Arach tells you.` ` "Dangerous for you, it also was," the Saryd adds. "Provoked into attacking you, the Quarg might have been, if our technology, on your ship they noticed."` choice @@ -850,7 +850,7 @@ mission "Heliarch Recon 3-A" ` "Sorry, I don't like the sound of this."` label decline branch license3 - has "Heliarch License: done" + has "joined the heliarchs" ` They are both surprised and distraught by your refusal, clearly not having expected it. They insist a bit further, but eventually give up on trying to convince you to help. Disappointed, they leave for a Heliarch office.` decline label license3 @@ -878,7 +878,7 @@ mission "Heliarch Recon 3-B" to offer has "Heliarch Recon 3-A: done" not "Lunarium: Questions: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting lunarium" on offer conversation @@ -930,7 +930,7 @@ mission "Heliarch Recon 3-C" waypoint "Zubeneschamali" to offer has "Heliarch Recon 3-A: done" - has "Heliarch License: done" + has "joined the heliarchs" has "outfit: Scanning Module" not "assisting lunarium" on offer @@ -1026,7 +1026,7 @@ mission "Heliarch Expedition 1" ` "I didn't say incomplete, I said broken. I know the difference."` ` The other Heliarchs freeze at your tone, and all keep staring at you, as if afraid to look toward Aulori for his reaction.` branch license - has "Heliarch License: done" + has "joined the heliarchs" ` He stares intently at you for a few seconds, then at the agents guarding the entry door. They open it, and call for some more Heliarchs. They come in and position themselves to your sides, and behind you. "Afraid I am that once again, failed to understand it I have, . Now, one final time, repeat it, would you?" Reading the room, you carefully repeat the information, taking care to not come off as impolite again.` goto how label license @@ -1111,7 +1111,7 @@ mission "Heliarch Expedition 3" ` "Well, I think they're probably good to get there on their own. Sorry, but I'm not interested."` label decline branch license - has "Heliarch License: done" + has "joined the heliarchs" ` He grimaces lightly. "Afraid I am, Captain, that an option, that is not. Very unfamiliar with navigating human space as is, we are, and in a truly exceptional location, this ring is. Remind you, I must, that bring us to our attention in the first place, you did, abandon this work now, you cannot. On behalf of our Coalition, insist I must that aid us in this effort, you do." Pausing for just a second, he continues in a lower tone. "Very... unwelcoming to you, the Coalition would become, if drop this now, you did. A few last scanners, the scientists have requested, so after quick stop at , to the ringworld, you will bring them."` goto end label license @@ -1229,7 +1229,7 @@ mission "Heliarch Expedition 5" ` Once again you're led through the inscrutable, guard-crowded halls of the , being brought to a long corridor with dozens of closed doors. The one at the very end is apparently your goal. From there, however, two more guards arrive, and they explain to those escorting you that "received word, the Ring of Friendship has." They apologize to you, saying Aulori might be busy for some time more. You are brought to just outside the room, so that you're received as soon as his "meeting" ends.` ` From another room, a Heliarch arbiter waves for the guards waiting with you, and passes some other task to them. Three of them leave, and you're left with the one who fetched you from your ship, a Saryd. Despite the door to Aulori's room being locked, you two can still clearly hear intense shouting from within - not just his, but from many others who you assume to be consuls as well. After a particularly long - and heated - debate segment from what seems to be Aulori's voice, the Heliarch guard waiting with you declares they'll be coming back soon and hastily moves away, turning the corner.` branch license - has "Heliarch License: done" + has "joined the heliarchs" label waited ` A few more minutes pass, and you hear some more of the heated discussion from within. After a while it stops and the door opens, with Aulori on the other side, alone. "I see that arrived you have, Captain. Forgive me for the wait you must. Just going over the findings of the expedition, some more consuls and I were."` choice @@ -1313,7 +1313,7 @@ mission "Heliarch Containment 1" accept label decline branch license - has "Heliarch License: done" + has "joined the heliarchs" ` They're clearly disappointed, but thank you for your time anyway, before moving on to the next merchant captain and try to recruit their assistance.` decline label license @@ -1374,7 +1374,7 @@ mission "Heliarch Containment 2" accept label decline branch license - has "Heliarch License: done" + has "joined the heliarchs" ` The Saryd frowns. "A shame that is, use we could all the help available." The group leaves, moving to ask the next merchant captain for help.` decline label license @@ -1425,7 +1425,7 @@ mission "Heliarch Containment 3" on offer conversation branch license - has "Heliarch License: done" + has "joined the heliarchs" `Three Heliarch officers approach you as you're walking around the spaceport. "Greetings, Captain . Interested, would you be, in accompanying us? A proposition, we have," the Saryd says.` choice ` "What's it about?"` @@ -1441,7 +1441,7 @@ mission "Heliarch Containment 3" decline label license `Three Heliarch officers approach you as you're walking around the spaceport. They salute you, and the Saryd speaks. "Greetings, Captain . Sent by Consul Plortub, we were."` - ` "A mission for you, he has, but to discuss it in private, he wishes to." The Kimek explains. "Follow us, would you?"` + ` "A mission for you, he has, but to discuss it in private, he wishes." The Kimek explains. "Follow us, would you?"` label way ` After a few dozen twists and turns through the restricted sections of the ring, they bring you to a room where an Arach is waiting, alongside a few other Heliarchs who are discussing something while pointing at a map of the Coalition projected over the table.` ` "Ready to work with us, are you, Captain?" the Arach asks. "The one who asked for you, I am. Call me Consul Plortub, you may."` @@ -1485,7 +1485,7 @@ mission "Heliarch Containment 4-A" goto plan ` "I'm not really comfortable in helping with these. Can you let me go?"` branch license - has "Heliarch License: done" + has "joined the heliarchs" ` He perks his head up a bit, then mumbles something in his own language, momentarily turning off the translator. He gives in, and has someone bring you back to your ship in a quick march.` decline label license @@ -2067,7 +2067,7 @@ mission "Heliarch License 1" to fail has "Lunarium: Questions: done" to complete - has "Heliarch License 2: accepted" + has "Heliarch License 2: declined" on offer conversation `When you land on , you find a Heliarch delegation waiting for you outside. When you meet them, the Saryd of the group says, "A great ally to our Coalition, you have proven to be."` @@ -2096,6 +2096,7 @@ mission "Heliarch License 2" log "Was given a special circlet by the Heliarchs, which grants access to some of their technology. Was also given a translation device to freely converse with the Coalition species." set "license: Heliarch" set "language: Coalition" + set "joined the heliarchs" event "first heliarch unlock" ` When you land, you're met with a bit of ceremony. A trio of Heliarch consuls welcomes you, each carrying a gemstone: an emerald for the Saryd, a ruby for the Kimek, and a sapphire for the Arach. They each pass the precious stones to you, starting with the Saryd, then the Kimek, and lastly the Arach. Cameras and photographers surround the scene, kept at bay by lines of Heliarch guards. It seems your joining the ranks has turned into something of an event.` ` When the consuls are done, they have you follow them into the restricted sections of the ring, bringing you to a very large, circular room, somewhat like a colosseum or an auditorium, with hundreds of Heliarch consuls seated. There are also many more camera workers and photographers, though all of them are Heliarch members this time. You're instructed to head to the center.` diff --git a/data/coalition/lunarium intro.txt b/data/coalition/lunarium intro.txt index dd1b6efd5b2f..0805b6cab3ed 100644 --- a/data/coalition/lunarium intro.txt +++ b/data/coalition/lunarium intro.txt @@ -32,7 +32,7 @@ mission "Lunarium: Smuggling: Charity 1" to offer random < 40 has "Coalition: First Contact: done" - not "Heliarch License: done" + not "joined the heliarchs" not "Lunarium: Questions: active" not "assisting heliarchy" on offer @@ -99,7 +99,7 @@ mission "Lunarium: Smuggling: Charity 2" to offer random < 50 has "Lunarium: Smuggling: Charity 1: done" - not "Heliarch License: done" + not "joined the heliarchs" not "Lunarium: Questions: active" not "assisting heliarcy" on offer @@ -157,7 +157,7 @@ mission "Lunarium: Smuggling: Charity 3" to offer random < 70 has "Lunarium: Smuggling: Charity 2: done" - not "Heliarch License: done" + not "joined the heliarchs" not "Lunarium: Questions: active" not "assisting heliarchy" on offer @@ -196,7 +196,7 @@ mission "Lunarium: Smuggling: Grenades" destination "Mebla's Portion" to offer has "Lunarium: Smuggling: Charity 3: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer log "Been providing transport services for a charity that is actually the Lunarium, a resistance group within the Coalition aiming to free it from the Heliarchs' rule. Some of the work was genuinely charity, apparently, but some was to support the resistance." @@ -279,7 +279,7 @@ mission "Lunarium: Smuggling: AM" to offer has "Lunarium: Smuggling: Grenades: done" random < 15 + 3 * "assisted lunarium" * "assisted lunarium" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -324,7 +324,7 @@ mission "Lunarium: Smuggling: Torpedoes" has "Lunarium: Smuggling: AM: done" has "event: deep sky tech available" random < 20 + 3 * "assisted lunarium" * "assisted lunarium" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -375,7 +375,7 @@ mission "Lunarium: Smuggling: Heat" has "Lunarium: Smuggling: Torpedoes: done" has "event: flamethrower available" random < 25 + 3 * "assisted lunarium" * "assisted lunarium" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -431,7 +431,7 @@ mission "Lunarium: Smuggling: Reactors" to offer has "Lunarium: Smuggling: Heat: done" random < 40 + 3 * "assisted lunarium" * "assisted lunarium" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -483,7 +483,7 @@ mission "House Bebliss 1-A" to offer random < 10 has "license: Coalition" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" # This mission is to offer when the player has the Epilogue for whatever character of FW, Navy or Syndicate stays in Deneb. # When the Navy and Syndicate campaigns get in, they'll need their own versions of missions 2 through 7 written. @@ -535,7 +535,7 @@ mission "House Bebliss 1-B" to offer random < 40 has "House Bebliss 1-A: declined" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" source attributes arach @@ -580,7 +580,7 @@ mission "House Bebliss 2-FW" description "Go to and look for Freya to see if she is willing to let the members of House Bebliss study the Pug artifacts with her." landing to offer - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" or has "House Bebliss 1-A: done" @@ -936,7 +936,7 @@ mission "Lunarium: Evacuation 1" to offer random < 40 has "Coalition: First Contact: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -992,7 +992,7 @@ mission "Lunarium: Evacuation 2" destination "Second Viridian" to offer has "Lunarium: Evacuation 1: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -1058,7 +1058,7 @@ mission "Lunarium: Evacuation 3" to offer random < 50 has "Lunarium: Evacuation 2: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -1108,7 +1108,7 @@ mission "Lunarium: Evacuation 4" destination "Shifting Sand" to offer has "Lunarium: Evacuation 3: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -1183,7 +1183,7 @@ mission "Lunarium: Evacuation 5" to offer random < 80 has "Lunarium: Evacuation 4: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer require "Jump Drive" @@ -1234,7 +1234,7 @@ mission "Lunarium: Evacuation 6" destination "Ablub's Invention" to offer has "Lunarium: Evacuation 5: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -1327,7 +1327,7 @@ mission "Lunarium: Propaganda 1" to offer random < 25 has "Coalition: First Contact: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -1396,7 +1396,7 @@ mission "Lunarium: Propaganda 2" destination "Factory of Eblumab" to offer has "Lunarium: Propaganda 1: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -1461,7 +1461,7 @@ mission "Lunarium: Propaganda 3" destination "Sandy Two" to offer has "Lunarium: Propaganda 2: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -1524,7 +1524,7 @@ mission "Lunarium: Propaganda 4" destination "Warm Slope" to offer has "Lunarium: Propaganda 3: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -1604,7 +1604,7 @@ mission "Lunarium: Combat Training 1" or not "event: fw suppressed Greenrock" has "event: fw abandoned Greenrock" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer require "Jump Drive" @@ -1671,7 +1671,7 @@ mission "Lunarium: Combat Training 2" waypoint "Shaula" to offer has "Lunarium: Combat Training 1: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -1766,7 +1766,7 @@ mission "Lunarium: Combat Training 3" destination "Glaze" to offer has "event: lunarium training done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -1789,7 +1789,7 @@ mission "Lunarium: Combat Training 4" destination "Factory of Eblumab" to offer has "Lunarium: Combat Training 3: done" - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" on offer payment 3000000 @@ -1846,7 +1846,7 @@ mission "Lunarium: Questions" "coalition jobs" >= 110 "assisted lunarium" == 3 "reputation: Quarg" >= 0 - not "Heliarch License: done" + not "joined the heliarchs" not "assisting heliarchy" not "assisting lunarium" to fail From 6347237880c2d3b30a6b0312692cca55e3c4ec9d Mon Sep 17 00:00:00 2001 From: tibetiroka <68112292+tibetiroka@users.noreply.github.com> Date: Thu, 28 Sep 2023 21:16:35 +0200 Subject: [PATCH 50/79] perf: Avoid unnecesary copies of potentially the whole ship list every frame (#9368) Co-authored-by: Nick <85879619+quyykk@users.noreply.github.com> --- source/AI.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/AI.cpp b/source/AI.cpp index cf5b442de7c6..2b5510b7056f 100644 --- a/source/AI.cpp +++ b/source/AI.cpp @@ -901,7 +901,7 @@ void AI::Step(const PlayerInfo &player, Command &activeCommands) // Find the possible parents for orphaned fighters and drones. auto parentChoices = vector>{}; parentChoices.reserve(ships.size() * .1); - auto getParentFrom = [&it, &gov, &parentChoices](const list> otherShips) -> shared_ptr + auto getParentFrom = [&it, &gov, &parentChoices](const list> &otherShips) -> shared_ptr { for(const auto &other : otherShips) if(other->GetGovernment() == gov && other->GetSystem() == it->GetSystem() && !other->CanBeCarried()) From 3d913d3b36694487003127cf48cca9aad2d0654b Mon Sep 17 00:00:00 2001 From: ziproot <109186806+ziproot@users.noreply.github.com> Date: Thu, 28 Sep 2023 20:31:00 -0400 Subject: [PATCH 51/79] feat(content): Change wording of the secure package delivery job completion dialog (#9364) --- data/human/deep jobs.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/human/deep jobs.txt b/data/human/deep jobs.txt index ef6dd70fb76f..07e030cdd27f 100644 --- a/data/human/deep jobs.txt +++ b/data/human/deep jobs.txt @@ -469,7 +469,7 @@ phrase "secure package dropoff payment" word ` ` word - `Your bank account immediately notifies you that the agreed-upon payment of has been deposited. You wonder how they knew.` + `Your bank account immediately notifies you that the agreed-upon payment of has been deposited.` mission "Secure Transport Job (Secret) [0]" From 6537b85a34635c283fe9f588bb55fd6dfc7f97e4 Mon Sep 17 00:00:00 2001 From: Saugia <93169396+Saugia@users.noreply.github.com> Date: Thu, 28 Sep 2023 23:22:57 -0400 Subject: [PATCH 52/79] feat(content): Adjust how "Heliarch Drill 3" `fails` (#9369) --- data/coalition/heliarch intro.txt | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index 7356d2f9674d..7a0eade1385f 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -2019,17 +2019,22 @@ mission "Heliarch Drills 3" personality disables staying nemesis heroic system "Torbab" ship "Heliarch Punisher (Scrappy)" "Awaiting Adversary" - on kill + on destroy + fail + "reputation: Heliarch" = -1000 + "reputation: Coalition" = -1000 dialog `The Punisher's captain tries to hail you as the ship collapses around them, but you never get to hear their final cries. You have failed to simply disable the ship, and doomed the entire crew. It seems that you will not be welcome in Coalition space any longer.` + on board + fail + "reputation: Heliarch" = -1000 + "reputation: Coalition" = -1000 + dialog `Although you've disabled the Punisher, you decide to move in and board the ship in order to salvage it, breaking any trust the Heliarchs had in you. They, and the rest of the Coalition, will not be pleased with this.` + on capture + dialog `After a long, exhausting battle, you and your crew successfully capture the Punisher. With the captain's life on your hands, as well as most of her crew, the Coalition most certainly won't be welcoming you anymore.` on accept "assisting heliarchy" ++ - # No reputation penalty for aborting this mission. - on abort - "assisting heliarchy" -- on fail "assisting heliarchy" -- - "reputation: Heliarch" = -1000 - "reputation: Coalition" = -1000 on visit dialog `You've landed on , but you have not disabled the yet. Disable it before returning.` on complete @@ -2040,9 +2045,6 @@ mission "Heliarch Drills 3" conversation `Magister Lotuora greets you when you return. "Prevailed over one of our Punishers, you have! Perhaps the real threat, you are, not the Quarg," she says, looking at you for a few seconds as if expecting you to laugh. She hands you , and continues, "Sent a recording of the fight, I was. Learn much from it, I hope we can."` ` She thanks you for helping her with the drills, saying it will be a great help in training the cadets at the local academy. She concludes by wishing you safe travels, and then heads to a Heliarch building.` - - - mission "Heliarch License 1" minor From a4bdd1be927d2ac71783c14ee5b667c323a76738 Mon Sep 17 00:00:00 2001 From: Saugia <93169396+Saugia@users.noreply.github.com> Date: Thu, 28 Sep 2023 23:24:21 -0400 Subject: [PATCH 53/79] refactor(content): Replace old "require" actions with autoconditions (#9370) --- data/coalition/lunarium intro.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/data/coalition/lunarium intro.txt b/data/coalition/lunarium intro.txt index 0805b6cab3ed..408dd0de5049 100644 --- a/data/coalition/lunarium intro.txt +++ b/data/coalition/lunarium intro.txt @@ -820,9 +820,10 @@ mission "House Bebliss 5-FW" "assisting lunarium" ++ on visit dialog `You land on , but you haven't brought the extra jump drive you needed to yet. Make sure to have it in your cargo before you land.` + to complete + "outfit: Jump Drive" >= 2 on complete "assisting lunarium" -- - require "Jump Drive" 2 outfit "Jump Drive" -1 payment 1500000 conversation @@ -1183,10 +1184,10 @@ mission "Lunarium: Evacuation 5" to offer random < 80 has "Lunarium: Evacuation 4: done" + has "outfit: Jump Drive" not "joined the heliarchs" not "assisting heliarchy" on offer - require "Jump Drive" payment 1387562 conversation branch lunarium @@ -1596,6 +1597,7 @@ mission "Lunarium: Combat Training 1" destination "Zug" to offer random < 20 + has "outfit: Jump Drive" or has "Lunarium: Propaganda 4: done" has "Lunarium: Evacuation 6: done" @@ -1607,7 +1609,6 @@ mission "Lunarium: Combat Training 1" not "joined the heliarchs" not "assisting heliarchy" on offer - require "Jump Drive" conversation `After wandering the spaceport for a while, you notice a crowd of dozens of individuals heading to the hangars, specifically in what looks like the direction of your ship. A roughly equal number of Kimek and Arachi, with some Saryds as well, they stand in front of the , looking around as if searching for its captain. You approach them, and one of the Kimek, whose thorax and abdomen are slimmer than the usual for her species, meets you to speak for their group.` branch lunarium @@ -1837,6 +1838,7 @@ mission "Lunarium: Questions" not planet "Remote Blue" destination "Remote Blue" to offer + has "outfit: Jump Drive" or "assisted lunarium" == 5 and @@ -1856,7 +1858,6 @@ mission "Lunarium: Questions" to complete has "Lunarium: Quarg Interview: accepted" on offer - require "Jump Drive" conversation `As you prepare to land on , your monitor starts producing a low hum, stops, then starts again. This keeps up for nearly a minute until a message pops up. "Captain , come to trust you our comrades have, thanks to your consistent help to our cause. Interested we are in your continuous support, so that free the Coalition, together we can. To you must come, meet with you, our leaders will, so that discuss an important task with them, you may. An available bunk in your ship, you should have."` ` The message cuts off shortly after you finish reading it. Your monitor is back to normal, and no humming sound can be heard. You mark on your map.` From c0022e21d57c9454100b458b4f677e37dc106fe1 Mon Sep 17 00:00:00 2001 From: warp-core Date: Sat, 30 Sep 2023 16:37:01 +0100 Subject: [PATCH 54/79] fix(content) Fix some conditions in the Coalition intros (#9382) --- data/coalition/heliarch intro.txt | 48 +++++++++---------- data/coalition/lunarium intro.txt | 78 +++++++++++++++++-------------- 2 files changed, 66 insertions(+), 60 deletions(-) diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index 7a0eade1385f..8a1b5f0ced90 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -23,7 +23,7 @@ mission "Heliarch Investigation 1" random < 65 "coalition jobs" >= 70 has "license: Coalition" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" on offer conversation @@ -56,7 +56,7 @@ mission "Heliarch Investigation 2" passengers 3 to offer has "Heliarch Investigation 1: done" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" to complete has "Heliarch Investigation 2 - Mebla's Portion: done" @@ -564,7 +564,7 @@ mission "Heliarch Recon 1" has "visited planet: Kuwaru Efreti" has "First Contact: Hai: offered" has "license: Coalition" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" to fail "reputation: Quarg" < 0 @@ -682,7 +682,7 @@ mission "Heliarch Recon 2-A" destination "Ring of Wisdom" to offer has "event: heliarch recon break" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" to complete has "outfit: Outfit Scanner" @@ -716,7 +716,7 @@ mission "Heliarch Recon 2-B" waypoint "Enif" to offer has "Heliarch Recon 2-A: done" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" on offer conversation @@ -807,7 +807,7 @@ mission "Heliarch Recon 3-A" has "Quarg Interrogation: offered" has "Rim Archaeology 5B: active" has "event: rim archaeology results" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" "coalition jobs" >= 65 on offer @@ -877,7 +877,8 @@ mission "Heliarch Recon 3-B" deadline 15 to offer has "Heliarch Recon 3-A: done" - not "Lunarium: Questions: done" + not "Heliarch Recon 3-C: offered" + not "joined the lunarium" not "joined the heliarchs" not "assisting lunarium" on offer @@ -930,6 +931,7 @@ mission "Heliarch Recon 3-C" waypoint "Zubeneschamali" to offer has "Heliarch Recon 3-A: done" + not "Heliarch Recon 3-B: offered" has "joined the heliarchs" has "outfit: Scanning Module" not "assisting lunarium" @@ -1287,7 +1289,7 @@ mission "Heliarch Containment 1" to offer has "license: Coalition" has "main plot completed" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" "coalition jobs" >= 60 random > 25 @@ -1347,7 +1349,7 @@ mission "Heliarch Containment 2" deadline to offer has "Heliarch Containment 1: done" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" random > 35 on offer @@ -1420,7 +1422,7 @@ mission "Heliarch Containment 3" cargo "medication" 15 to offer has "Heliarch Containment 2: done" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" on offer conversation @@ -1474,7 +1476,7 @@ mission "Heliarch Containment 4-A" to offer has "event: plasma turret available" has "Heliarch Containment 3: done" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" on offer conversation @@ -1517,7 +1519,7 @@ mission "Heliarch Containment 4-B" destination "Station Cian" to offer has "Heliarch Containment 4-A: done" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" on offer conversation @@ -1542,7 +1544,7 @@ mission "Heliarch Containment 5" source "Station Cian" to offer has "Heliarch Containment 4-B: done" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" on offer "reputation: Lunarium" = -1000 @@ -1614,7 +1616,7 @@ mission "Heliarch Drills 1" destination "Belug's Plunge" to offer has "license: Coalition" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" random < 8 "combat rating" >= 8104 @@ -1679,7 +1681,7 @@ mission "Heliarch Drills 2-A" "apparent payment" 300000 to offer has "Heliarch Drills 1: done" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" on offer conversation @@ -1763,7 +1765,7 @@ mission "Heliarch Drills 2-B" destination "Ashy Reach" to offer has "Heliarch Drills 2-A: done" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" on offer conversation @@ -1841,7 +1843,7 @@ mission "Heliarch Drills 2-C" destination "Belug's Plunge" to offer has "Heliarch Drills 2-B: done" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" on offer conversation @@ -1995,7 +1997,7 @@ mission "Heliarch Drills 3" waypoint "Torbab" to offer has "Heliarch Drills 2-C: done" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" on offer conversation @@ -2056,20 +2058,18 @@ mission "Heliarch License 1" destination "Ring of Friendship" to offer or - "assisted heliarch" == 5 + "assisted heliarch" >= 5 and "coalition jobs" >= 90 "assisted heliarch" == 4 and "coalition jobs" >= 120 "assisted heliarch" == 3 - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting heliarchy" not "assisting lunarium" to fail - has "Lunarium: Questions: done" - to complete - has "Heliarch License 2: declined" + has "joined the lunarium" on offer conversation `When you land on , you find a Heliarch delegation waiting for you outside. When you meet them, the Saryd of the group says, "A great ally to our Coalition, you have proven to be."` @@ -2083,7 +2083,7 @@ mission "Heliarch License 2" source "Ring of Friendship" to offer has "Heliarch License 1: active" - not "Lunarium: Questions: done" + not "joined the lunarium" not "assisting lunarium" on offer conversation diff --git a/data/coalition/lunarium intro.txt b/data/coalition/lunarium intro.txt index 408dd0de5049..a27c3ee15d0b 100644 --- a/data/coalition/lunarium intro.txt +++ b/data/coalition/lunarium intro.txt @@ -34,11 +34,13 @@ mission "Lunarium: Smuggling: Charity 1" has "Coalition: First Contact: done" not "joined the heliarchs" not "Lunarium: Questions: active" + not "Lunarium: Quarg Interview: active" + not "Lunarium: Join: active" not "assisting heliarchy" on offer conversation branch chiree - has "Lunarium: Questions: done" + has "joined the lunarium" `A Kimek in a blue uniform approaches you. "Good day, Captain. Interested in helping with some charity work, would you be?" she asks.` choice ` "What sort of charity work?"` @@ -78,7 +80,7 @@ mission "Lunarium: Smuggling: Charity 1" payment 44000 conversation branch chiree - has "Lunarium: Questions: done" + has "joined the lunarium" `You find the local charity workers, and they begin unloading the supplies from your ship. When they're about done, you receive a transmission from the Kimek who gave you the job.` ` "Grateful for your services I am, Captain. As simple as the job may seem to you, a great help for those in need, these deliveries are. Contact you again, we shall, if interested in helping more, you are," she says. Once the workers are done, they hand you and move the crates to a building where Kimek are lining up to receive the supplies. Other workers continue to unload more cargo from arriving ships.` decline @@ -101,11 +103,13 @@ mission "Lunarium: Smuggling: Charity 2" has "Lunarium: Smuggling: Charity 1: done" not "joined the heliarchs" not "Lunarium: Questions: active" + not "Lunarium: Quarg Interview: active" + not "Lunarium: Join: active" not "assisting heliarcy" on offer conversation branch chiree - has "Lunarium: Questions: done" + has "joined the lunarium" `As you make your way through the spaceport on , a Kimek in a blue uniform sees you and approaches. You recognize her as the charity worker who had you deliver some supplies to the poor Kimek world of Fourth Shadow.` ` "Again we meet, Captain ! In some more charity work, are you interested?"` choice @@ -139,7 +143,7 @@ mission "Lunarium: Smuggling: Charity 2" payment 132000 conversation branch chiree - has "Lunarium: Questions: done" + has "joined the lunarium" `More blue-uniformed workers are waiting when you land, though these uniforms consist of incredibly thick, bulky coats. They take the crates out of your ship while the doctors are directed to a hospital building, and are transferred to you when the workers are done. They thank you for your help and ask that you look for them in Kimek worlds if you wish to continue helping.` decline label chiree @@ -159,11 +163,13 @@ mission "Lunarium: Smuggling: Charity 3" has "Lunarium: Smuggling: Charity 2: done" not "joined the heliarchs" not "Lunarium: Questions: active" + not "Lunarium: Quarg Interview: active" + not "Lunarium: Join: active" not "assisting heliarchy" on offer conversation branch chiree - has "Lunarium: Questions: done" + has "joined the lunarium" `A group of Kimek approach you in the spaceport. They are all in the blue uniforms of the charity you have been helping by transporting supplies and people. "Greetings, Captain ," one of them says. "Helped our charity before, you have. Interested in more work, are you?"` choice ` "What do you need me to do?"` @@ -204,7 +210,7 @@ mission "Lunarium: Smuggling: Grenades" conversation `You drop off the crates full of charity goods, and the spaceport workers start getting them up on vehicles to transport them to the poor. One of the workers transfers 261,000 credits to your account, thanking you for the help.` branch chiree - has "Lunarium: Questions: done" + has "joined the lunarium" ` As they move the last few crates, you hear a rapid tapping approaching from behind, and as you turn to investigate a Kimek tackles you. Some more join in, covering your head with some dark sack, and start shoving you around once they restrain you. You call out for help, but nobody comes. The Kimek keep pushing and tugging at you as they bring you around the city. After many minutes, you hear some doors close behind you, and your captors force you into some cramped room or compartment. You try to stand up straight, but hit your head against the ceiling. It soon becomes clear you're in a descending elevator, and when it stops, you're walked around for a while longer. Finally, the Kimek seat you and remove the sack from your head.` ` The insides remind you of an office building or call center; several Kimek are working in cubicles, most examining computer screens while others speak into communicators. You look back to where you reckon you came from, seeing the entrance to a short elevator by the end of a hallway. Coming around the corner, a Kimek you recognize approaches to sit opposite to you - the Kimek who first contacted you about the charity missions. A group of the blue uniformed Kimek follow after her as they bring a crate: one of the crates you transported here. "Forgive us for the discomfort you must, Captain," she says, as the workers open up the crate, revealing several Heliarch guns stuffed inside. "Wished to speak away from prying eyes, I did. Rest easy, you may, harm you, we will not."` choice @@ -597,7 +603,7 @@ mission "House Bebliss 2-FW" ` "Thank you, but why exactly did you want to talk to me so badly?"` ` "You asked me to come here for a job. What is the job?"` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" ` "The great House Bebliss, we represent. Maintain the local hyperspace communication network, our House does," he says as he swirls the drink in his cup before taking a sip.` ` The other one jumps in. "Studied hyperspace links, for millennia we have. More recently, an application of such phenomena that would help the Coalition, we have searched for."` goto choice @@ -616,7 +622,7 @@ mission "House Bebliss 2-FW" goto pug ` "And how did the Heliarchy know?"` branch "lunarium 2" - has "Lunarium: Questions: done" + has "joined the lunarium" ` "In 'their' space, are you not? Scanned by their ships, you were. Subtly amassed, your flight records, your charted map of the galaxy, were," she finishes, and her and the other two look to you, waiting for your answer.` goto "pug reveal" label "lunarium 2" @@ -652,7 +658,7 @@ mission "House Bebliss 2-FW" label accept ` When your hosts return, they hand you a small suitcase of sorts. "Translated our proposal into your language, we have," one of them says. "Bring that to Miss Freya, you must. Hopeful, we are, that willing to share the research material with us, she is."` branch "lunarium 3" - has "Lunarium: Questions: done" + has "joined the lunarium" ` "Also inside, certain... research papers are. A gift, she may consider it," the other adds.` goto end label "lunarium 3" @@ -686,7 +692,7 @@ mission "House Bebliss 3-FW" `You look around for Freya, asking the local dock workers where the people researching the Pug tech left on the planet are. They direct you to a quieter, less crowded place, where some warehouse complexes have been set up. Some are painted in the usual Syndicate colors, some are guarded by a few Navy troops, and a Free Worlds flag flies by the entrance of the one you enter. Inside, you see groups of people surrounding the various artifacts the Pug left behind. Some of them are running complicated looking tests, but it seems that they are mostly discussing what to do with the artifacts next. One of the graviton transmitters sits opposite to the entrance, half intact, half dismantled, with an array of scientists poking and prodding the inside machinery.` ` Freya is atop a ladder near the transmitter when she sees you. She quickly hops down from her perch and runs toward you. "! It's nice to see you again. What brings you here?" You tell her you have some important matters to discuss, and she has you follow her to an office-like room packed with tools and components.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" label "don't tell" ` You give her a rundown of the Coalition, explaining about the three species, the Heliarchs and their fight against the Quarg, and about who House Bebliss is, handing her the suitcase when you're done.` goto suitcase @@ -739,7 +745,7 @@ mission "House Bebliss 4-FW" ` He beckons you to follow him to a traffic shuttle, which eventually brings you to a towering government building. As you get closer, you notice the main courtyard is home to a multitude of different colored flags, all of them situated around the Free Worlds' own. "Planetary flags," JJ says as you both get out of the shuttle. "Some of our planets created their own recently, and some of the more diplomatic folks decided to set them up around the major government buildings." Leaving the flags waving in the breeze, the three of you head inside the building and go up an elevator, arriving on a floor with a couple rooms to the side and a larger one opposite the elevator. You enter the larger room and see a nice wooden desk, which JJ heads to, sitting behind it, as Freya takes a seat on the sofa.` ` "Well, here we are. What is this 'critical information' you've found, Captain ?"` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" choice ` "Some more aliens."` goto standard @@ -957,7 +963,7 @@ mission "Lunarium: Evacuation 1" label alright ` One of them brings you to the Spire, sending a message as you two head there, and the hatch is opened right as you arrive. They thank you for helping, and rush to board their own ship and depart. You go up the Spire's ramp and meet some more Kimek from the company, who greet you and guide you through the ship. Halfway through a corridor, they stop and ask that you wait there. A different Kimek carring nearly a dozen different devices emerges from a side corridor, and the group begins patting and circling your body with the devices. You ask them what they're doing, but they don't respond. After every single one of the machines has finished its beeps and chirps around you, and the Kimek seem satisfied, they continue on. Surprisingly, they bring you not to the cockpit, but to one of the bunks, where a Kimek is talking with a Saryd man. Once she sees you're there, the Kimek gives a glance to the Saryd, and leaves with the others, leaving you two alone.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" ` Middle-aged, the Saryd has little hair on his head and a dense beard. "Greetings, human friend. your name is, correct?" You nod. "Apologize I do, for the safety measures experienced, you must have. You see, rather sickly lately, I have been, and while usually fine around Kimek or Arach employees and passengers, wish to try my health against a Saryd or human disease, I did not. But, come to listen of my woes, you have not. Called Elirom, and owner of this company, I am. For those wishing to travel in leisure or for work, provide comfortable ships we do," he explains. "Run into some trouble, one of our ships has. Supposed to transport students and teachers back to Second Viridian after their school trip was done, but now waiting for repairs for the ship's malfunctioning outfits, they are. Picked up by , the students must be, so as to not miss their tests, but elsewhere busy, our other ships are. Pick them up in our stead, would you? from our company, you will receive."` choice ` "Sure, where am I picking them up from?"` @@ -999,7 +1005,7 @@ mission "Lunarium: Evacuation 2" conversation `A line of Kimek, with some Saryds and Arachi in their midst, approach your ship shortly after you've finished landing. These must be the students. They are carrying very little luggage, and board your ship once you open the hatch. Given the young appearance of all of them, you struggle to guess which ones are the teachers. After the last of them comes in, you look outside for a while, confused. Only came in, not the 35 that Elirom mentioned.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" choice ` "Weren't there 35 of you?"` ` (Say nothing.)` @@ -1025,7 +1031,7 @@ mission "Lunarium: Evacuation 2" conversation `Some of the local Kimek are waiting with transport vehicles for the students. They hand you once you step off your ship, and one of them appears to tick away at a list with each student that steps off your ship. After the last one leaves, he continues to look at your ship for a few seconds, then to the students, entering the vehicles. He strikes two lines, and thanks you for helping. Back inside your ship, you receive a call from Elirom.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" ` "! Thank you for helping, I must," he says. "Difficult it can be, when relying on contractors we are. Prefer to travel in ships of my company, our clients usually do. Glad I am, that no issues with the 35 of them, you had. If any more trouble with our usual transports, I have, ask for your services again I may."` choice ` "Sure thing, it's no problem helping with this."` @@ -1064,7 +1070,7 @@ mission "Lunarium: Evacuation 3" on offer conversation branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" `Walking around the spaceport for a few minutes, you're met by a pair of Saryds. "Captain ? Worked with our company before, you have. Helped with transporting a group of students, you had." You nod. "Another troubling situation, we have. Help us again, would you?" They point to a Kimek Spire, presumably the very same you boarded last time, parked at the edge of the local docks.` choice ` "Sure, lead the way."` @@ -1115,7 +1121,7 @@ mission "Lunarium: Evacuation 4" conversation `The ranchers arrive to the hangars shortly after you land, most of them Arachi, with a few Saryds and Kimek in their midst. They come into your ship, all of them present.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" ` "All ready to leave, we are," one Arach tells you as most of the others head to find their bunks.` choice ` "Got it, we'll leave soon."` @@ -1148,7 +1154,7 @@ mission "Lunarium: Evacuation 4" conversation `The Arachi, along with the scattered few Saryds and Kimek, are ready to leave your ship right as you land, thanking you briefly as each one leaves. The Arachi who seemed to be leading the group give you more of a farewell, chatting a bit, until they see a Kimek Spire - that you all guess to be Elirom's ship - approaching. They grunt, and leave with the rest. You head into the Spire and meet Elirom, who hands you while watching the group leave in transports via one of the cameras on the outside of the ship.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" choice ` "They didn't seem very happy to see you."` goto happy1 @@ -1191,7 +1197,7 @@ mission "Lunarium: Evacuation 5" payment 1387562 conversation branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" `You receive a call seconds after you've touched down on . It's from Elirom, the Saryd who had you help transport some of his company's clients. "Captain ! Your help again, we need," he begins. "Hired us to bring them to their new home on Ablub's Invention, some immigrants from did. in total. Only..." he looks down, his mouth struggling for words. "Fallen ill, the captain of the ship we had arranged for them has. Supposed to leave by , they were, but get to in time, we cannot. You, however, a jump drive possess. Help us now, only you can, Captain."` choice ` "I'd be glad to help. I'll head there as quick as I can."` @@ -1217,7 +1223,7 @@ mission "Lunarium: Evacuation 5" conversation `You are contacted by Elirom upon landing.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" ` "Informed I was that manage to make it in time for the transport, you did not, Captain," he speaks in a much sterner tone than what you'd grown accustomed to. "Truly important for us, this job was. Helped us much, you have, but afraid I am that work together any longer, we will not. Goodbye."` ` He signs off before you're able to explain your delay.` decline @@ -1241,7 +1247,7 @@ mission "Lunarium: Evacuation 6" conversation `The moment your ship touches down on the hangar you can already see a very large group of Saryds waiting. When you open your hatch, they rush in dozens at a time, and you catch some Kimek and Arachi in the middle, struggling to keep with the galloping mass. Once everyone is inside, you run a passenger count: only of the 116 are on board. You look out, and see nobody else coming to your ship. One of the older Saryds approaches you, pressing the button to close the hatch. "Leave we must," he says. Looking back to the Saryd crowd, many of the adults are comforting their children. The sobs of one Saryd girl in particular drown out the others.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" choice ` "I was told there were 116 of you for me to pick up. We only have ."` ` "Alright, we'll leave in a few minutes."` @@ -1270,7 +1276,7 @@ mission "Lunarium: Evacuation 6" `You receive a message from Elirom as you enter the planet's airspace, passing you some coordinates and instructing you to land there instead of the usual ports here. You come to a complex in the middle of a prairie, with a blue-ish metal building at its center. As you come down for a landing, you see Elirom's own ship is landed there.` ` Just as quickly as they entered it, your passengers rush out of your ship, greeting and hugging some of the people waiting for them. One of them, Elirom, shyly watches from the Spire, not having come down the ramp yet. The older Saryd who was accompanying the crying Saryd girl leaves her side briefly once he sees him, walking at a quick pace toward Elirom. He grabs him by the shoulders and shouts something in the Saryd language, though no translators pick it up. When he lets go of his shoulders, he goes back to accompanying the girl, and Elirom stays put. You go to him, which prompts him to reach in a pocket and grab a bunch of credit chips, handing them to you. , in total. "Told you I did, that well paid you would be."` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" choice ` "What were all of them so worked up about?"` ` "What's really going on with you and your company?"` @@ -1333,7 +1339,7 @@ mission "Lunarium: Propaganda 1" on offer conversation branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" `The spaceport of looks different than the usual Saryd ports: several large posters with some form of badge or logo are scattered about, some fallen to the ground, others still sticking to the walls. As you pick one up to get a better look, an Arach approaches you. "Captain you are, yes?" You nod. "Tummug, I am called. Caught your eye, I see that our posters have. Part of a group promoting new cultural festivals and movies, I am. A tiresome task at times, repetitive even, but always worth it, in the end, helping spread word of new art pieces is."` choice ` "What are these ones for?"` @@ -1366,7 +1372,7 @@ mission "Lunarium: Propaganda 1" conversation `As you're still handling landing procedures, Tummug is organizing the posters in several smaller piles. "Make sure everyone has the same amount of posters, I must. Let any of them slack off, I will not," he banters. Your ship touches down on the hangar, and Tummug hands you . He makes a call, and minute after minute some Saryds start coming to your ship. You open the hatch, and he starts handing out a pile of posters to each one who comes in. The posters aren't all identical, though the imagery is pretty much the same in all of them: a dark, nine-pointed star, crumbling to pieces.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" choice ` "So what are these posters for?"` ` "Do you really need that many posters?"` @@ -1403,7 +1409,7 @@ mission "Lunarium: Propaganda 2" conversation `As before, you find the local spaceport decorated with Tummug's various posters, with some all over the walls and a few on the floor already. Either they were taken down or simply failed to stick to the wall properly. Most of the locals just glance at them, then continue on with their business; only a few pockets of people have formed near some of the posters, perhaps discussing the imagery. Some of the spaceport cleaning workers, on the other hand, take them down nonchalantly, though they don't seem to care too much about getting all the posters.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" ` You find Tummug waiting for you in a cafe with some Saryds. "Ready to help us again are you, Captain?" he asks as you sit down.` choice ` "Where are we going now?"` @@ -1434,7 +1440,7 @@ mission "Lunarium: Propaganda 2" conversation `As before, Tummug separates the banners into small piles as you're finishing your landing procedures. He hands you right before the first few Saryds leave with their piles, and a few local Arachi join them in picking up banners to distribute around their local neighborhoods. "Meet you in the spaceport again, we will," Tummug says as he finishes distributing the banners. Looking at his own pile, you see an image split with a sharp line running from top to bottom, with the drawing of an Arach collapsing under a scorching sun on the left side contrasted with one having a happy dinner under the moonlight on the right side. Some message in the Arach language is written out at the bottom, below the two images.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" choice ` "What does that say?"` ` "Alright, I'll meet you at the spaceport in a few hours."` @@ -1469,7 +1475,7 @@ mission "Lunarium: Propaganda 3" `The spaceport on shows fewer of the banners than you expected, with only a few scattered about the walls. One Arach leaves their work building and gasps at the first banner they see, taking it down and throwing it in a bin. They seem stunned for a second, and look around in a hurry, right before scurrying off. Another Arach has a similar reaction to a different banner, but after pondering for a bit, leaves it alone and walks away.` ` When you're done gauging the local reception to Tummug's banners, you go look for him. Eventually you arrive at a workshop, where he's talking with four other Arachi as they work on some small robots not too different from those employed in Arach hull repair systems. The only difference appears to be "wings" that the Arachi are testing by controlling them remotely. "Captain !" Tummug exclaims when he notices you. "Apologize, I must, for not waiting for you in the spaceport. Caught up in testing the prototypes, we were."` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" choice ` "What were you testing?"` ` "What are those robots for?"` @@ -1503,7 +1509,7 @@ mission "Lunarium: Propaganda 3" conversation `This time Tummug doesn't go on to split the flyers into various piles as you're landing. "Already arranged them in the boxes, we have," he says. He directs you to land in a lone hangar on one of the factories far from the city. Upon landing, several Kimek enter the hangar and start crating off the flyers and skywriting drones back to the factory, presumably to make sure they're all in working order. Tummug hands you , thanking you for bringing them here.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" ` "Now Captain, fly the drones over the city we will. Only here to keep an eye on any issues they might have, and repair them, we are," he explains. "To better enjoy the show, head back to the main hangars closer to the city, you should. Once finished, we are, meet you in the spaceport I will. Some more cargo space and bunks, we'll need." You head to your ship, and fly it back to the city.` goto end label lunarium @@ -1531,7 +1537,7 @@ mission "Lunarium: Propaganda 4" conversation `Tummug is quick to find you in the spaceport. He approaches you with the Arachi who helped him with the drones, as well as some Saryds and Kimek, all following behind him in a dash. "Delay you long this time I will not, Captain ," he says. "Headed to we are. Already arranged for what we'll need to be brought to your ship, I have."` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" ` He then tugs on your clothing as if asking you to bow down a bit, as he himself stretches up. "Leave at once, we must!" he whispers.` ` You do your best to keep up as you run with them back to your ship, where they help some others load boxes and crates of promotional posters into your cargo hold. Strangely enough, you don't see any of the flyers that the drones rained from above earlier, or any sort of video displaying the skywriting on screens around the spaceport. Once the cargo is all in your ship, Tummug comes to say you'll receive for the job, and rushes inside your ship with the others.` accept @@ -1551,7 +1557,7 @@ mission "Lunarium: Propaganda 4" conversation `Tummug gives you the and starts working on opening up the crates and boxes with the others. By the time you open the hatch, they've only managed to open some of the crates, but it seems like they've called in several Saryds from the hangar to help unload the remaining boxes and move them elsewhere. You approach Tummug, who's still picking through the posters. The posters are emblazoned with images of Saryds, Kimek and Arachi jailed and imprisoned in cages made out of chains. Looking closely, you realize the "chains" are made out of circlets like those used by the Heliarchs. Your eyes go to Tummug, who's looking back at you.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" choice ` "What exactly are these for?"` goto for @@ -1612,7 +1618,7 @@ mission "Lunarium: Combat Training 1" conversation `After wandering the spaceport for a while, you notice a crowd of dozens of individuals heading to the hangars, specifically in what looks like the direction of your ship. A roughly equal number of Kimek and Arachi, with some Saryds as well, they stand in front of the , looking around as if searching for its captain. You approach them, and one of the Kimek, whose thorax and abdomen are slimmer than the usual for her species, meets you to speak for their group.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" ` "There you are, Captain ," she greets you. "Pyakri, my name is, and looking for your transport services, me and my friends are. Talk in your ship, could we? Wish to discuss the details there, I do."` choice ` "Sure, let me get the hatch."` @@ -1818,7 +1824,7 @@ mission "Lunarium: Combat Training 4" conversation `Shortly after you land, several groups come to meet some of the Lunarium members and escort them to their ships. They depart right away, while any remaining members leave straight for the city. "Gotten word of our return, the others have not yet, so wait here for more ships to bring them to the planet they normally operate from, they will," Pyakri explains.` branch lunarium - has "Lunarium: Questions: done" + has "joined the lunarium" ` "A great help you were, Captain. Train normally, against each other as in drills, we cannot, as risk the Heliarchs finding us, it would. Not very useful either, since fighting ships weak like our own, we will not be." She looks out to the others, preparing to head into the city herself. "Aware I am that joined up with us, you have not, Captain. Your choice, it is, whether you do help us further, help the Heliarchs, or just leave and never return. Just, ask you I do, that think well about it before deciding, you must." With that, she says goodbye, and follows the others into the city.` accept label lunarium @@ -1840,7 +1846,7 @@ mission "Lunarium: Questions" to offer has "outfit: Jump Drive" or - "assisted lunarium" == 5 + "assisted lunarium" >= 5 and "coalition jobs" >= 80 "assisted lunarium" == 4 @@ -1853,10 +1859,8 @@ mission "Lunarium: Questions" not "assisting lunarium" to fail or - has "Heliarch License 1: done" + has "joined the heliarchs" "reputation: Quarg" < 0 - to complete - has "Lunarium: Quarg Interview: accepted" on offer conversation `As you prepare to land on , your monitor starts producing a low hum, stops, then starts again. This keeps up for nearly a minute until a message pops up. "Captain , come to trust you our comrades have, thanks to your consistent help to our cause. Interested we are in your continuous support, so that free the Coalition, together we can. To you must come, meet with you, our leaders will, so that discuss an important task with them, you may. An available bunk in your ship, you should have."` @@ -1873,7 +1877,7 @@ mission "Lunarium: Quarg Interview" destination "Lagrange" to offer has "Lunarium: Questions: active" - not "Heliarch License 1: done" + not "joined the heliarchs" not "assisting heliarchy" on offer conversation @@ -1958,6 +1962,7 @@ mission "Lunarium: Join" landing source "Lagrange" destination "Remote Blue" + passengers 1 to offer has "Lunarium: Quarg Interview: done" on offer @@ -1994,6 +1999,7 @@ mission "Lunarium: Join" on visit dialog `You've reached , but your escort bringing Oobat hasn't entered the system yet. Better depart and wait for it.` on complete + set "joined the lunarium" set "language: Coalition" event "first lunarium unlock" conversation From 265e2af55fcf7ec24bd5523bdb0ec36bb1d2a3b5 Mon Sep 17 00:00:00 2001 From: Rising Leaf <85687254+RisingLeaf@users.noreply.github.com> Date: Sat, 30 Sep 2023 17:56:08 +0200 Subject: [PATCH 55/79] fix(ui): Do not apply swizzle masks to the outline image used in the ship info panel (#9379) --- source/SpriteShader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/SpriteShader.cpp b/source/SpriteShader.cpp index d902a21f7e8b..19387188fa40 100644 --- a/source/SpriteShader.cpp +++ b/source/SpriteShader.cpp @@ -348,7 +348,7 @@ void SpriteShader::Add(const Item &item, bool withBlur) glUniform1i(swizzleMaskI, 1); // Don't mask full color swizzles that always apply to the whole ship sprite. - glUniform1i(useSwizzleMaskI, item.swizzle == 27 || item.swizzleMask == 28 ? 0 : item.swizzleMask); + glUniform1i(useSwizzleMaskI, item.swizzle >= 27 ? 0 : item.swizzleMask); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D_ARRAY, item.swizzleMask); glActiveTexture(GL_TEXTURE0); From 34bc14097e94b43eb5fbc43a7ae0efac75321102 Mon Sep 17 00:00:00 2001 From: warp-core Date: Sat, 30 Sep 2023 16:57:46 +0100 Subject: [PATCH 56/79] fix(mechanics): Reallow jump drives to use hyperlinks regardless of distance (#9376) --- source/ShipJumpNavigation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/ShipJumpNavigation.cpp b/source/ShipJumpNavigation.cpp index 64572db7eaed..a5b2f38abc29 100644 --- a/source/ShipJumpNavigation.cpp +++ b/source/ShipJumpNavigation.cpp @@ -143,7 +143,7 @@ pair ShipJumpNavigation::GetCheapestJumpType(const System *fro const double distance = from->Position().Distance(to->Position()); double jumpFuelNeeded = JumpDriveFuel((linked || from->JumpRange()) ? 0. : distance); - bool canJump = jumpFuelNeeded && (!from->JumpRange() || from->JumpRange() >= distance); + bool canJump = jumpFuelNeeded && (linked || !from->JumpRange() || from->JumpRange() >= distance); if(linked && hasHyperdrive && (!canJump || hyperFuelNeeded <= jumpFuelNeeded)) return make_pair(JumpType::HYPERDRIVE, hyperFuelNeeded); else if(hasJumpDrive && canJump) From 51f800f2acf1d06479eba55f96c8b5f67f369b3c Mon Sep 17 00:00:00 2001 From: warp-core Date: Sat, 30 Sep 2023 16:58:23 +0100 Subject: [PATCH 57/79] fix(typo): Missing article (#9384) --- data/coalition/heliarch intro.txt | 2 +- data/coalition/lunarium intro.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index 8a1b5f0ced90..761189d05264 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -2087,7 +2087,7 @@ mission "Heliarch License 2" not "assisting lunarium" on offer conversation - `The Heliarch authorities of the have offered you a position in the ranks of the Heliarchs. Would you like to meet with them and officially join the Heliarchy? Given their history with the Quarg, and the rumors of rebellion stirring in Coalition space, this would no doubt set you on path to conflict with the Quarg and the resistance forces.` + `The Heliarch authorities of the have offered you a position in the ranks of the Heliarchs. Would you like to meet with them and officially join the Heliarchy? Given their history with the Quarg, and the rumors of rebellion stirring in Coalition space, this would no doubt set you on a path to conflict with the Quarg and the resistance forces.` choice ` (Yes.)` ` (Not yet.)` diff --git a/data/coalition/lunarium intro.txt b/data/coalition/lunarium intro.txt index a27c3ee15d0b..b5bcfd21d182 100644 --- a/data/coalition/lunarium intro.txt +++ b/data/coalition/lunarium intro.txt @@ -1881,7 +1881,7 @@ mission "Lunarium: Quarg Interview" not "assisting heliarchy" on offer conversation - `Here on , the Lunarium leaders are waiting for you. Would you like to meet with them and officially join the Lunarium? Given their cause against the Heliarchs, this would no doubt set you on path to conflict with the Heliarchy.` + `Here on , the Lunarium leaders are waiting for you. Would you like to meet with them and officially join the Lunarium? Given their cause against the Heliarchs, this would no doubt set you on a path to conflict with the Heliarchy.` choice ` (Yes.)` ` (Not yet.)` From 6c459eb3e69effc25596a47ad1836b30858f0272 Mon Sep 17 00:00:00 2001 From: Saugia <93169396+Saugia@users.noreply.github.com> Date: Sat, 30 Sep 2023 12:00:20 -0400 Subject: [PATCH 58/79] feat(content): Adjust jump range values of some Gegno & Rulei Systems (#9374) --- data/map systems.txt | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/data/map systems.txt b/data/map systems.txt index 4d4fd583e168..32e556ddda9e 100644 --- a/data/map systems.txt +++ b/data/map systems.txt @@ -2850,7 +2850,7 @@ system Aescolanus period 2870.08 system Aierena - pos 1048.06 -348.956 + pos 1045.838 -347.623 government Uninhabited attributes "bright star" "notable star" arrival 3000 @@ -14745,13 +14745,13 @@ system "Gamma Corvi" period 2076.63 system Gaungu - pos 1097.72 -321.899 + pos 1096.979 -320.418 government Uninhabited arrival 500 habitable 400 belt 1072 "jump range" 80 - haze _menu/haze-none + haze _menu/haze-brown link Yranjiu asteroids "small rock" 13 4.35 asteroids "medium rock" 19 3.9 @@ -16806,7 +16806,7 @@ system Iigen arrival 500 habitable 230 belt 1699 - "jump range" 60 + "jump range" 70 haze _menu/haze-brown link Heutesl link Oosuoro @@ -18587,7 +18587,7 @@ system Kaliptari period 29.5684 system Kanguwa - pos 990.137 -331.456 + pos 995.47 -329.975 government Uninhabited attributes "neutron" "notable star" "rulei" music "ambient/rulei space" @@ -19274,11 +19274,12 @@ system "Kifrana Terberah" period 3488.63 system Kilema - pos 1043.5 -472.08 + pos 1039.944 -479.191 government Uninhabited arrival 500 habitable 150 belt 612 + "jump range" 70 haze _menu/haze-brown link "Erba Yle" asteroids "small rock" 4 1.9 @@ -19323,7 +19324,6 @@ system Kiluit arrival 2430 habitable 2430 belt 1258 - "jump range" 70 haze _menu/haze link Jied link Nnaug @@ -20432,12 +20432,13 @@ system Kursa period 1517.13 system L-118 - pos 1085.78 -416.75 + pos 1088.891 -408.306 government Uninhabited attributes "bright star" "notable star" "umbral reach" arrival 3000 habitable 3000 belt 1724 + "jump range" 70 haze _menu/haze-coal link H-9187 asteroids "small rock" 12 3.3 @@ -23538,7 +23539,7 @@ system Mora period 24.168 system Msalbit - pos 978.348 -274.767 + pos 986.052 -277.73 government Uninhabited attributes "bright star" "notable star" arrival 5000 @@ -32853,7 +32854,7 @@ system Vaiov offset 180 system Vanguwo - pos 978.189 -237.686 + pos 965.152 -237.39 government Uninhabited attributes "giant star" "notable star" arrival 4050 @@ -33252,13 +33253,13 @@ system Vorsuke period 320 system Vulcuja - pos 1071.75 -263.767 + pos 1072.046 -264.656 government Uninhabited attributes "carbon" "notable star" arrival 3000 habitable 3000 belt 1972 - haze _menu/haze-coal + haze _menu/haze-33 link Yranjiu asteroids "large rock" 1 1 asteroids "large metal" 1 1 @@ -34395,7 +34396,7 @@ system Yllke period 242.1 system Yranjiu - pos 1054.27 -298.942 + pos 1056.344 -303.683 government Uninhabited attributes "black hole" "notable star" arrival 5000 From c16bdf191d208e05e3143c63074008a3d49d6515 Mon Sep 17 00:00:00 2001 From: warp-core Date: Sat, 30 Sep 2023 17:05:22 +0100 Subject: [PATCH 59/79] fix(content): `active` to `done` in 2 Coalition Intro Missions (#9383) --- data/coalition/heliarch intro.txt | 2 +- data/coalition/lunarium intro.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index 761189d05264..4301cfb5c267 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -2082,7 +2082,7 @@ mission "Heliarch License 2" invisible source "Ring of Friendship" to offer - has "Heliarch License 1: active" + has "Heliarch License 1: done" not "joined the lunarium" not "assisting lunarium" on offer diff --git a/data/coalition/lunarium intro.txt b/data/coalition/lunarium intro.txt index b5bcfd21d182..fcfc4e2224db 100644 --- a/data/coalition/lunarium intro.txt +++ b/data/coalition/lunarium intro.txt @@ -1876,7 +1876,7 @@ mission "Lunarium: Quarg Interview" source "Remote Blue" destination "Lagrange" to offer - has "Lunarium: Questions: active" + has "Lunarium: Questions: done" not "joined the heliarchs" not "assisting heliarchy" on offer From e81785a5b902b65d535b04a89a5346779df876ba Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 30 Sep 2023 19:36:00 +0200 Subject: [PATCH 60/79] fix(content): Condition Typos in Coalition Intro (#9385) --- data/coalition/coalition jobs.txt | 22 +++++++++++----------- data/coalition/lunarium intro.txt | 2 +- data/quarg/quarg missions.txt | 5 ++--- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/data/coalition/coalition jobs.txt b/data/coalition/coalition jobs.txt index 452a4b32f806..d6d4b6c0743c 100644 --- a/data/coalition/coalition jobs.txt +++ b/data/coalition/coalition jobs.txt @@ -1523,7 +1523,7 @@ mission "Evacuate Lunarium True" deadline to offer random < 10 - has "Lunarium Evacuation 6: done" + has "Lunarium: Evacuation 6: done" not "Heliarch Investigation 2: active" not "joined the heliarchs" to fail @@ -1555,7 +1555,7 @@ mission "Evacuate Lunarium Fail" deadline to offer random < 5 - has "Lunarium Evacuation 6: done" + has "Lunarium: Evacuation 6: done" not "Heliarch Investigation 2: active" not "joined the heliarchs" to fail @@ -1582,7 +1582,7 @@ mission "Lunarium: Armageddon Core Delivery" description "The Lunarium is offering for you to deliver an Armageddon Core to ." to offer random < 4 - has "Lunarium: Reactors: done" + has "Lunarium: Smuggling: Reactors: done" not "Lunarium: Armageddon Core Delivery: active" not "Heliarch Investigation 2: active" not "joined the heliarchs" @@ -1609,7 +1609,7 @@ mission "Lunarium: Fusion Reactor Delivery" description "The Lunarium is offering for you to deliver a Fusion Reactor to ." to offer random < 7 - has "Lunarium: Reactors: done" + has "Lunarium: Smuggling: Reactors: done" not "Lunarium: Fusion Reactor Delivery: active" not "Heliarch Investigation 2: active" not "joined the heliarchs" @@ -1636,7 +1636,7 @@ mission "Lunarium: Breeder Reactor Delivery" description "The Lunarium is offering for you to deliver a Breeder Reactor to ." to offer random < 10 - has "Lunarium: Reactors: done" + has "Lunarium: Smuggling: Reactors: done" not "Lunarium: Breeder Reactor Delivery: active" not "Heliarch Investigation 2: active" not "joined the heliarchs" @@ -1663,7 +1663,7 @@ mission "Lunarium: Torpedo Delivery" description "The Lunarium is offering for you to deliver a Torpedo Launcher, complete with 30 torpedoes, to ." to offer random < 12 - has "Lunarium: Torpedoes: done" + has "Lunarium: Smuggling: Torpedoes: done" not "Lunarium: Torpedo Delivery: active" not "Heliarch Investigation 2: active" not "joined the heliarchs" @@ -1690,7 +1690,7 @@ mission "Lunarium: Typhoon Delivery" description "The Lunarium is offering for you to deliver a Typhoon Launcher, complete with 30 Typhoon Torpedoes, to ." to offer random < 7 - has "Lunarium: Torpedoes: done" + has "Lunarium: Smuggling: Torpedoes: done" not "Lunarium: Typhoon Delivery: active" not "Heliarch Investigation 2: active" not "joined the heliarchs" @@ -1715,7 +1715,7 @@ mission "Lunarium: Plasma Delivery" description "The Lunarium is offering for you to deliver a Plasma Turret to ." to offer random < 6 - has "Lunarium: Heat: done" + has "Lunarium: Smuggling: Heat: done" not "Lunarium: Plasma Delivery: active" not "Heliarch Investigation 2: active" not "joined the heliarchs" @@ -1739,7 +1739,7 @@ mission "Lunarium: Flamethrower Delivery" description "The Lunarium is offering for you to deliver a pair of Flamethrowers to ." to offer random < 8 - has "Lunarium: Heat: done" + has "Lunarium: Smuggling: Heat: done" not "Lunarium: Flamethrower Delivery: active" not "Heliarch Investigation 2: active" not "joined the heliarchs" @@ -1763,7 +1763,7 @@ mission "Lunarium: Grenade Delivery" description "The Lunarium is offering for you to deliver a dozen Fragmentation Grenades to ." to offer random < 11 - has "Lunarium: Grenades: done" + has "Lunarium: Smuggling: Grenades: done" not "Lunarium: Grenade Delivery: active" not "Heliarch Investigation 2: active" not "joined the heliarchs" @@ -1787,7 +1787,7 @@ mission "Lunarium: Anti-Missile Delivery" description "The Lunarium is are offering for you to deliver a Heavy Anti-Missile Turret to ." to offer random < 10 - has "Lunarium: AM: done" + has "Lunarium: Smuggling: AM: done" not "Lunarium: Anti-Missile Delivery: active" not "Heliarch Investigation 2: active" not "joined the heliarchs" diff --git a/data/coalition/lunarium intro.txt b/data/coalition/lunarium intro.txt index fcfc4e2224db..d645e1334f33 100644 --- a/data/coalition/lunarium intro.txt +++ b/data/coalition/lunarium intro.txt @@ -1607,7 +1607,7 @@ mission "Lunarium: Combat Training 1" or has "Lunarium: Propaganda 4: done" has "Lunarium: Evacuation 6: done" - has "Lunarium: Reactors: done" + has "Lunarium: Smuggling: Reactors: done" and or not "event: fw suppressed Greenrock" diff --git a/data/quarg/quarg missions.txt b/data/quarg/quarg missions.txt index b7346356a119..64fdf7ccd262 100644 --- a/data/quarg/quarg missions.txt +++ b/data/quarg/quarg missions.txt @@ -231,9 +231,8 @@ mission "Ask Quarg About Coalition Early" to offer has "First Contact: Quarg: offered" has "Coalition: First Contact: done" - not "assisted heliarch" - not "Heliarch Recon 1: offered" - not "Lunarium: Introductions: offered" + not "joined the lunarium" + not "joined the heliarchs" source attributes "quarg" attributes "station" From d02ba90bd0f7a0e5e6920237771a7f34c4ebc5bd Mon Sep 17 00:00:00 2001 From: Amazinite Date: Sat, 30 Sep 2023 13:37:28 -0400 Subject: [PATCH 61/79] feat(docs): Update the changelog for v0.10.3 (#9344) --- changelog | 242 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 242 insertions(+) diff --git a/changelog b/changelog index 2022de45222e..ef05300c6e8f 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,245 @@ +Version 0.10.3 + * Big changes: + * The introductory chapters for TWO storylines in Coalition space are now available, allowing the player to either gain the favor of the Heliarchy or become entangled with the underground Lunarium faction. (@Arachi-Lover) + * Loads of UI/UX changes and improvements. See the user interface section for more details. + * Bug fixes: + * Content bugs: + * Typo fixes. (@AlexSeaLion, @Arachi-Lover, @aradapilot, @ashdnazg, @bene-dictator, @justinnhli, @lumbar527, @Pshy0, @real-dam, @roadrunner, @Saugia, @tibetiroka, @warp-core, @Wedge009) + * Re-added the planet Eavine to the map, as it was accidentally removed in a previous release. (@warp-core) + * Added the "inscrutable" attribute to a space creature that was missing it. (@Saugia) + * Added the "unplunderable" attribute to the Lasher Pistol. (@Quantumshark) + * Changed the Marauder Manta weapons-variant ship description to properly describe what new features the variant has. (@warp-core) + * Adjusted a conversation branch in "Remnant: Shattered Light 4" that was preventing most ships from getting the full conversation. (@justinnhli) + * "Expedition to Hope 2" now gives clearance to the destination, allowing it to offer if you are hostile with the destination instead of not offering without explanation. (@warp-core) + * Old pilots who completed part of the Wanderer campaign will now be properly retroactively granted the Wanderer outfit license. (@warp-core) + * The "Remnant: Expanded Horizons Astral" job can no longer choose the Deep Space systems as waypoints. (@Quantumshark) + * Ssil Vida station no longer loses one of its planet attributes after an event. (@danaris) + * Spaceport news intended for occupied Pug worlds no longer appears on uninhabited worlds. (@Anarchist2) + * Added the "minor" mission tag to a Free Worlds side plot storyline to prevent it from offering at the same time as major storyline missions. (@Anarchist2) + * Fixed the "Remnant: Face to Maw" missions to properly offer under the expected circumstances. (@Zitchas, @warp-core) + * Replaced the "shield resistance" attribute (which doesn't do anything) on the Embersylph with "ion resistance". (@Quantumshark) + * Set the Hai merchant fleets to use the correct government. (@warp-core) + * Contacting the Korath Exiles can now properly be deferred and reoffered instead of deferring the mission effectively declining it. (@Hurleveur) + * Corrected the offer location on "Robotic Musical 1", as it was unable to offer with the location it was given. (@Terin) + * Corrected uses of the "scrambling protection/resistance" attribute to the proper "scramble protection/resistance" attribute. (@warp-core) + * Separated the government used for space life near the Gegno to be different to the one used for space life in the Ember Waste to prevent one from unintentionally affecting the other. (@Saugia) + * Adjusted the location of the planet Ki Patek Ka in its system as to not overlap with the orbits of its neighboring gas giant (@Quantumshark) + * Trimmed New Austria's post-bombing description to better fit the text box. (@Anarchist2) + * Fixed the source filter of the "Trash Fire Crops" mission to properly offer only on planets that are both farming and from the Dirt Belt. (warp-core) + * Corrected the brown dwarf sprite in the system "Ae Il A-3" to the non-rogue variant. (@warp-core) + * Recategorized the Heliarch license to the "License" category. (@DarcyManoel) + * Corrected the offer conditions of "Care Package to South 3a" so that it now properly offers. (@ziproot) + * Various fixes and improvements to the new Coalition storylines. (@quyykk, @Saugia, @warp-core) + * Engine bugs: + * Using hotkeys to search for the nearest asteroid no longer crashes the game. (@RisingLeaf) + * Player escorts no longer appear as landed on the planet that the player landed on if they themselves could not land on that planet. (@TomGoodIdea) + * Fixed an error with this where landing on planets under certain circumstances, such as when losing mission clearance after landing, could cause no ship to be chosen as the player's flagship, stranding you on the planet. (@danaris, @warp-core) + * The autopilot AI no longer attempts to make pointless turn commands when already in the process of jumping. (@Zitchas) + * Escorts now properly offload their cargo on every landing. (@flowers9) + * Map buttons no longer overlap on smaller screens. (@TomGoodIdea) + * Empty strings are now saved as "" so that they don't disappear on subsequent loads. (@warp-core) + * Bribes can no longer have negative values. (@Hurleveur) + * The scroll buttons on the shop detail panel can now be clicked. (@flowers9) + * Improved the rounding used for mortgage calculations to result in the proper payment amount. (@flowers9) + * The shipyard and outfitter mission offer location tags will now properly write to the save file. (@flowers9) + * Fixed an error that prevented the "tribute: " autocondition from being used. (@Hurleveur) + * Cargo scans no longer duplicate the digits of harvested minerals. (@warp-core) + * The player info UI now only accepts double clicking to open a ship's info if both clicks were on the same ship, instead of allowing clicking on one ship and then clicking on another ship shortly afterward to count as double clicking the second ship. (@TomGoodIdea) + * Trailing whitespace in hails no longer causes hails to overlap with one another. (@flowers9) + * The selected ship UI now has the ship name centered with the ship image, and the maximum ship image size has been shrunk so that it doesn't overlap with the ship's name. (@TomGoodIdea) + * If the player's flagship is a fighter, the travel plan will now be properly drawn with how far the flagship can jump. (@flowers9) + * Fixed the new "fail" action behavior not working with the "on enter" action (@Hurleveur) + * Fixed a logic error when checking if a ship is ready to jump that prevented some ships from jumping. (@flowers9) + * The amount of thrust provided by engines when you have insufficient resources (e.g. energy, fuel) available to fire them at 100% now correctly scales down the thrust provided by the amount of resources you have. (@flowers9) + * Planets no longer launch defense fleets from invalid definitions, which could cause the game to crash. (@TomGoodIdea) + * The click zones for the descriptions of ships and outfits in the shop are now properly aligned with the description text. (@flowers9) + * Ships and outfits without descriptions in the shop will no longer display description click zones. (@warp-core) + * Fixed an issue where scanning a ship's cargo or outfits could cause the scan dialog to appear twice. (@warp-core) + * Selecting a new system on the map now always clears the system orbit data, instead of only doing so when the newly selected system has been visited. (@TomGoodIdea) + * Switching between two engines that use the same engine flare sprite but at different scales will now properly update the engine sprite scale. (@TomGoodIdea) + * Overlays like the planet labels are no longer stepped while the player is landed. This was causing planet labels to appear in the wrong position when landed. (@tibetiroka) + * NPC actions now properly trigger if a ship receives two simultaneous events. (@warp-core) + * Disabling and enabling plugins is now properly handled with the new plugin metadata file. (@quyykk) + * Long plugin names are now truncated to the appropriate length in the plugins preferences panel. (@warp-core) + * Travel plans that become invalid due to any reason (such as by system changes caused by events) are now cleared. (@warp-core) + * A valid CargoHold is now always returned when getting planetary storage, preventing segfaults. (@quyykk) + * Fixed a race condition that could occur when drawing planet labels, causing them to flicker. (@quyykk) + * Corrected the use of SDL_GetPrefPath in Files.cpp. (@quyykk) + * Fixed a lambda function that was unnecessarily copying the list of every active ship every frame instead of getting a reference to it. (@tibetiroka, @quyykk) + * Game content: + * New content: + * New mission where you answer a distress call in Korath space. (@UnorderedSigh, @williaji) + * More human spaceport news. (@dorbarker, @tibetiroka) + * Added new humanitarian aid jobs to human space. (@dorbarker) + * Added a warning for when you've upset Unfettered sympathizers. (@MasterOfGrey) + * New mission where you take war refugees to Humanika. (@dseomn) + * New pre-war missions that help lead people to the start of the Free Worlds campaign if they're traveling elsewhere in the galaxy. (@danaris) + * Added more high-end passenger missions to human space. (@Anarchist2) + * Mission changes: + * Mentioned in the conversation and description of "Deal Change 2" that you need to hail the destination planet in order to land. (@bene-dictator) + * The player can now ask Tomek for combat advice prior to the first major Free Worlds battle. (@warp-core) + * Revised the smuggler arc of the Hai Reveal storyline. (@UnorderedSigh) + * Bounty jobs now provide their payment the moment the bounty fleet is destroyed, instead of requiring that the player return to the offer location of the job to receive pay. (@Anarchist2) + * Improved the wording in the description of "FW Bounty 1". (@m0ctave, @EjoThims) + * Added the mission destination to the description of "Remnant: Cognizance 7". (@lumbar527) + * The Heliarch jump drive jobs now use the text replacement instead of spelling out the payment. (@Arachi-Lover, @tibetiroka) + * Removed a sentence that didn't make sense from the description of the secure package delivery job completion dialog. (@ziproot) + * Balance: + * Added weaponry to some human fighters to fit in the additional hardpoints that they were recently given. (@AvianGeneticist) + * Increased the reputation gains with Unfettered sympathizers when doing Unfettered jobs. (@Hurleveur) + * Changed the stock Frigate to have two Torpedo Launchers instead of one Torpedo and a Sidewinder, in exchange for less battery power. (@warp-core) + * Added a deadline to the pirate occupation spaceport missions to prevent them from being stacked indefinitely. (@lumbar527) + * The Quarg in Korath space now receive permanent reputation hits if you attack the Efreti. (@Saugia) + * Gave the Dagger +5 engine space and stock A120 Atomic Thrusters to give it more of a niche among the other human fighters. (@Quantumshark) + * Gave the Violin Spider +4 weapon space to allow it to equip an anti-missile turret in addition to its gun. (@Hurleveur) + * Flattened the thrust scaling of sets of engines as you get bigger engines in a set. (@Quantumshark) + * The exact changes depend on the set of engines, but the changes are roughly as follows: + * Tiny: +23.0% thrust + * Small: +14.3% + * Medium: +5.5% + * Large: +0.0% + * Huge: -5.1% + * In other words: small engines have been made stronger while large engines have been made slightly weaker. The result of this is that smaller ships should be generally quicker than they were before while larger ships should either see no change or should be slightly slower. + * Afterburners are unchanged. + * Reduced the cost of the supercapacitor from 9,000 credits to 1,500, to bring it closer in line with other human batteries while still having a slight "premium" for its tiny size. (@Zitchas) + * Removed a few ship variants from the pirate raid fleet that had high damage weapons not conducive to disabling their target. (@Zitchas) + * The Ka'het Nullifier has been rebalanced to more effectively disable targets by draining their energy. (@beccabunny) + * Energy damage from 0 to 3200. This is energy which is immediately removed from the target's batteries on impact. + * Ion damage from 150 to 220. This is lingering energy loss that results in about 22,000 energy lost over the course of the next ten seconds after impact. + * Scrambling damage from 150 to 10. This causes the Nullifier to have much less of an effect on the target's weapons, instead relying on its much greater energy and ion damage. + * Buffed the Ion Cannon's ion and scrambling damage by 20%, from 5 to 6 for each in order to make it a bit more competitive with other weaponry. (@Hurleveur) + * Reduced the profitability of commodity trading in Hai space by about 40% by bringing trade prices closer together, as the lack of piracy in Hai space makes it an easy place for trading. (@Anarchist2) + * Combined the two Barb variants into a single ship. This effectively just means that the turreted variant of the ship has gained +4 weapon space, and the Proton Gun variant of the ship is no longer sold. These two ships weren't sufficiently differentiated from one another to justify keeping both around. (@Quantumshark) + * Reduced the buff to engine space provided to the Marauder Leviathan and Falcon engine variants. (@Quantumshark) + * Falcon: +55 to +25 (total of 220 to 190) + * Leviathan: +80 to +40 (total of 220 to 180) + * Other: + * Tweaked the wording of the description of the Vivid Aether planet. (@Zitchas) + * Ringworld planets now have a "ringworld" attribute for missions to use. (@Quantumshark) + * Added a "frozen" attribute to various cold and frozen worlds for missions and spaceport news to use. (@dorbarker, @Anarchist2) + * The Unfettered Solifuge and Violin Spider are now added to the Unfettered shipyards at the same time as they are added to Unfettered fleets. (@Hurleveur) + * Added the "forest" attribute to Stormhold and changed its planet sprite in order to better match the planet's description. (@bene-dictator) + * Various NPC ships in Free Worlds missions which state that they carry cargo now actually have the cargo you're told they have. (@bene-dictator) + * Changed the attitude of various Hai governments toward certain actions that the player takes to better reflect the story. (@Hurleveur) + * You no longer gain reputation with the Hai for attacking or destroying Unfettered ships. + * You no longer lose reputation with the Unfettered for disabling Unfettered ships. + * You now gain 50% more reputation for assisting Hai ships. + * Standardized the language used for attribute tooltips. (@tibetiroka) + * Renamed the Hai's Railgun to the Skipper Railgun. (@Saugia) + * Gave a "noun" to the hallucination for use when the ship is scanned. (@warp-core) + * Tweaked the limited jump ranges of some systems in Gegno and Rulei space. (@Saugia) + * Game mechanics: + * New mechanics: + * Fighters will now grab a chunk of energy from their carrier's batteries when they deploy if the fighter's energy reserves are not full. Useful for battery-only fighters. (@tibetiroka) + * Mission can now have an "on disabled" action that triggers when the player's flagship is disabled. (@TomGoodIdea) + * Ships can now be given display names for their model name. (@TomGoodIdea) + * Created new "cargo scan opacity" and "outfit scan opacity" attributes that increase the time it takes for a scanner to scan your cargo or outfits respectively. (@Quantumshark) + * Game actions are now able to take ships from the player. (@Hurleveur) + * Fighters in fleets can now be given different personalities than the rest of the fleet. (@Quantumshark) + * Using the "fail" action with no named mission now only fails the mission that called the action instead of failing every mission with the same name. Explicitly listing the name of the mission will still fail every mission with the same name. (@Amazinite) + * Plugins can now have a "plugin.txt" metadata file in their root folder that specifies the name of the plugin and its description as shown in the plugins menu in game. (@Beed-git) + * Systems can now define the raid fleets that spawn in them or disable all raid fleet spawning, instead of raid fleets only being able to be defined for the government of the system. (@Hurleveur) + * Ship images can now be given "@sw" sprites that apply a swizzle mask to the ship in game, allowing certain parts of a ship to remain unswizzled while other parts are. (@RisingLeaf) + * Weapons can be given a "fade out" attribute which causes their projectiles to become more transparent until disappearing at the end of their lifetime. (@RisingLeaf) + * New multiplier attributes for a ship's base shields and hull. (@Azure3141) + * Created a new "on destroy" NPC action that triggers when every ship in the fleet has been destroyed but not captured. This was the behavior of the "on kill" action, which has been changed to allow every ship in the fleet to be either destroyed or captured, matching the "kill" NPC objective. (@warp-core) + * Governments can now fine the player for having an illegal ship. If a ship is illegal, it may be discovered by an outfit scan. (@TomGoodIdea) + * Governments can now define travel restrictions that prevent their fleets from traveling to or from systems or planets that match the restrictions. (@Hurleveur) + * Going to the outfitter when you're able to refill your ammo now auto-refills ammo from planetary storage if you have stored ammo on the planet. (@warp-core) + * New autoconditions: + * "flagship disabled" returns 1 if the player's flagship is disabled, 0 otherwise. (@TomGoodIdea) + * "installed plugin: " returns 1 if a plugin of the given name is installed, 0 otherwise. (@1010Todd, @Hurleveur) + * "roll: " returns a random number between 0 and the specified number, or between 0 and the value of the given condition if a condition name is provided. (@Amazinite) + * "person destroyed: " returns 1 if the person ship with the given name has been destroyed, 0 otherwise. (@Hurleveur) + * "flagship bays: " returns the number of bays of the given type that the player's flagship has. (@TomGoodIdea) + * Changed mechanics: + * Having more required crew than you have bunks is now an outfitter warning instead of an error that prevents you from leaving. (@TomGoodIdea) + * Redesigned how outfit and cargo scanning works. (@UnorderedSigh) + * The scan time is now always 2 seconds at the best and 10 seconds at the worst. + * Scan speed now follows a gaussian decay as distance increases. + * Scan time increases with cargo hold or outfit space size with the 2/3rd power of the size instead of linearly. + * Pirate raid deterrence no longer looks at whether you have ammo in your launchers. (@TomGoodIdea) + * Fleets can now spawn from any section of a ringworld instead of only ever spawning from the same section. (@quyykk) + * Cooling is no longer disabled when a ship becomes overheated. (@QuantumShark) + * The player now always launches from the same section of the ringworld that they landed on instead of only ever departing from the same section. (@quyykk) + * AI: + * Ships with only secondary weapons that run out of ammo will now attempt to flee instead of flying straight at their target without any weapons. (@TomGoodIdea) + * Escorts that are capable of cloaking can now cloak on their own without input from the player if they are low on health. (@TomGoodIdea) + * Ships with the "surveillance" personality will now patrol the system they are in when there are no other ships to scan instead of freezing up and doing nothing. (@tibetiroka) + * User interface: + * Weapons that use both outfits and fuel as ammunition now properly display the number of shots remaining instead of ignoring the fuel use. (@tibetiroka) + * The flagship now has a separate color scheme from friendlies in the HUD overlay. (@warp-core) + * Moved the definitions of the ship info hardpoint colors to the interfaces file so that they can be modified without recompiling. (@TomGoodIdea) + * Disabling motion blur in the settings now also disables motion blur for the starfield. (@Koranir) + * Added support for drawing pointers in the interface game data. (@warp-core) + * Increased the saturation of the shields HUD color. (@Quantumshark) + * Added a new setting that determines which ships in your fleet will pick up flotsams, if at all. (@OcelotWalrus) + * The outfits installed on player ships are now displayed in a list format under all the other ship stats in the shipyard and outfitter, similar to how they're displayed for ships that are sold in the shipyard. (@flowers9) + * Changed the "has no shipyard/outfitter" color on the shipyard and outfitter map keys to a darker shade of blue to better differentiate it from the "has shipyard/outfitter" color. (@flowers9) + * Added a "landing zoom" UI setting that zooms the camera in or out when landing on or launching from a planet. (@flowers9) + * Human engines in the outfitter are now ordered according to the engine set that they come from, from smallest to largest, and listed with steering before thrusters, instead of purely alphabetically. (@warp-core) + * The color of a wormhole's link on the map is now also used when that wormhole is a part of the travel plan. (@RisingLeaf, @warp-core) + * Increased the amount of motion blur that occurs in the background while hyperspacing. This can be toggled in the settings under the "extended jump effects" preference. (@Koranir) + * The map can now be opened from the shipyard or outfitter. (@TomGoodIdea) + * Externally docked fighters are now drawn in the hail panel when hailing a carrier. (@TomGoodIdea) + * The auto-selection of available jobs when you accept one job now moves to the next available job for the destination instead of resetting back to the top of the list of jobs for that destination. (@flowers9) + * Added a preference to blink the map mission marker for missions with a deadline more quickly if you have fewer extra days to reach the destination compared to the minimum number of days necessary to reach it. The default behavior is to simply blink based on the number of days until the deadline. (@TomGoodIdea) + * The player will now be warned when taking off if they don't have enough cargo space for outfits that are marked as in cargo. (@flowers9, @warp-core) + * Buttons on the planet panel when you are landed no longer disappear if you don't have a flagship. (@flowers9) + * Mission destination reminder messages are now colored in a new green "info" message level. (@RisingLeaf) + * Interface bars can now be defined to draw from the top left corner instead of only drawing from the bottom right. (@warp-core) + * Added a confirmation dialog to demanding tribute from a planet, to prevent the player accidentally demanding tribute from a planet and ruining their reputation. (@UnorderedSigh) + * Non-hyperdrive jumps in the travel plan are now drawn with dashed lines instead of solid ones in the map. (@flowers9) + * The save file load panel now scrolls when you use arrow keys to select your pilot and save. (@warp-core) + * Planet labels are now much less likely to overlap with one another or with other objects in the system. (@flowers9) + * The escort HUD display is now defined by the interfaces file so that it can be modified without recompiling. (@warp-core) + * Fullscreen can now be toggled in all panels. (@TomGoodIdea) + * The net change in energy and heat when all systems are active is now visible on the energy/heat table for ships when viewed in the outfitter and shipyard. (@mOctave) + * The shipyard and outfitter map keys now have a color for denoting systems with parked ships or stored outfits. (@flowers9) + * If a planet has a different government from the system it is in, that is now displayed on the planet's detail card in the map. (@TomGoodIdea, @Hurleveur) + * Created a new preference to change the format that dates are displayed in. (@a-random-lemurian) + * All applicable takeoff warnings are now displayed at the same time instead of only displaying one warning. (@TomGoodIdea, @quyykk) + * Improved the behavior of scrolling in the outfitter and shipyard to be smoother and better handle movement with the arrow keys. (@flowers9) + * Messages about being unable to land on the target planet now use the "Highest" message importance, causing them to be displayed in orange. (@AmbushedRaccoon) + * Under the hood: + * Refactored part of PlayerInfo::Land to reduce code duplication. (@warp-core) + * Selling all your commodities in the trade panel now loops over the commodities that the player owns instead of looping through all commodities in the game and seeing if the player owns them. (@flowers9) + * Separated the "pug.txt" file into separate, more specific files. (@tibetiroka) + * Combined the Remnant keystone missions using new mission syntax to reduce data duplication. (@warp-core) + * Relocated pirate raid and bounty hunter warning missions to a more sensible file. (@MasterOfGrey) + * Updated fleet definitions to use the new fighter naming syntax. (@flowers9) + * Reordered the hardpoint definitions on various ships to match the expected style. (@warp-core) + * Updated a code comment to match the actual code below it. (@ashdnazg) + * Updated the project license field in the appdata file to list only the primary code license of the game instead of the licenses for all assets. (@salarua) + * The caching of Angles is now done when the game launches instead of the first time Angle::Unit is called. (@flowers9) + * Fixed incorrectly ordered includes in source files. (@tibetiroka) + * Created a new type of dialog that always runs its callback function regardless of the user's choice. (@flowers9) + * Added null pointer checks to functions in Politics. (@warp-core) + * Refactored ShipyardPanel and OutfitterPanel code into the ShopPanel base class. (@flowers9) + * Removed a redundant check in the ShipyardPanel and OutfitterPanel code. (@flowers9) + * Removed NPC actions from the Deep Archaeology missions that were made redundant by the change to the "on kill" action. (@ziproot) + * The destination planet is now cleared if the player's travel plan is changed. (@warp-core) + * Removed unnecessary and added missing #includes. (@quyykk) + * Data changes from multiple events that occur on the same day are now batch-applied for performance purposes. (@quyykk) + * CI/CD and development environment: + * Added some rudimentary checks for proper use of indefinite articles to the content style checker. (@tibetiroka) + * Added a link to the mobile port when creating new issues on Github. (@m0ctave) + * Improved checking of quote style issues in the style checker. (@flowers9, @tibetiroka) + * apt-get update is now run before apt-get install in CI jobs. (@MCOfficer) + * Incorrectly ordered includes in source files now causes a style check error instead of a warning. (@tibetiroka) + * The content style checker now also runs on integration test data. (@warp-core) + * Fixed an indefinite article issue false positive in the style checker that had to do with abbreviations. (@tibetiroka) + * Always use vcpkg's OpenAL Soft on MacOS CI jobs. (@quyykk) + * Miscellaneous GitHub Actions tweaks and improvements. (@quyykk) + * Updated dependencies. (@quyykk) + * Updated outdated actions. (@tibetiroka) + * Fixed caching for CI/CD jobs. (@quyykk) + * CD jobs no longer skip uploading on partial failures. (@tibetiroka) + * Various updates and improvements to build documentation. (quyykk) + * Added an editorconfig entry for credits.txt so that editors recognize the two-space indentation. (@warp-core) + * The game can now be built with MinGW without having a VS toolchain installed. (@quyykk) + * Compiler flags are now correctly added for main.cpp. (@quyykk) + Version 0.10.2 * Bug fixes: * Content bugs: From a7dfb7bc3e85b263a39fda211623ab6cc178ebab Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 30 Sep 2023 20:05:03 +0200 Subject: [PATCH 62/79] fix(content): Fix incorrect condition in an Emerald Sword mission (#9386) --- changelog | 1 + data/sheragi/archaeology missions.txt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/changelog b/changelog index ef05300c6e8f..c0ebd3088f1e 100644 --- a/changelog +++ b/changelog @@ -30,6 +30,7 @@ Version 0.10.3 * Recategorized the Heliarch license to the "License" category. (@DarcyManoel) * Corrected the offer conditions of "Care Package to South 3a" so that it now properly offers. (@ziproot) * Various fixes and improvements to the new Coalition storylines. (@quyykk, @Saugia, @warp-core) + * Fix epilogue mission condition for an Emerald Sword mission. (@quyykk) * Engine bugs: * Using hotkeys to search for the nearest asteroid no longer crashes the game. (@RisingLeaf) * Player escorts no longer appear as landed on the planet that the player landed on if they themselves could not land on that planet. (@TomGoodIdea) diff --git a/data/sheragi/archaeology missions.txt b/data/sheragi/archaeology missions.txt index 05ae8dcb0d81..1404d14fbf9f 100644 --- a/data/sheragi/archaeology missions.txt +++ b/data/sheragi/archaeology missions.txt @@ -965,7 +965,7 @@ mission "Mammon Payment" to offer random < 10 or - has "Sheragi Archaeology: Emerald Sword Epilogue: done" + has "Sheragi Archaeology: Epilogue: done" has "event: mammon impatient" has "paid mammon" "credits" >= 12000000 From 4c9bb1ded326ce957850ad2809e3c496777158b7 Mon Sep 17 00:00:00 2001 From: warp-core Date: Sat, 30 Sep 2023 19:08:07 +0100 Subject: [PATCH 63/79] chore: Update version to 0.10.3 (#9329) Co-authored-by: Nick --- credits.txt | 16 ++++++++++-- endless-sky.6 | 2 +- io.github.endless_sky.endless_sky.appdata.xml | 26 +++++++++++++++++++ source/main.cpp | 2 +- 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/credits.txt b/credits.txt index 8e6737866a41..611d0a86bec1 100644 --- a/credits.txt +++ b/credits.txt @@ -1,5 +1,5 @@ Welcome to Endless Sky! -version 0.10.3-alpha +version 0.10.3 The player's manual and other resources are available at: @@ -138,12 +138,14 @@ contributed to Endless Sky: AdamKauffman akien-mga AlbertNewton + AlekSeaLion alex116 AlexBassett alextd Alkallid Amacita Amazinite + AmbushedRaccoon AMDmi3 anarcat Anarchist2 @@ -160,6 +162,7 @@ contributed to Endless Sky: Azure3141 barthalion beccabunny + Beed-git bene-dictator benflodge BlackVegetable @@ -168,7 +171,7 @@ contributed to Endless Sky: bobrobbow bojidar-bg Brick63 - CAPTAIN1947 + captain1947 ChamEV comnom corecontingency @@ -177,6 +180,7 @@ contributed to Endless Sky: czartrak Daeridanii1 daggs1 + danaris DarcyManoel dashkal16 davidarcher @@ -197,6 +201,7 @@ contributed to Endless Sky: DrBlight dreness Dschiltt + dseomn dufferzafar dzhu eflyon @@ -215,6 +220,7 @@ contributed to Endless Sky: FixItYondu flaviojs Floppa-Priest + flowers9 FoxSylv FranchuFranchu Fzzr @@ -249,6 +255,7 @@ contributed to Endless Sky: jozef-mitro Jugosloven1612 Just-Existing + justinnhli justinw1320 kaol Karirawri @@ -259,6 +266,7 @@ contributed to Endless Sky: Koranir kozbot Kryes-Omega + LazerLit leklachu LepRyot lheckemann @@ -278,6 +286,7 @@ contributed to Endless Sky: Mailaender MarcelineVQ MasterOfGrey + Matteo Mazzitti mattsoulanille maxrd2 McloughlinGuy @@ -299,6 +308,7 @@ contributed to Endless Sky: nothing-but-the-rain NRK4 ntabris + OcelotWalrus oo13 opusforlife2 Ornok @@ -319,6 +329,7 @@ contributed to Endless Sky: Pointedstick prophile pscamman + Pshy0 Quantumshark quyykk Rakete1111 @@ -342,6 +353,7 @@ contributed to Endless Sky: rrigby rugk rzahniser + salarua salqadri samoja12 samrocketman diff --git a/endless-sky.6 b/endless-sky.6 index 6df111a8344e..2dc0353fd603 100644 --- a/endless-sky.6 +++ b/endless-sky.6 @@ -1,4 +1,4 @@ -.TH endless\-sky 6 "18 Jun 2023" "ver. 0.10.3-alpha" "Endless Sky" +.TH endless\-sky 6 "30 Sep 2023" "ver. 0.10.3" "Endless Sky" .SH NAME endless\-sky \- a space exploration and combat game. diff --git a/io.github.endless_sky.endless_sky.appdata.xml b/io.github.endless_sky.endless_sky.appdata.xml index 6cae7cf25056..08f18db23174 100644 --- a/io.github.endless_sky.endless_sky.appdata.xml +++ b/io.github.endless_sky.endless_sky.appdata.xml @@ -47,6 +47,32 @@ + + +

This is an unstable release, containing big changes that may introduce new bugs.

+

The biggest change is the addition of over 50 new missions in the Coalition as part of the introductions to the Heliarch and Lunarium campaigns. Through these, you can unlock access to either some of the Heliarch weapons, or some new outfits for the Lunarium to aid in their subversive efforts.

+

Some other major new changes are:

+
    +
  • Flattened the thrust scaling of sets of engines as you get bigger engines in a set. Smaller ships have received a significant max speed and acceleration buff, while larger ships have been unchanged or slightly nerfed.
  • +
  • The Unfettered Solifuge and Violin Spider are now added to the Unfettered shipyards.
  • +
  • Ships can now be given display names for their model name.
  • +
  • Plugins can now have a "plugin.txt" metadata file in their root folder that specifies the name of the plugin and its description as shown in the plugins menu in game.
  • +
  • Governments can now define travel restrictions that prevent their fleets from traveling to or from systems or planets that match the restrictions.
  • +
  • Various UI/UX improvements.
  • +
+

Some notable bug fixes include:

+
    +
  • Contacting the Korath Exiles during the Wanderer campaign can now properly be deferred and reoffered instead of deferring the mission effectively declining it and locking you out of the rest of the campaign.
  • +
  • Using hotkeys to search for the nearest asteroid no longer crashes the game.
  • +
  • The shipyard and outfitter mission offer location tags will now properly write to the save file.
  • +
  • Trailing whitespace in hails no longer causes hails to overlap with one another.
  • +
  • The "Remnant: Expanded Horizons Astral job" job will no longer select the "Deep Space" systems, which are unreachable, as waypoints.
  • +
+

There's much more in the changelog!

+

Special thanks to the 42 people who contributed to this release!

+
+ https://github.com/endless-sky/endless-sky/blob/v0.10.3/changelog +

This is a stable release, focused on fixing bugs and making some other small improvements.

diff --git a/source/main.cpp b/source/main.cpp index da56ef5466e6..e5f2c84e93a4 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -456,7 +456,7 @@ void PrintHelp() void PrintVersion() { cerr << endl; - cerr << "Endless Sky ver. 0.10.3-alpha" << endl; + cerr << "Endless Sky ver. 0.10.3" << endl; cerr << "License GPLv3+: GNU GPL version 3 or later: " << endl; cerr << "This is free software: you are free to change and redistribute it." << endl; cerr << "There is NO WARRANTY, to the extent permitted by law." << endl; From 862b2bfd89f2d6badffec7b9fa4b613c3a70ccdd Mon Sep 17 00:00:00 2001 From: warp-core Date: Sat, 30 Sep 2023 21:19:42 +0100 Subject: [PATCH 64/79] chore: Update version numbers for v0.10.4-alpha (#9387) --- CMakeLists.txt | 2 +- credits.txt | 2 +- endless-sky.6 | 2 +- resources/EndlessSky-Info.plist | 2 +- source/main.cpp | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index afb466a83f3f..a70095c0dd1d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,7 +58,7 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON) set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT EndlessSky) set(CMAKE_VS_JUST_MY_CODE_DEBUGGING ON) -project("Endless Sky" VERSION 0.10.3 +project("Endless Sky" VERSION 0.10.4 DESCRIPTION "Space exploration, trading, and combat game." HOMEPAGE_URL https://endless-sky.github.io/ LANGUAGES CXX) diff --git a/credits.txt b/credits.txt index 611d0a86bec1..5b91174d21b5 100644 --- a/credits.txt +++ b/credits.txt @@ -1,5 +1,5 @@ Welcome to Endless Sky! -version 0.10.3 +version 0.10.4-alpha The player's manual and other resources are available at: diff --git a/endless-sky.6 b/endless-sky.6 index 2dc0353fd603..0a5afc8a3dfa 100644 --- a/endless-sky.6 +++ b/endless-sky.6 @@ -1,4 +1,4 @@ -.TH endless\-sky 6 "30 Sep 2023" "ver. 0.10.3" "Endless Sky" +.TH endless\-sky 6 "30 Sep 2023" "ver. 0.10.4-alpha" "Endless Sky" .SH NAME endless\-sky \- a space exploration and combat game. diff --git a/resources/EndlessSky-Info.plist b/resources/EndlessSky-Info.plist index 3a629d1aca07..febe526c11d2 100644 --- a/resources/EndlessSky-Info.plist +++ b/resources/EndlessSky-Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.10.3 + 0.10.4 CFBundleSignature ???? CFBundleVersion diff --git a/source/main.cpp b/source/main.cpp index e5f2c84e93a4..b4655e300651 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -456,7 +456,7 @@ void PrintHelp() void PrintVersion() { cerr << endl; - cerr << "Endless Sky ver. 0.10.3" << endl; + cerr << "Endless Sky ver. 0.10.4-alpha" << endl; cerr << "License GPLv3+: GNU GPL version 3 or later: " << endl; cerr << "This is free software: you are free to change and redistribute it." << endl; cerr << "There is NO WARRANTY, to the extent permitted by law." << endl; From 570b5e9764d41d7a8951f4eaf33bca649348cc5c Mon Sep 17 00:00:00 2001 From: bene_dictator <115441627+bene-dictator@users.noreply.github.com> Date: Mon, 2 Oct 2023 07:20:00 +1300 Subject: [PATCH 65/79] fix(content): Add how many passengers you need room for to the description of Core jobs that are missing them (#9389) --- data/human/syndicate jobs.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/data/human/syndicate jobs.txt b/data/human/syndicate jobs.txt index 90666af07679..02550724aa34 100644 --- a/data/human/syndicate jobs.txt +++ b/data/human/syndicate jobs.txt @@ -415,7 +415,7 @@ mission "Syndicate Prisoner Transport [2]" name "Transport convicted corporate spies" job repeat - description `Transport a group of convicted corporate spies to for their sentences. They must be held in suitable facilities made for the transfer of criminals. Payment is .` + description `Transport a group of convicted corporate spies to for their sentences. They must be held in suitable facilities made for the transfer of criminals. Payment is .` passengers 3 5 source government "Syndicate" @@ -439,7 +439,7 @@ mission "Syndicate Prisoner Transport [3]" name "Transport detained protesters" job repeat - description `Transport a group of detained protesters to where they will await trial for inciting a riot. They must be held in suitable facilities made for the transfer of criminals. Payment is .` + description `Transport a group of detained protesters to where they will await trial for inciting a riot. They must be held in suitable facilities made for the transfer of criminals. Payment is .` passengers 10 40 .9 source government "Syndicate" @@ -464,7 +464,7 @@ mission "Syndicate Prisoner Transport [4]" name "Transport detained labor organizers" job repeat - description `Transport a group of detained labor organizers to for "processing" as suspected terrorists. They must be held in suitable facilities made for the transfer of criminals. Payment is .` + description `Transport a group of detained labor organizers to for "processing" as suspected terrorists. They must be held in suitable facilities made for the transfer of criminals. Payment is .` passengers 3 10 .56 source government "Syndicate" @@ -515,7 +515,7 @@ mission "Return Syndicate Prisoners [1]" name "Return detained protesters home" job repeat - description `Transport a group of protesters home to from their detention on . Payment is .` + description `Transport a group of protesters home to from their detention on . Payment is .` passengers 10 40 .9 source government "Syndicate" @@ -538,7 +538,7 @@ mission "Return Syndicate Prisoners [2]" name "Return detained labor organizers home" job repeat - description `Transport a group of labor organizers home to from their imprisonment on . Payment is .` + description `Transport a group of labor organizers home to from their imprisonment on . Payment is .` passengers 3 15 .9 source government "Syndicate" From 8f71a8443442a4098a7c266608692a65bf5a3d44 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 1 Oct 2023 20:23:01 +0200 Subject: [PATCH 66/79] fix: Correctly set the application icon on Linux (#9362) --- CMakeLists.txt | 2 +- SConstruct | 2 +- io.github.endless_sky.endless_sky.appdata.xml | 2 +- ...s-sky.desktop => io.github.endless_sky.endless_sky.desktop | 0 source/GameWindow.cpp | 4 ++++ utils/build_appimage.sh | 2 +- 6 files changed, 8 insertions(+), 4 deletions(-) rename endless-sky.desktop => io.github.endless_sky.endless_sky.desktop (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index a70095c0dd1d..fa0903ad3399 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -263,7 +263,7 @@ elseif(UNIX) install(TARGETS EndlessSky CONFIGURATIONS Release RUNTIME DESTINATION games) # Install the desktop file. - install(FILES endless-sky.desktop DESTINATION share/applications) + install(FILES io.github.endless_sky.endless_sky.desktop DESTINATION share/applications) # Install app center metadata. install(FILES io.github.endless_sky.endless_sky.appdata.xml DESTINATION share/metainfo) diff --git a/SConstruct b/SConstruct index 3e0ae6160c26..45815ab5698c 100644 --- a/SConstruct +++ b/SConstruct @@ -197,7 +197,7 @@ env.AlwaysBuild("test") env.Install("$DESTDIR$PREFIX/games", sky) # Install the desktop file: -env.Install("$DESTDIR$PREFIX/share/applications", "endless-sky.desktop") +env.Install("$DESTDIR$PREFIX/share/applications", "io.github.endless_sky.endless_sky.desktop") # Install app center metadata: env.Install("$DESTDIR$PREFIX/share/metainfo", "io.github.endless_sky.endless_sky.appdata.xml") diff --git a/io.github.endless_sky.endless_sky.appdata.xml b/io.github.endless_sky.endless_sky.appdata.xml index 08f18db23174..125a15de234c 100644 --- a/io.github.endless_sky.endless_sky.appdata.xml +++ b/io.github.endless_sky.endless_sky.appdata.xml @@ -1,7 +1,7 @@ io.github.endless_sky.endless_sky - endless-sky.desktop + io.github.endless_sky.endless_sky.desktop Endless Sky Space exploration and combat game Weltraumhandels und Kampfsimulator diff --git a/endless-sky.desktop b/io.github.endless_sky.endless_sky.desktop similarity index 100% rename from endless-sky.desktop rename to io.github.endless_sky.endless_sky.desktop diff --git a/source/GameWindow.cpp b/source/GameWindow.cpp index fff1ffbf1bda..b39a203206a1 100644 --- a/source/GameWindow.cpp +++ b/source/GameWindow.cpp @@ -74,6 +74,10 @@ bool GameWindow::Init() #ifdef _WIN32 // Tell Windows this process is high dpi aware and doesn't need to get scaled. SDL_SetHint(SDL_HINT_WINDOWS_DPI_AWARENESS, "permonitorv2"); +#elif defined(__linux__) + // Set the class name for the window on Linux. Used to set the application icon. + // This sets it for both X11 and Wayland. + setenv("SDL_VIDEO_X11_WMCLASS", "io.github.endless_sky.endless_sky", true); #endif // This needs to be called before any other SDL commands. diff --git a/utils/build_appimage.sh b/utils/build_appimage.sh index c0b6fde8977a..728a59098118 100755 --- a/utils/build_appimage.sh +++ b/utils/build_appimage.sh @@ -22,7 +22,7 @@ mv AppDir/usr/share/games/endless-sky/* AppDir/ # Now build the actual AppImage curl -sSL https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage -o linuxdeploy && chmod +x linuxdeploy -OUTPUT=es-temp.AppImage ./linuxdeploy --appdir AppDir -e "$1/endless-sky" -d endless-sky.desktop -i endless-sky.png --output appimage +OUTPUT=es-temp.AppImage ./linuxdeploy --appdir AppDir -e "$1/endless-sky" -d io.github.endless_sky.endless_sky.desktop -i endless-sky.png --output appimage # Use the static runtime for the AppImage. This lets the AppImage being run on systems without fuse2. gh release download -R probonopd/go-appimage continuous -p appimagetool*x86_64.AppImage From e289a9891ba76c0ad57f591843d2c199bec904f6 Mon Sep 17 00:00:00 2001 From: Rising Leaf <85687254+RisingLeaf@users.noreply.github.com> Date: Sun, 1 Oct 2023 20:40:13 +0200 Subject: [PATCH 67/79] feat(preferences): Default extended jump effects to off + add a new level (#9392) --- source/Engine.cpp | 6 ++++-- source/Preferences.cpp | 30 ++++++++++++++++++++++++++++++ source/Preferences.h | 11 +++++++++++ source/PreferencesPanel.cpp | 10 +++++++++- 4 files changed, 54 insertions(+), 3 deletions(-) diff --git a/source/Engine.cpp b/source/Engine.cpp index 51a3c5d5f8b3..ae3ca02e0f70 100644 --- a/source/Engine.cpp +++ b/source/Engine.cpp @@ -503,8 +503,10 @@ void Engine::Step(bool isActive) { center = flagship->Position(); centerVelocity = flagship->Velocity(); - if(flagship->IsHyperspacing() && Preferences::Has("Extended jump effects")) - centerVelocity *= 1. + pow(flagship->GetHyperspacePercentage() / 20., 2); + Preferences::ExtendedJumpEffects jumpEffectState = Preferences::GetExtendedJumpEffects(); + if(flagship->IsHyperspacing() && jumpEffectState != Preferences::ExtendedJumpEffects::OFF) + centerVelocity *= 1. + pow(flagship->GetHyperspacePercentage() / + (jumpEffectState == Preferences::ExtendedJumpEffects::MEDIUM ? 40. : 20.), 2); if(doEnterLabels) { doEnterLabels = false; diff --git a/source/Preferences.cpp b/source/Preferences.cpp index 4d784daede4b..174d41a88f66 100644 --- a/source/Preferences.cpp +++ b/source/Preferences.cpp @@ -129,6 +129,9 @@ namespace { const vector PARALLAX_SETTINGS = {"off", "fancy", "fast"}; int parallaxIndex = 2; + const vector EXTENDED_JUMP_EFFECT_SETTINGS = {"off", "medium", "heavy"}; + int extendedJumpEffectIndex = 0; + const vector ALERT_INDICATOR_SETTING = {"off", "audio", "visual", "both"}; int alertIndicatorIndex = 3; @@ -196,6 +199,8 @@ void Preferences::Load() autoFireIndex = max(0, min(node.Value(1), AUTO_FIRE_SETTINGS.size() - 1)); else if(node.Token(0) == "Parallax background") parallaxIndex = max(0, min(node.Value(1), PARALLAX_SETTINGS.size() - 1)); + else if(node.Token(0) == "Extended jump effects") + extendedJumpEffectIndex = max(0, min(node.Value(1), EXTENDED_JUMP_EFFECT_SETTINGS.size() - 1)); else if(node.Token(0) == "fullscreen") screenModeIndex = max(0, min(node.Value(1), SCREEN_MODE_SETTINGS.size() - 1)); else if(node.Token(0) == "date format") @@ -264,6 +269,7 @@ void Preferences::Save() out.Write("Automatic aiming", autoAimIndex); out.Write("Automatic firing", autoFireIndex); out.Write("Parallax background", parallaxIndex); + out.Write("Extended jump effects", extendedJumpEffectIndex); out.Write("alert indicator", alertIndicatorIndex); out.Write("previous saves", previousSaveCount); @@ -420,6 +426,30 @@ const string &Preferences::ParallaxSetting() +void Preferences::ToggleExtendedJumpEffects() +{ + int targetIndex = extendedJumpEffectIndex + 1; + if(targetIndex == static_cast(EXTENDED_JUMP_EFFECT_SETTINGS.size())) + targetIndex = 0; + extendedJumpEffectIndex = targetIndex; +} + + + +Preferences::ExtendedJumpEffects Preferences::GetExtendedJumpEffects() +{ + return static_cast(extendedJumpEffectIndex); +} + + + +const string &Preferences::ExtendedJumpEffectsSetting() +{ + return EXTENDED_JUMP_EFFECT_SETTINGS[extendedJumpEffectIndex]; +} + + + void Preferences::ToggleScreenMode() { GameWindow::ToggleFullscreen(); diff --git a/source/Preferences.h b/source/Preferences.h index 2e3d0b00c31e..d71c06a86cf4 100644 --- a/source/Preferences.h +++ b/source/Preferences.h @@ -83,6 +83,12 @@ class Preferences { FAST }; + enum class ExtendedJumpEffects : int { + OFF = 0, + MEDIUM, + HEAVY + }; + enum class AlertIndicator : int_fast8_t { NONE = 0, AUDIO, @@ -147,6 +153,11 @@ class Preferences { static BackgroundParallax GetBackgroundParallax(); static const std::string &ParallaxSetting(); + // Extended jump effects setting, either "off", "medium", or "heavy". + static void ToggleExtendedJumpEffects(); + static ExtendedJumpEffects GetExtendedJumpEffects(); + static const std::string &ExtendedJumpEffectsSetting(); + // Boarding target setting, either "proximity", "value" or "mixed". static void ToggleBoarding(); static BoardingPriority GetBoardingPriority(); diff --git a/source/PreferencesPanel.cpp b/source/PreferencesPanel.cpp index e88458b1b789..4c73f664041a 100644 --- a/source/PreferencesPanel.cpp +++ b/source/PreferencesPanel.cpp @@ -75,6 +75,7 @@ namespace { const string BOARDING_PRIORITY = "Boarding target priority"; const string TARGET_ASTEROIDS_BASED_ON = "Target asteroid based on"; const string BACKGROUND_PARALLAX = "Parallax background"; + const string EXTENDED_JUMP_EFFECTS = "Extended jump effects"; const string ALERT_INDICATOR = "Alert indicator"; // How many pages of settings there are. @@ -231,6 +232,8 @@ bool PreferencesPanel::Click(int x, int y, int clicks) Preferences::ToggleBoarding(); else if(zone.Value() == BACKGROUND_PARALLAX) Preferences::ToggleParallax(); + else if(zone.Value() == EXTENDED_JUMP_EFFECTS) + Preferences::ToggleExtendedJumpEffects(); else if(zone.Value() == VIEW_ZOOM_FACTOR) { // Increase the zoom factor unless it is at the maximum. In that @@ -563,7 +566,7 @@ void PreferencesPanel::DrawSettings() "Draw starfield", BACKGROUND_PARALLAX, "Show hyperspace flash", - "Extended jump effects", + EXTENDED_JUMP_EFFECTS, SHIP_OUTLINES, "\t", "HUD", @@ -754,6 +757,11 @@ void PreferencesPanel::DrawSettings() text = Preferences::ParallaxSetting(); isOn = text != "off"; } + else if(setting == EXTENDED_JUMP_EFFECTS) + { + text = Preferences::ExtendedJumpEffectsSetting(); + isOn = text != "off"; + } else if(setting == REACTIVATE_HELP) { // Check how many help messages have been displayed. From 36a89046e0d2e8e94d3723e1e0e72b9fa2453c4e Mon Sep 17 00:00:00 2001 From: Andrey Andreyevich Bienkowski Date: Sun, 1 Oct 2023 22:52:19 +0300 Subject: [PATCH 68/79] feat(content): Clarify wording in "FW Pirates: Attack 1" (#9366) --- data/human/free worlds 1 start.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/human/free worlds 1 start.txt b/data/human/free worlds 1 start.txt index 50d30dd035e0..236d234ae600 100644 --- a/data/human/free worlds 1 start.txt +++ b/data/human/free worlds 1 start.txt @@ -1266,7 +1266,7 @@ mission "FW Pirates: Attack 1" label senate ` JJ puts a hand on his shoulder and says, a little more firmly than Alondo did, "Calm down, Tomek. We're obeying the orders of the Senate. We have to honor the democratic process even when we don't like the decisions they make."` ` "Oh, the Senate. Of course. The Senate this, the Senate that," Tomek says mockingly while throwing his head back. "The Senate is in no position to be commanding this war. They do not have the military experience that I have, or that you have JJ. Do you think the Republic Parliament is busying themselves voting on every little fleet movement, or do you think they've put this in the hands of the Navy and told them to win this war? I made my reasons clear to you all many times why I didn't want to convene the Senate, because they would only hinder and handicap us from winning this war, and that's exactly what they're already doing!"` - ` "Tomek! That's enough!" JJ yells, which seems to draw even more surprise and attention than when Tomek yelled. "The Council was decided that the Senate would convene, and so it did. It is only by the grace of the Senate that the Council even still exists."` + ` "Tomek! That's enough!" JJ yells, which seems to draw even more surprise and attention than when Tomek yelled. "The Council decided that the Senate would convene, and so it did. It is only by the grace of the Senate that the Council even still exists."` ` "And it'll be by the grace of God that we don't all end up dead because of it," Tomek responds.` ` JJ turns to you and Alondo. ". Alondo. I pray your mission to Thule is a success."` ` "I'll introduce you to your escort," says Tomek, shaking off JJ's hand as he leads you out of the bar.` From f87e2aec6d4d06e9a543b7d35f462efbfcbcb53f Mon Sep 17 00:00:00 2001 From: warp-core Date: Tue, 3 Oct 2023 22:43:20 +0100 Subject: [PATCH 69/79] fix(typo): Update spellcheck typos (#9403) --- .codespell.exclude | 4 +++- .codespell.words.exclude | 2 ++ data/human/names.txt | 2 +- data/remnant/remnant 1 introduction.txt | 2 +- data/remnant/remnant 2 cognizance.txt | 2 +- utils/check_code_style.py | 2 +- 6 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.codespell.exclude b/.codespell.exclude index 999ebccda702..0623c0e78706 100644 --- a/.codespell.exclude +++ b/.codespell.exclude @@ -81,7 +81,7 @@ system Nnaug object "Sies Upi" planet "Sies Upi" - description "Sies Upi is one of the most recently colonized planets of the Gegno Vi. This hot, dry world with harsh living environments serves as more of an outpost than it does a colony, but nevertheless the Vi found ways to create manageable living conditions." + description `Sies Upi is one of the most recently colonized planets of the Gegno Vi. This hot, dry world with harsh living environments serves as more of an outpost than it does a colony, but nevertheless the Vi found ways to create manageable living conditions.` "Brocken" ` "What part of non-negotiable did you not understand? You're pushing your luck, Captain . I didn't expect you to be such a petty money pincher."` "Shepard" @@ -98,3 +98,5 @@ planet "Sies Upi" ` MSGT BROWER, IRENE` `As you leave the quartermaster's building, you spot a familiar face coming in the other direction: Irene Brower, the gunnery sergeant you delivered a care package to before the war, though she seems to have master sergeant insignia now. She's on crutches, with what looks like a brand-new prosthetic leg. When she spots you, her pained face brightens. "Hey, I know you! You brought me that package from Tor before. Thanks!" She shifts her weight, then winces and shifts it back.` log "Minor People" "Torrey and Irene" `Torrey Dupont, an activist, is friends with SMDP militia NCO Irene Brower. You delivered a package for them.` + "Brin" + "exis" diff --git a/.codespell.words.exclude b/.codespell.words.exclude index e69de29bb2d1..9be7a7fe8d56 100644 --- a/.codespell.words.exclude +++ b/.codespell.words.exclude @@ -0,0 +1,2 @@ +aesthetic +aesthetics diff --git a/data/human/names.txt b/data/human/names.txt index f225dee685e9..37406580e2f0 100644 --- a/data/human/names.txt +++ b/data/human/names.txt @@ -11,7 +11,7 @@ # You should have received a copy of the GNU General Public License along with # this program. If not, see . -# Word lists that are re-used for many different ship name phrases +# Word lists that are reused for many different ship name phrases phrase "digit" word "0" diff --git a/data/remnant/remnant 1 introduction.txt b/data/remnant/remnant 1 introduction.txt index 54948c95c4dd..1349f58ad615 100644 --- a/data/remnant/remnant 1 introduction.txt +++ b/data/remnant/remnant 1 introduction.txt @@ -2702,7 +2702,7 @@ mission "Remnant: Broken Jump Drive 3" ` "Great! I will find more."` goto end ` "Any theories of note?"` - ` He looks thoughtful for a moment, then warbles, "As you may know, standard hyperdrives work by generating a fusion reaction and folding it into the fabric of space/time, and these folds naturally fall along the known hyperlanes. I suppose one could view those lanes as the 'crease lines' of the universe. My favorite theory is that jump drives have some additional machinery to guide the fold. That way they can dictate where the fold occurs instead of just aligning with the nearest crease. Given their increased fuel draw, it makes sense that it would take more fuel to generate a fresh fold than to re-use an existing crease.` + ` He looks thoughtful for a moment, then warbles, "As you may know, standard hyperdrives work by generating a fusion reaction and folding it into the fabric of space/time, and these folds naturally fall along the known hyperlanes. I suppose one could view those lanes as the 'crease lines' of the universe. My favorite theory is that jump drives have some additional machinery to guide the fold. That way they can dictate where the fold occurs instead of just aligning with the nearest crease. Given their increased fuel draw, it makes sense that it would take more fuel to generate a fresh fold than to reuse an existing crease.` label end ` "Oh, before I forget..." he hands you . "Off to start setting up the tests." He sings half to himself as he trundles off after the wagon.` diff --git a/data/remnant/remnant 2 cognizance.txt b/data/remnant/remnant 2 cognizance.txt index 961394c1c1c6..79e724eb777f 100644 --- a/data/remnant/remnant 2 cognizance.txt +++ b/data/remnant/remnant 2 cognizance.txt @@ -1530,7 +1530,7 @@ mission "Remnant: Cognizance 35" ` Gavriil gestures neutrally. "Well, I am worried, of course. I would be devastated to find out I had destroyed humanity, and everything else in existence." They look somber, but then perk up again. "But if everything has been annihilated, there is nothing I can do about it. So I shall focus on learning what I can, doing what must be done, and enjoy the fact that the universe has inexplicably revealed once again that the sum of all our knowledge is merely the introductory metaphor to help us grasp how things work." Their gestures abruptly change tone. "Speaking of which, we need to report what we have learned to the rest, which means leaving this place."` label cutpower ` Gavriil gestures at the control panel in front of them. "I do not know for sure, but based on events, I suspect that if we manually induce a power failure we should be able to reverse the process that transported us to this realm." They smile eagerly. "I have everything all set up, and we have people waiting across the station." They look confident. "We think that we can safely spin down the reactor and cut power across a number of these arrays in a controlled fashion. This should replicate the original power failure, except with fewer risks and less damage to the system."` - ` They lead you over to a panel in the main loading dock. "I know, it says 'Job Board' on it. I re-used the coding for our task list to improvise this mass-notification system." They smile in amusement. "When you are ready to go, just select the 'De-activate Array' option from the panel. That will notify everyone and begin the shutdown."` + ` They lead you over to a panel in the main loading dock. "I know, it says 'Job Board' on it. I reused the coding for our task list to improvise this mass-notification system." They smile in amusement. "When you are ready to go, just select the 'De-activate Array' option from the panel. That will notify everyone and begin the shutdown."` ` They hand you a data crystal, and then a large case. "Here is an encrypted data crystal of all our data so far. The case has several sets, with the data stored in a variety of different mechanisms and encryptions. We do not know what happens when the station is activated or deactivated, so multiple formats for storing the data will give a better chance that at least some of it will remain intact to be delivered."` ` They step back. "Well, I will return to the controls. Just give the signal when you are ready to leave. Embers light your path, Captain ."` diff --git a/utils/check_code_style.py b/utils/check_code_style.py index 00b2607c1903..faf6bdb860ee 100644 --- a/utils/check_code_style.py +++ b/utils/check_code_style.py @@ -177,7 +177,7 @@ def check_code_style(file, lines): # Appends the lists in the second tuple to the lists in the first tuple. Parameters: # first: the tuple where the lists are expanded # second: the tuple where the lists are not expanded -# Returns the second tuple for re-use. +# Returns the second tuple for reuse. def join(first, second): for (list1, list2) in zip(first, second): list1 += list2 From 5f7b487499edab8ec693c37ccd438b4026e2f0c2 Mon Sep 17 00:00:00 2001 From: Arachi-Lover <82293490+Arachi-Lover@users.noreply.github.com> Date: Tue, 3 Oct 2023 22:31:26 -0300 Subject: [PATCH 70/79] fix(content): A few adjustments to Coalition Intros (#9402) --- data/coalition/heliarch intro.txt | 2 +- data/coalition/lunarium intro.txt | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/data/coalition/heliarch intro.txt b/data/coalition/heliarch intro.txt index 4301cfb5c267..7a240421c4db 100644 --- a/data/coalition/heliarch intro.txt +++ b/data/coalition/heliarch intro.txt @@ -1228,7 +1228,7 @@ mission "Heliarch Expedition 5" conversation `To your surprise, your arrival to the sees no reception party waiting for you, or so much as a payment message from Aulori. You leave your ship, and mention to the nearest Heliarch that you were asked to see Consul Aulori here. They brush you off, saying there has been no such request by the consul. You try and explain that the Heliarch leading the expedition to Ruin mentioned you should come, but they again dismiss you, seemingly unaware of what you're talking about and going on about their business.` ` You try a few more times to no avail, and decide to head back to your ship for the time being. It's not until the day is about to turn that a pair of Heliarch guards come to your ship, asking that you step outside. You comply, and they tell you to follow, "for ready to see you, the consul is."` - ` Once again you're led through the inscrutable, guard-crowded halls of the , being brought to a long corridor with dozens of closed doors. The one at the very end is apparently your goal. From there, however, two more guards arrive, and they explain to those escorting you that "received word, the Ring of Friendship has." They apologize to you, saying Aulori might be busy for some time more. You are brought to just outside the room, so that you're received as soon as his "meeting" ends.` + ` Once again you're led through the inscrutable, guard-crowded halls of the , being brought to a long corridor with dozens of closed doors. The one at the very end is apparently your goal. From there, however, two more guards arrive, and they explain to those escorting you that "received word, the Ring of Friendship has." They apologize to you, saying Aulori might be busy for some time more. You are brought to just outside the room, so that you're received as soon as his "meeting" ends.` ` From another room, a Heliarch arbiter waves for the guards waiting with you, and passes some other task to them. Three of them leave, and you're left with the one who fetched you from your ship, a Saryd. Despite the door to Aulori's room being locked, you two can still clearly hear intense shouting from within - not just his, but from many others who you assume to be consuls as well. After a particularly long - and heated - debate segment from what seems to be Aulori's voice, the Heliarch guard waiting with you declares they'll be coming back soon and hastily moves away, turning the corner.` branch license has "joined the heliarchs" diff --git a/data/coalition/lunarium intro.txt b/data/coalition/lunarium intro.txt index d645e1334f33..797537519ce7 100644 --- a/data/coalition/lunarium intro.txt +++ b/data/coalition/lunarium intro.txt @@ -572,7 +572,7 @@ mission "House Bebliss 1-B" ` The waiter arrives, and they suggest some dishes, seeing as you didn't pick anything from the menu. The smell coming from the other tables, however, tells you to decline, so you politely leave the establishment. It seems the only way to find out what these Arachi want is to head to .` accept label decline - ` The two of them eye you up for a very uncomfortable minute, but never provide some response or acknoweldgement. You try and move away and leave the restaurant, but their bodyguards block you. One of the two Arachi from the table appears to grunt, then signals for the guards to let you pass through. You leave the restaurant, and return to your ship.` + ` The two of them eye you up for a very uncomfortable minute, but never provide some response or acknowledgment. You try and move away and leave the restaurant, but their bodyguards block you. One of the two Arachi from the table appears to grunt, then signals for the guards to let you pass through. You leave the restaurant, and return to your ship.` decline on accept "assisting lunarium" ++ @@ -1898,7 +1898,7 @@ mission "Lunarium: Quarg Interview" label leaders ` The Kimek who accompanied you here ask that you continue on. Lobmab and her bodyguards lead the way through busy cubicles and hallways, where dozens of Kimek work at computers and screens, as if monitoring the whole city. At the end of what seems to be the main passage of the complex, you pass through a doorway to find the Lunarium leaders seated around a table. You're shown to a seat, and as Lobmab comes in at the end, one of the bodyguards announces, "Lady Lobmab Bebliss, head of our great House."` ` Some of the others at the table look to one another, and one of the Kimek who accompanied you all the way from your ship sighs quietly before coming to Lobmab. "Most welcome you are, Lady Lobmab," he says, as he begins pointing to the leaders one by one, starting from your left with a Kimek. "Your host, Chiree is, the head of our local forces and organizer of many of our operations. Fought the Heliarchs since a young age, she has." He continues pointing to them in a clockwise pattern, now to the left of Chiree. "Likewise, helping us for decades now, Tummug has, in spreading word of our group, and bringing to the people the truth about the Heliarchy. Another prominent Arach, and vital to the task soon to be discussed, Oobat is. A studious linguist, and aspiring diplomat, she is. Already worked together, I believe you and Pyakri have? One of our most senior militia officers, she is." He takes a pause, looking at Lobmab, almost as if waiting for some approval regarding his introductions of the others. She simply nods, and he moves on. "And... Elirom. A prominent Saryd Heliarch Arbiter who defected over a century ago. Advising us since, he has." He waits for her to say something, before looking back at the table again and pointing to you. "Oh, of course. , the human who's helped us greatly, and who joining us today, is."` - ` Satisfied with the introductions, Lobmab takes her seat, much to the Kimek's relief. "Very grateful we are, that made the time for this meeting you have, Lady Lobmab," Chiree says. "An special task for Captain , we have, and wished to have all leaders present to discuss it, we did. But, first, welcome our newest member, we must," she says, looking at you. "Any questions for us have you, Captain?"` + ` Satisfied with the introductions, Lobmab takes her seat, much to the Kimek's relief. "Very grateful we are, that made the time for this meeting you have, Lady Lobmab," Chiree says. "A special task for Captain , we have, and wished to have all leaders present to discuss it, we did. But, first, welcome our newest member, we must," she says, looking at you. "Any questions for us have you, Captain?"` label questions choice ` "What are you all going to do if you do manage to take down the Heliarchs?"` @@ -1951,10 +1951,16 @@ mission "Lunarium: Quarg Interview" ` The Lunarium leaders spend an hour or so going over the questions proposed for the interview, deciding to ditch some, and add a few new ones. All the while, Elirom asks in a worried manner if Oobat is sure of this idea. "Forgive me if sounding like a Heliarch, I am, but dangerous to leave, it is. How the Quarg would react to seeing someone from the Coalition in their territory, we do not know."` ` "Understand that, I do, but fine I will be. Unlike the Quarg it is, to attack unprovoked," she answers. "And, if worse comes to worse, trust I do in Captain 's abilities to ensure we escape." The leaders go over the interview questions a while longer, until they've reached a consensus as to its completeness. They wish you and Oobat good luck, and you two are escorted back out of the complex to your ship. There, Oobat asks you for the best place for such an interview in human space, and you point to , where the Quarg are constructing their ringworld. "Then head there, we must. In your care I will be, Captain." You show her to her bunk, and plot a course to .` accept + on accept + "assisting lunarium" ++ to fail "reputation: Quarg" < 0 on visit dialog `You've reached , but your escort bringing Oobat hasn't entered the system yet. Better depart and wait for it.` + on complete + "assisting lunarium" -- + on fail + "assisting lunarium" -- mission "Lunarium: Join" name "Report Back" @@ -1996,9 +2002,12 @@ mission "Lunarium: Join" ` She nods, and gives a quick "thank you" to the Quarg again, turning to go back inside your ship. The Quarg stops her though, reaching out one arm quickly to grab one of her legs. Slowly, its skin turns back to the grayish blue from before, as it calms down. "Should you succeed, please, permit my return home." The Quarg around you disperse, and the one who was interviewed stands up again and moves back to other sections of the station.` ` You board your ship with Oobat, and hand her back the camera. "Mostly well, it went," she says, looking through the sped up footage and pausing at certain moments where the Quarg is responding. "Not what we expected from that last question, it was, however. Disappointed, I imagine Elirom will be." She tells you she'll be working on some basic edits to the footage, and says you may return to .` accept + on accept + "assisting lunarium" ++ on visit dialog `You've reached , but your escort bringing Oobat hasn't entered the system yet. Better depart and wait for it.` on complete + "assisting lunarium" -- set "joined the lunarium" set "language: Coalition" event "first lunarium unlock" @@ -2023,6 +2032,8 @@ mission "Lunarium: Join" ` You say your goodbyes, and you're escorted out of the complex and back to your ship. The Kimek who brought you there enter the ship with you briefly, and inform you that they've sent word across their major bases in the Coalition about your joining up. You're told that you'll find some new outfits available in their secretive outfitters. "In separate portions of the cities, sometimes in other cities entirely, our shops are, but safe from Heliarch patrols, they so far have proven." They give you a short list with the planets where you'll find their outfitters, and coordinates and instructions as to how to get to and access each of them.` ` When they leave, you start tinkering with the translation device, figuring out how to configure it to translate from each of the languages. After testing it with local transmissions and broadcasts for half an hour or so, you're decently fast with it, to the point where you can change what language it translates to or from a few times in a second.` ` It may be a long time still before the Lunarium is ready to take up arms against the Heliarchs, so for now you figure you could help by looking into what minor jobs they may have for you.` + on fail + "assisting lunarium" -- event "first lunarium unlock" planet "Remote Blue" From 9154b79238148cf689373c576d03a6e714c2d9d1 Mon Sep 17 00:00:00 2001 From: tibetiroka <68112292+tibetiroka@users.noreply.github.com> Date: Wed, 4 Oct 2023 15:50:06 +0200 Subject: [PATCH 71/79] fix(typo): "equipement" to "equipment" in tooltips.txt (#9407) --- data/_ui/tooltips.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/_ui/tooltips.txt b/data/_ui/tooltips.txt index 1dec42b97a4e..37435c5da673 100644 --- a/data/_ui/tooltips.txt +++ b/data/_ui/tooltips.txt @@ -895,7 +895,7 @@ tip "tracking:" `This projectile's ability to maintain its target lock.` tip "optical tracking:" - `This projectile's ability to maintain an optical target lock, which depends on the size of the target; negatively affected by any potential optical jamming equipement.` + `This projectile's ability to maintain an optical target lock, which depends on the size of the target; negatively affected by any potential optical jamming equipment.` tip "infrared tracking:" `This projectile's ability to maintain an infrared target lock, which depends on the target ship's heat level and distance from the missile; IR-guided missiles become more accurate the closer they are to their targets.` From c51076b93397837402fd55e303614783fb4d73db Mon Sep 17 00:00:00 2001 From: Anarchist2 <60202690+Anarchist2@users.noreply.github.com> Date: Sun, 8 Oct 2023 08:02:48 +1000 Subject: [PATCH 72/79] fix(content): Correct offer conditions of "Small Pirate gambling" (#9404) --- data/human/frontier jobs.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/human/frontier jobs.txt b/data/human/frontier jobs.txt index 1138b289456f..a5c075a805ee 100644 --- a/data/human/frontier jobs.txt +++ b/data/human/frontier jobs.txt @@ -242,7 +242,7 @@ mission "Small Pirate gambling" repeat to offer random < 3 - "reputation: Pirates" < 0 + "reputation: Pirate" < 0 "combat rating" < 200 credits > 14357 source From bd29f8191e85892fd4d2808b1104c37788653dbc Mon Sep 17 00:00:00 2001 From: warp-core Date: Sat, 7 Oct 2023 23:04:38 +0100 Subject: [PATCH 73/79] fix(content): Fix Quarg attitudes towards the Kor Mereti post-Mind (#9408) --- data/wanderer/wanderers middle.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/data/wanderer/wanderers middle.txt b/data/wanderer/wanderers middle.txt index 484d6605b6ee..c0fda5bbeb1c 100644 --- a/data/wanderer/wanderers middle.txt +++ b/data/wanderer/wanderers middle.txt @@ -1073,6 +1073,9 @@ event "wanderers: kor mereti friendly" government "Quarg (Kor Efret)" "attitude toward" "Kor Mereti" 0 + government "Quarg" + "attitude toward" + "Kor Mereti" 0 government "Kor Efret" "attitude toward" "Kor Mereti" 0 @@ -1109,6 +1112,7 @@ mission "Wanderers: Mind 6" has "Wanderers: Mind 5: done" on offer event "wanderers: kor mereti friendly" + fail "Wanderers: Kor Mereti Quarg Attitude Patch" conversation `With the Wanderer fleet keeping the automata off your back, you carefully pilot your ship into an abandoned docking bay. The Wanderers install the Mind in a niche near the back of the bay and then begin welding sheets of metal over the opening to prevent the Mereti drones from gaining easy access to the Mind to shut it down or destroy it. Meanwhile, every few seconds the bay is lit by a bright flash of weapons fire or exploding ships outside. Hopefully the Wanderer fleet is managing to hold its own against the drones.` ` Soon the engineers are done, and you return to your ship to take off. As soon as you depart, the bay doors, which seemed inactive when you first entered, slam shut, and your ship's sensors detect Korath hull repair drones swarming over the doors, welding them in place and piling new layers of hull material on top of them. There is no longer any possibility of returning to the bay to retrieve the Mind. And meanwhile, it is time to rejoin the battle...` @@ -1142,6 +1146,17 @@ mission "Wanderers: Mind 6" on visit dialog `You've landed on , but there are still hostile Kor Mereti drones in the Chimitarp system. Better depart and make sure they've been taken care of.` +# For compatibility with saves that got the "wanderers: kor mereti peaceful" event +# before the introduction of the "Quarg (Kor Efret)" government." +mission "Wanderers: Kor Mereti Quarg Attitude Patch" + landing + invisible + to offer + has "event: wanderers: kor mereti friendly" + on offer + event "wanderers: kor mereti friendly" + fail + event "wanderers: kor mereti transformation" From d16eaa2bcd8c4a54587368f1cc087f1e9e4d18b0 Mon Sep 17 00:00:00 2001 From: Saugia <93169396+Saugia@users.noreply.github.com> Date: Sat, 7 Oct 2023 18:05:02 -0400 Subject: [PATCH 74/79] fix(content): Update Quarg fleets to use the correct regional government (#9409) --- data/map systems.txt | 30 +++++++++++++++--------------- data/wanderer/wanderers middle.txt | 4 ++-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/data/map systems.txt b/data/map systems.txt index 32e556ddda9e..f69ce18df555 100644 --- a/data/map systems.txt +++ b/data/map systems.txt @@ -8188,7 +8188,7 @@ system Chikatip trade Medical 606 trade Metal 283 trade Plastic 278 - fleet "Large Quarg" 2000 + fleet "Large Quarg (Kor Efret)" 2000 fleet "Kor Efret Miners" 10800 object sprite star/k5 @@ -8369,7 +8369,7 @@ system Chornifath trade Medical 508 trade Metal 468 trade Plastic 373 - fleet "Large Quarg" 1000 + fleet "Large Quarg (Kor Efret)" 1000 object sprite star/k0 period 10 @@ -13295,7 +13295,7 @@ system Farbutero trade Medical 549 trade Metal 450 trade Plastic 403 - fleet "Large Quarg" 2000 + fleet "Large Quarg (Kor Efret)" 2000 fleet "Small Kor Mereti" 9400 fleet "Large Kor Mereti" 5000 object @@ -13830,7 +13830,7 @@ system Feroteri trade Medical 492 trade Metal 406 trade Plastic 451 - fleet "Large Quarg" 3000 + fleet "Large Quarg (Kor Efret)" 3000 fleet "Small Kor Mereti" 12000 fleet "Large Kor Mereti" 6400 object @@ -14165,7 +14165,7 @@ system Fornarep trade Medical 694 trade Metal 438 trade Plastic 375 - fleet "Large Quarg" 2000 + fleet "Large Quarg (Kor Efret)" 2000 fleet "Small Kor Mereti" 9000 fleet "Large Kor Mereti" 5800 object @@ -14332,7 +14332,7 @@ system Furmeliki trade Medical 536 trade Metal 346 trade Plastic 313 - fleet "Large Quarg" 1000 + fleet "Large Quarg (Kor Efret)" 1000 object sprite star/k0 period 10 @@ -16163,7 +16163,7 @@ system Hesselpost trade Medical 484 trade Metal 536 trade Plastic 281 - fleet "Large Quarg" 1000 + fleet "Large Quarg (Kor Efret)" 1000 fleet "Kor Efret Miners" 7200 object sprite star/k0 @@ -18539,7 +18539,7 @@ system Kaliptari trade Medical 675 trade Metal 334 trade Plastic 398 - fleet "Large Quarg" 3000 + fleet "Large Quarg (Kor Efret)" 3000 fleet "Small Kor Mereti" 10000 fleet "Large Kor Mereti" 4800 object @@ -20200,7 +20200,7 @@ system Korsmanath trade Medical 479 trade Metal 427 trade Plastic 440 - fleet "Large Quarg" 3000 + fleet "Large Quarg (Kor Efret)" 3000 fleet "Small Kor Mereti" 8000 object sprite star/k0 @@ -21870,7 +21870,7 @@ system Meftarkata trade Medical 599 trade Metal 484 trade Plastic 334 - fleet "Large Quarg" 1000 + fleet "Large Quarg (Kor Efret)" 1000 fleet "Kor Efret Miners" 7200 object sprite star/f5 @@ -28228,7 +28228,7 @@ system Sabriset trade Medical 621 trade Metal 275 trade Plastic 441 - fleet "Large Quarg" 4000 + fleet "Large Quarg (Kor Efret)" 4000 object sprite star/g0 distance 34.3036 @@ -29145,7 +29145,7 @@ system Seketra trade Medical 635 trade Metal 327 trade Plastic 286 - fleet "Large Quarg" 3000 + fleet "Large Quarg (Kor Efret)" 3000 object sprite star/k5 period 10 @@ -29268,7 +29268,7 @@ system Sepriaptu trade Medical 604 trade Metal 320 trade Plastic 449 - fleet "Large Quarg" 4000 + fleet "Large Quarg (Kor Efret)" 4000 object sprite star/f5 distance 15.0211 @@ -30085,7 +30085,7 @@ system Skeruto trade Medical 621 trade Metal 393 trade Plastic 333 - fleet "Large Quarg" 2000 + fleet "Large Quarg (Kor Efret)" 2000 object sprite star/m0 period 10 @@ -30614,7 +30614,7 @@ system Solifar trade Medical 678 trade Metal 285 trade Plastic 442 - fleet "Large Quarg" 4000 + fleet "Large Quarg (Kor Efret)" 4000 object sprite star/m0 period 10 diff --git a/data/wanderer/wanderers middle.txt b/data/wanderer/wanderers middle.txt index c0fda5bbeb1c..7beb9e7a6888 100644 --- a/data/wanderer/wanderers middle.txt +++ b/data/wanderer/wanderers middle.txt @@ -2141,7 +2141,7 @@ mission "Wanderers: Sestor: Quarg Help 2" on accept log "Recruited some Quarg warships to help defend human space from the Kor Sestor drones, which are now presumably under Alpha control." npc accompany save - government "Quarg" + government "Quarg (Hai)" personality heroic waiting escort ship "Quarg Wardragon" "Leukos-nikeseh" ship "Quarg Wardragon" "Purros-machaira" @@ -2232,7 +2232,7 @@ mission "Wanderers: Sestor: Farpoint Attack 2" on visit dialog `Danforth notices your ship land as the sky lights up with the explosions of Navy ships. "Did you use the bomb?" he asks. The stress in his voice is palpable. You shake your head. "Then what the hell are you doing here? Get up there and drop the bomb already!"` npc - government "Quarg" + government "Quarg (Hai)" personality heroic staying ship "Quarg Wardragon" "Leukos-nikeseh" ship "Quarg Wardragon" "Purros-machaira" From 79b43e2135e83f78fecbf8bfded19383347f0cce Mon Sep 17 00:00:00 2001 From: Anarchist2 <60202690+Anarchist2@users.noreply.github.com> Date: Sun, 8 Oct 2023 08:05:37 +1000 Subject: [PATCH 75/79] fix(content): Clean up descriptions of new spaceport missions (#9418) --- data/human/human missions.txt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/data/human/human missions.txt b/data/human/human missions.txt index 0009d9c5ef9a..274667a31753 100644 --- a/data/human/human missions.txt +++ b/data/human/human missions.txt @@ -6305,7 +6305,7 @@ mission "Blind Man from Martini" mission "Care Package to South 1" minor name "Care package to " - description "An activist named Torrey has asked you to take a care package to her friend, an NCO named Irene in the Southern Mutual Defense Pact militia, stationed on ." + description "An activist named Torrey has asked you to take a care package to her friend, an NCO named Irene in the Southern Mutual Defense Pact militia, stationed on . Payment is ." source government "Republic" "Syndicate" not attributes "rim" "south" "station" @@ -6425,7 +6425,7 @@ mission "Care Package to South 2b" mission "Moving House 1" minor name "Moving House" - description "An anarchist named Kris has asked you to help them move house from to ." + description "An anarchist named Kris has asked you to help move them and from to . Payment is ." source government "Republic" "Syndicate" not attributes "rim" "south" @@ -6509,7 +6509,7 @@ event "kris gets frustrated" mission "Moving House 2" minor - description "Kris is unsatisfied on and wants your help to move to instead." + description "Kris is unsatisfied with life on and wants your help to move." landing name "Moving House, Again" source @@ -6530,6 +6530,7 @@ mission "Moving House 2" mission "Moving House 3" name "Moving House, Again" + description "Kris is unsatisfied on and wants your help to move to instead. Payment is ." source "Lichen" destination "Thule" passengers 1 @@ -6563,8 +6564,8 @@ mission "Moving House 3" mission "Stranded In Paradise 1" minor - name "Stranded In Paradise" - description "The Burnbeck family was stranded by the bombings, and needs transport back home to ." + name "Stranded in Paradise" + description "The Burnbeck family was stranded by the bombings, and needs free for transport back home to . Payment is ." source attributes "paradise" destination @@ -6630,7 +6631,7 @@ mission "Stranded In Paradise 2" mission "Southern Fiance 1" name "Fiance to " minor - description "Tom, formerly a marketer for the Syndicate, is going to live with his fiance on ." + description "Tom, formerly a marketer for the Syndicate, is going to live with his fiance on . Payment is ." source attributes "core" not government "Pirate" @@ -6781,7 +6782,7 @@ mission "Southern Fiance 6" mission "FW Refugees to Humanika" - name "Transport Refugee Family" + name "Refugee family to " description "Transport a family of refugees and to . Payment is ." minor source From 96bf2374367f28ddf77a65092521ea93453e1762 Mon Sep 17 00:00:00 2001 From: warp-core Date: Sat, 7 Oct 2023 23:06:28 +0100 Subject: [PATCH 76/79] fix(content): Fix duplicate text in "Remnant: Celebration 1" (#9419) --- data/remnant/remnant 2 side missions.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/data/remnant/remnant 2 side missions.txt b/data/remnant/remnant 2 side missions.txt index 79dced339462..3fb1f303e8bc 100644 --- a/data/remnant/remnant 2 side missions.txt +++ b/data/remnant/remnant 2 side missions.txt @@ -234,9 +234,6 @@ mission "Remnant: Celebration 1" label countdown ` On the final word the chant ends and dozens of deep voices join together in a roaring crescendo before fading away, replaced by many new voices expressing tones of wonder. At this point, it seems that almost every single person in the room is drumming, dancing, or singing - many seem to be doing several simultaneously.` ` As the stars wheel through the night sky above the mouth of the cave, you note the flow of the ceremony seems to be telling a story of some kind. You understand very few snippets of words, but the emotion conveyed in the singing is clear. The early tone of anticipation shifts to the roar of excitement and then on to a peaceful tone of wonder.` - ` As the ceremony continues, this shifts again to a steady, almost mechanical feel, which is in turn abruptly penetrated by a piercing thread of excitement, leading to the entire tone of the song becoming one of curiosity over another driving beat. The melody then seems to wander more, caught in duel tones of regret and anticipation, mourning and rejoicing, terror and hope, disorder and structure, disappointment and awe, and countless other deeply emotional pairings before finally culminating in a return to the original, unified heartbeat as the singers' voices come together, reaching upwards in hope before finally everything trails off into silence.` - to display - not "remnant: celebration: annotated" ` As the ceremony continues, this shifts again to a steady, almost mechanical feel, which is in turn abruptly penetrated by a piercing thread of excitement, leading to the entire tone of the song becoming one of curiosity over another driving beat. The melody then seems to wander more, caught in dual tones of regret and anticipation, mourning and rejoicing, terror and hope, disorder and structure, disappointment and awe, and countless other deeply emotional pairings before finally culminating in a return to the original, unified heartbeat as the singers' voices come together, reaching upwards in hope before finally everything trails off into silence.` ` Through it all, Taely offers a running commentary on how each stretch of the ceremony represents a different piece of their collective history, ranging from the launch of the first human into space to its commercialization and then the new age of exploration opened by the advent of hyperdrives. It also includes numerous conflicts, disasters, and wars. Much of it is rather familiar to you from what you know of human history, but the later part is strange and unfamiliar. Filled with stories of first contact, strange ruins, alien invasions, desperate last stands, and brilliant discoveries, you are left with the impression that, despite the Remnant's current security, they have been on the precipice of extinction for much of their existence.` to display From d0b3a70e47ef08843c1476b1ba9471f9a2d1f661 Mon Sep 17 00:00:00 2001 From: warp-core Date: Sat, 7 Oct 2023 23:15:38 +0100 Subject: [PATCH 77/79] fix(ui): Fix scrolling up the load panel with the keyboard (#9420) --- source/LoadPanel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/LoadPanel.cpp b/source/LoadPanel.cpp index 6ea7eff48f49..74650d11cfee 100644 --- a/source/LoadPanel.cpp +++ b/source/LoadPanel.cpp @@ -307,7 +307,7 @@ bool LoadPanel::KeyDown(SDL_Keycode key, Uint16 mod, const Command &command, boo if(it == files.begin()) { it = files.end(); - sideScroll = 20. * files.size() - 280.; + sideScroll = max(0., 20. * files.size() - 280.); } --it; } @@ -343,7 +343,7 @@ bool LoadPanel::KeyDown(SDL_Keycode key, Uint16 mod, const Command &command, boo if(it == pit->second.begin()) { it = pit->second.end(); - centerScroll = 20. * pit->second.size() - 280.; + centerScroll = max(0., 20. * pit->second.size() - 280.); } --it; } From 791a39b94c2d61c670ee30de0a5c81265e3be799 Mon Sep 17 00:00:00 2001 From: Hurleveur <94366726+Hurleveur@users.noreply.github.com> Date: Sun, 8 Oct 2023 03:49:18 +0500 Subject: [PATCH 78/79] fix(ui): Fix blurriness with smooth scroll (#9410) --- source/ShopPanel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/ShopPanel.cpp b/source/ShopPanel.cpp index 77be9d275624..5dcce2143d29 100644 --- a/source/ShopPanel.cpp +++ b/source/ShopPanel.cpp @@ -70,7 +70,7 @@ namespace { if(dy) { // Handle small increments. - if(fabs(dy) < 6) + if(fabs(dy) < 6 && fabs(dy) > 1) smoothScroll += copysign(1., dy); // Keep scroll value an integer to prevent odd text artifacts. else From 28cf5353200b8d76bc42cf46f86348e675eb5ed3 Mon Sep 17 00:00:00 2001 From: Saugia <93169396+Saugia@users.noreply.github.com> Date: Sat, 7 Oct 2023 20:41:26 -0400 Subject: [PATCH 79/79] fix(content): Choose which Coalition faction to side with if the player joined both (#9421) --- data/coalition/lunarium intro.txt | 80 +++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/data/coalition/lunarium intro.txt b/data/coalition/lunarium intro.txt index 797537519ce7..29a8ecd541ed 100644 --- a/data/coalition/lunarium intro.txt +++ b/data/coalition/lunarium intro.txt @@ -2050,3 +2050,83 @@ event "first lunarium unlock" outfitter "Lunarium Basics" planet "Refuge of Belugt" outfitter "Lunarium Basics" + + + +# Patch for if the player joined both Heliarch and Lunarium prior to a fix. +mission "Coalition Intro Join Patch" + landing + invisible + to offer + has "joined the lunarium" + has "joined the heliarchs" + has "event: first lunarium unlock" + has "event: first heliarch unlock" + has "license: Heliarch" + on offer + conversation + `(You have joined both the Coalition's Lunarium and Heliarch factions due to an unintended bug. Please choose which side you prefer to be with.)` + choice + ` (Side with the Heliarchs.)` + goto "heliarch" + ` (Side with the Lunarium.)` + + action + clear "license: Heliarch" + clear "joined the heliarchs" + event "fix: chose lunarium" + ` (You've sided with the Lunarium.)` + decline + + label "heliarch" + action + clear "joined the lunarium" + event "fix: chose heliarchs" + ` (You've sided with the Heliarchs.)` + decline + +event "fix: chose heliarchs" + planet "Remote Blue" + remove outfitter "Lunarium Basics" + planet "Fourth Shadow" + remove outfitter "Lunarium Basics" + planet "Into White" + remove outfitter "Lunarium Basics" + planet "Secret Sky" + remove outfitter "Lunarium Basics" + planet "Shifting Sand" + remove outfitter "Lunarium Basics" + planet "Mebla's Portion" + remove outfitter "Lunarium Basics" + planet "Refuge of Belugt" + remove outfitter "Lunarium Basics" + +event "fix: chose lunarium" + planet "Ring of Friendship" + remove outfitter "Heliarch Basics" + planet "Ring of Power" + remove outfitter "Heliarch Basics" + planet "Ring of Wisdom" + remove outfitter "Heliarch Basics" + planet "Saros" + remove outfitter "Heliarch Basics" + planet "Ahr" + remove outfitter "Heliarch Basics" + planet "Ki Patek Ka" + remove outfitter "Heliarch Basics" + planet "Belug's Plunge" + remove outfitter "Heliarch Basics" + planet "Stronghold of Flugbu" + remove outfitter "Heliarch Basics" + planet "Delve of Bloptab" + remove outfitter "Heliarch Basics" + planet "Far Home" + remove outfitter "Heliarch Basics" + planet "Dwelling of Speloog" + remove outfitter "Heliarch Basics" + planet "Blue Interor" + remove outfitter "Heliarch Basics" + planet "Sandy Two" + remove outfitter "Heliarch Basics" + planet "Second Rose" + remove outfitter "Heliarch Basics"