Difference between revisions of "AI War 2:Building Multiplayer"

From Arcen Wiki
Jump to navigation Jump to search
Line 13: Line 13:
 
== Version 2.029 ==
 
== Version 2.029 ==
 
(Not yet released -- we're still working on it!)
 
(Not yet released -- we're still working on it!)
 +
 +
* Fixed a rather inexplicable "bug" (really a design choice in code that made no sense in retrospect but has been there since the fleet redesign well over a year ago) where if a unit was put into a different fleet than initially expected, it would wipe out all levels from EXP or science.
 +
** The main practical effect of this was that anytime a command station died, then any levels that you got from science upgrades to its fleet were reset to zero, which was a huge negative of course.  This is now fixed.
 +
*** This did lead to some ships or turrets being a higher level (based on the old science upgrade levels) compared to newer ones.  Basically items that are a certain level won't level-down, so even though the science was taken away, they wound up still being at the higher level.  But new items built would be at the lower level. This isn't something that we can fix in existing savegames (same thing with the lost levels from science in existing saves in general.  But for all future upgrades, including in existing savegames if the upgrades happen in this or future versions, they will now be retained.
 +
** Thanks to DEMOCRACY_DEMOCRACY for reporting.
  
 
== Beta 2.028 Eat Bad Lobby Saves ==
 
== Beta 2.028 Eat Bad Lobby Saves ==

Revision as of 12:15, 21 April 2020

Known Issues

  • Multiplayer is disabled but coming very soon. We first focused on tightening up the single-player loop (more info here), so thanks for your patience!

What's this phase all about?

Now that we've got the first expansion under our belt, and the game is feeling large and solid at the equivalent of "first AI War plus four expansions," we're ready to tackle the next big thing: multiplayer! We also are going to be adding interplanetary weapons to the base game as a free update (that's the last of the kickstarter stretch goals). This phase should wrap up all our kickstarter promises (including a laundry list of other smaller items), and we expect to have multiplayer fully functional by June or July.

Multiplayer should be in a beta form where folks can test on it and run into bugs long before then. While Chris is mostly working on multiplayer and those other little lingering base game features, Badger is going to be doing the bulk of the work on the second expansion, Zenith Onslaught. That should hopefully launch around the same time as multiplayer.

Version 2.029

(Not yet released -- we're still working on it!)

  • Fixed a rather inexplicable "bug" (really a design choice in code that made no sense in retrospect but has been there since the fleet redesign well over a year ago) where if a unit was put into a different fleet than initially expected, it would wipe out all levels from EXP or science.
    • The main practical effect of this was that anytime a command station died, then any levels that you got from science upgrades to its fleet were reset to zero, which was a huge negative of course. This is now fixed.
      • This did lead to some ships or turrets being a higher level (based on the old science upgrade levels) compared to newer ones. Basically items that are a certain level won't level-down, so even though the science was taken away, they wound up still being at the higher level. But new items built would be at the lower level. This isn't something that we can fix in existing savegames (same thing with the lost levels from science in existing saves in general. But for all future upgrades, including in existing savegames if the upgrades happen in this or future versions, they will now be retained.
    • Thanks to DEMOCRACY_DEMOCRACY for reporting.

Beta 2.028 Eat Bad Lobby Saves

(Released April 20th, 2020)

  • The fleet management sidebar popout now uses the display name for sidebar (which is shorter) instead of the full display name, to keep things from wrapping.
    • Thanks to -NR-SirLimbo for reporting.
  • If a savegame would be loading in and fails for some reason, then it now shows what the savegame name is rather than writing ???.
    • In the event that for some reason your game version's name can't be found, it now shows you what game version it was trying to find. Sometimes this can be as simple as an artifact of someone doing custom development.
    • Thanks to Badger and mofowe4644 for inspiring this change.
  • Previously if you tried to load a savegame that was broken for some reason, then it would give you a warning about that but then keep on trying to load stuff, cascading errors upon errors. Now it just stops and doesn't keep letting things get worse!
    • This also makes it so that loading a broken save doesn't mean you have to restart the entire program or else things are funky and broken until you do, too!
    • Thanks to ParadoxSong and Badger for reporting.
  • Additionally, previously if you had an exception while trying to load the "last settings" savegame for the lobby when you do a new custom start, it would just be all kinds of broken, making custom starts not possible. Now it instead notices the failure and just does a fresh "reset to defaults" type of start for you.
    • In this path, to keep things smooth it doesn't even bother warning you now.
    • Thanks to ParadoxSong and Badger for reporting.
  • Added three new settings to the Performance section of the personal settings:
    • Disable Tachyon Beam Visuals
      • If you have absolutely giant battles beyond the norm, and there are too many tachyon emitters in play, it can cause serious performance degradation. For the people who run into that, or are on lower-end hardware, this is a great way to get more performance at basically very litte drawback.
    • Disable Tractor Beam Visuals
      • If you have absolutely giant battles beyond the norm, and there are too many tractor beams grabbing ships, it can slow things down. This is a lot less likely to be a problem than tachyon beams, but can be helpful in some cases.
    • Disable Beam Weapon Visuals
      • If you have absolutely giant battles that we can't fathom, all with beam weapons, then the load of that is higher than that of other shots. This should basically never happen, but this lets you turn them off if it's ever a problem for you for some problem. This would be missing a lot of info during play, though.
    • Thanks to Emeritus Puffin for suggesting.

Bugs From The Beta

  • Fixed a bug where any scouting was scouting all planets in the prior beta version. This was one of those sorts of things that happens when you make widespread code changes and sometimes mangle a bit of code that doesn't directly translate.
    • Thanks to ParadoxSong for reporting.
  • For some reason, there was a version issue or something along those lines with certain lobby settings in the beta version for some (most?) players. The game now recovers from that either way, but we're not sure what was up with that. Possibly there was an intermediate version that was needed in the xml, and we added that, which will fix things either way. It wasn't hurting quick starts or savegames, just the custom start lobby, so the existing larger fixes above will prevent this beta issue from happening anyhow.

Beta 2.027 Planetary Mathematics

(Released April 16th, 2020)

To play this on Steam, please go under betas and choose current_beta from the drop-down list. We would really appreciate some testers on this so that we can get back out of beta status as quickly as possible! There is not currently a way to get the beta versions on GOG, but we won't be in that status for more than a few days, knock on wood.

  • Code has been added in (but is untested) to remove destroyed planets from the galaxy map.
  • Fixed an exception that could happen in RemoveIncomingShot when multiple threads were racing.
    • Thanks to ParadoxSong for reporting.
  • Techs that have already been fully unlocked now continue to show up on the tech sidebar, since having those disappear was freaking confusing.
    • They now show up with a line item saying "COMPLETE" instead of some sort of science cost.
  • When viewing the tooltip for a unit, it now shows how many upgrades have happened out of how many upgrades for each tech line that benefits the unit.
    • This way you can tell WHY it is the mark level it is, aside from things at the fleet itself that are leveling them up.

Dangerous Changes Useful For Future Features For Both Free Multiplayer And Paid DLC

  • The game used to allow for a list of galaxies (more than one at once), but we only ever used one at a time. We've now restructured it to just be a CurrentGalaxy object rather than a List<Galaxy>. This is very slightly more efficient for whenever we need to loop over planets, etc, since there's no array lookup that needs to happen to Galaxies[0] and instead we just call a direct object reference. This is a minor improvement, but we do it so very much that it's good to have every little bit of improvement.
  • There is a new DoForPlanets on the World_AIW2 and the Galaxy object that allows you to iterate over all the planets, with a boolean flag to let you skip destroyed planets if you want.
    • The existing Planets list on galaxies has been renamed to the long-and-discouraging name AllPlanetsIncludingDeadOnes_GenerallyDoNotReferenceDirectly, so hopefully people really only use that when there is a true need to do so.
    • There is also a version of DoForPlanets on World_AIW2 that lets you pass in a faction that must be controlling or influencing the planet. We can add other overloads as need be. In the case of this one we assume that the planet isn't destroyed, since it's hard to own something that doesn't exist.
    • It IS worth noting that for anything that is in mapgen, the galaxy object is being passed around and so using the methods on the world are NOT a good thing to be using.
      • With that in mind, AllPlanetsIncludingDeadOnes_GenerallyDoNotReferenceDirectly is still used quite a lot when we're talking about things that are in mapgen. Technically those could use the DoForPlanets on the galaxy they are passing around, but since there are never any dead planets during mapgen that does seem a bit pointless.
  • Also added in some new methods for things like ensuring all the planets are in a galaxy are linked, to specifically AVOID ones that are destroyed, since those should probably not be linked and we don't care.
    • In a bunch of semi-related methods, looking at things like neighbor planets and such, there is now a bool saying if you want to include destroyed ones, etc. Hopefully the destroyed ones are unlinked already, but in case not this lets us ignore them here.
  • Added in various other methods, like GetRandomPlanet() on the galaxy object to get a random planet that can be limited down to just the ones that are non-destroyed.
  • Fixed a bug that we found purely by accident in code review where threatToLeaveBehind was being calculated extremely incorrectly -- using the indexer i instead of the indexer pairIndex. This could have led to anything from stuff not staying behind properly to a hard-lock of the AI thread (where the AI stops responding at all). It would have been incredibly rare, and basically only happened when the AI was fighting on a non-king planet and wanted to leave some threat behind but take some away because they were over-running the planet.
  • It's worth noting that there are a TON of changes in here that may cause some other bugs that are unexpected, so we're going to go to the beta branch on this after all (which is funny because just yesterday Chris was talking about not doing that for a while).
    • There are also probably some further uses of AllPlanetsIncludingDeadOnes_GenerallyDoNotReferenceDirectly that we have right now that we can clean up, so we may go ahead and do that, too.
  • A day passes.
  • Added a funky new data structure called ArcenTwoDimensionalFlexibleLists<T>, which is basically a generic and flexible replacemenet for things like bool[][].
    • This lets us have things like two-dimensional arrays for pathfinding that get larger as the number of planets increase.
    • Previously if we added planets to the game late, without a save and load it was going to have some major issues with pathfinding in particular.
    • ProjectedMultiPathData has been updated to use this new data structure.
  • After some thinking, AllPlanetsIncludingDeadOnes_GenerallyDoNotReferenceDirectly has been made private to Galaxy, and there are instead nicer wrapper methods for getting at the data in that.
    • This reduces the duplication of code that we otherwise have, and most importantly helps to make the intent of how each method is used more clear by their names.
  • Wow this is a lot of changes, all throughout. We're totally doing a beta for a few days at least to see if things break or what happens. So far everything works perfectly, which always makes us suspicious.
    • But now we have a lot more flexibility for adding or removing planets during gameplay, which is a pretty neat new thing to be able to do in general, for a variety of reasons.
    • Adding extra planets for players who join late in multiplayer is an example of one thing that we want to be able to eventually do, so that if player 2 joins in 2 hours into a campaign they still get a homeworld of their own, but it's a new one. One thing at a time, but that's something for during the later beta stages of multiplayer implementation, probably.

Version 2.026 The Faction Duality Problem

(Released April 14th, 2020)

  • The linux version of the game now has code in place to not even try to launch anything GOG-related, since GOG Galaxy does not exist on linux.
    • For most people it was failing silently (as it should), and basically causing no harm. But for at least one person, it was causing a crash on startup. This should work around that. When GOG galaxy support is added on linux at some point, then we'll revisit.
    • Thanks to shampoocat for reporting.
  • Fixed a regression where if you were logged into GOG Galaxy and not Steam, it wasn't shown your username properly on the main menu.
  • Fixed a couple of expansion spire hybrids from getting invulnerability from thoraxian hybrids when they should not.
    • Thanks to DHR Valkyr and Puffin Emeritus for reporting.
  • Put in some fixes to planet tooltip generation in the event that the player faction is null for some reason.
    • Thanks to Valkyr for reporting.
  • Made the exports for data about factions in a game a lot more detailed.
  • Made it so that if you get a "no human king found" error, it also writes a report about what factions are there.
  • Fixed a bug during deserialization of savegames/quickstarts that made it so that you had duplicate copies of the WorldSetup used for the lobby and the long-term storage, and that in turn led to chaos like deleting players or other factions or creating many duplicate factions when starting a new quickstart.
    • This bug has been in place since April 1st (go figure), but it wasn't really fully rearing its head until yesterday when some unrelated changes made it suddenly more apparent.
    • In fact we even had a second copy of this error from the same day in a second spot for loading quickstarts, so it was really going crazy.
    • This is less a case of "how did we break this yesterday" and more of a case of "how has this been working at all prior to yesterday for the two weeks prior?"
    • Thanks to AreU4Cereal, esassaman, GalateanGemmate, Strategic Sage, and Mischief Maker for reporting.
  • If you have an old savegame with duplicate factions in them (multiple outguard or something), it will warn you about that when you load it, so that you know it's there, but it can't fix it. If you load that as a template for something else, that should fix it.
    • There is a vague possibility that you might be able to create a new game with duplicates again in the new version, simply by having old bad settings in your PlayerData/Save/_Internal/LastLobbySettings.save file.
      • Simply hitting "Reset To Defaults" in the lobby, or loading a quick start or savegame into the lobby would remove that problem. But even with a known-bad save in LastLobbySettings.save, we can't duplciate having a new custom game with the problem now, so maybe it's not possible. If you're able to make it happen we'd be grateful for having your LastLobbySettings.save if it's something that you can make happen over and over again.
    • None of this would affect any savegames except for those that were created in 2.025 (yesterday's build), or MAYBE via a LastLobbySettings.save from 2.025.
    • Thanks to Strategic Sage for reporting.

Version 2.025 The Twenty Million Problem

(Released April 13th, 2020)

  • Fix a potential bug with macrophage notifications after the player is dead
    • Thanks to Ovalcircle for reporting
  • Fixed a bug in the most recent two versions of the game where the various zombie factions and the outguard faction were not seeding UNLESS you happened to go into the lobby and hit Set to Defaults and then start the game. It's possible that quick starts were working properly, but not definite.
    • This won't affect existing savegames regarding outguard being summonable, but will affect any new ones created. For zombies, it will fix any problematic existing saves.
    • Thanks to Valkyr, Strategic Sage, Lord Of Nothing, DEMOCRACY_DEMOCRACY, Scout1Treia, and Poppy for reporting.
  • Fixed a bug where certain savegames could have not all the expansions in use actually noted as in use. This was going to be a problem for multiplayer, but we will probably have some further changes to make to that in the future.
    • In the short term, this could also cause some problems with detecting if relic trains were supposed to be enabled if you used certain quick starts or older savegames.
    • Thanks to Lord Of Nothing for reporting.
  • Somehow or other, Ovalcircle managed to get the game to remember his last settings as being those from the test chamber. That shouldn't have been possible, and we can't replicate it, but we've put in extra fixes to hopefully keep it from happening to anyone again.
    • Thanks to Ovalcircle for reporting.
  • Put in a fix that makes it so that if there are more factions than planet factions, it won't give an index out of range exception.
  • Put back in some code that will now add AI Reserves (and the zombies and outguard) to existing savegames that don't have them.
    • It won't actually seed any outguard beacons if those are missing, but it will make all the various sorts of zombies function properly if they were missing, which is a pretty big deal.
    • Previously we had taken this out, and only had it run when loading as a template of some fashion or from the lobby, because it caused a mismatch in factions and planet factions.
  • Put in some code that automatically fixes any missing planet factions for any galaxy-wide factions that are missing in a savegame that is loaded or other things that are created.
    • This fixes some serious issues in the test chamber, for one, but also makes it so that the other fixes above don't break the world.
  • Put in some more defensive code for a rare threading race condition exception that could happen in TryUpdatingTargetPoint of ShotVisualizer.
    • Thanks to Endovior for reporting.
  • Improved the wording in the quick start menu to say "no scenario selected" and similar, instead of "no save selected," so it's more clear what to do if you are having an error.
    • Thanks to UFO for reporting the confusion.
  • Fixed an issue in the quick start window and in the load savegame window where your old settings would be kept, but invisibly, when you exited the screen but went back in. You'd still have a scenario/save selected, but not visible.
    • Thanks to UFO for reporting.
  • Put in a fix that ignores an exception in GenerateCaret() for text mesh pro when we disabled a canvas. This has only been popping up recently for whatever reason, but should now just ignore the problem and keep moving when the canvas is next showed.
    • Thanks to Endovior and Badger for reporting.
  • Fixed an issue where, inexplicably, if we had a primary key for ships or shots that was more than 20 million it would start just giving them all the same primarykeyid which would then lead to all manner of problems.
    • This is not new, but it's only being encountered now, which is probably due to some particular factions in the specific savegame setup which cause a high ship PKID turnover. It still took 13 hours for this to come about.
    • The new cap is now properly a bit over 2 billion, which is 100x as high (and nearing the limit of 32bit integers). In the same sort of extreme scenario, with the same amount of churn, we can then assume it would take 1300 hours in one campaign to hit that new limit, so that's... certainly okay.
    • Huge thanks to choam and DarkWing for reporting and providing a save where we could reproduce this.
  • Because of the prior bug, when a savegame is loaded that has an entity with id 20000001, it now reassigns it on load. This will definitely cause some problems in those saves, but definitely fewer problems than them all sharing a primary key ID.
    • The PKIDs are supposed to be unique, but in the case of one particular savegame we had 9895 ships with all the ID 20000001, which meant all sorts of problems like ships not being selectable, not able to decollide, not able to get movement orders in general, and not able to get orders from the player or other factions. Instead, they could kind of sit in place and autotarget and that was it.
    • Reassigning PKIDs is itself one of those "never do this" things, so probably any save affected by this (very few, if any beyond the single one we have on hand) may find some inexplicable bugs like fire teams missing entries or pointing to the wrong thing, etc. Things seem to load and run fine, but if there are boogeymen in a save of this sort then you know it's probably related to this.
    • Huge thanks to choam and DarkWing for reporting and providing a save where we could reproduce this.

Version 2.024 UI Focus Hotfix

(Released April 10th, 2020)

  • Fixed a complicated bug where the game was not properly able to detect when an input field lost focus by virtue of its whole ui canvas (window) being disabled. This led to large parts of the ui being disabled at times after showing an input field in the prior version of the game.
    • Two logic inversions in semi-related code also made that even worse, although one of them made it "better" enough that the ui worked at all. Nonetheless, this was a fix that needed to happen quickly.
    • Thanks to Valkyr for reporting.
  • Fixed a rare bug that could happen in fire teams updating and getting an index out of range exception at debug code 3100.

Version 2.023 Chat Hotfix

(Released April 10th, 2020)

  • Allow non-scourge factions that use fireteams to stack when/where appropriate
    • Thanks to Swizzlewizzle for the bug report and save.
  • Fixed several nullref bugs relating to regenerator golems.
    • Thanks to Badger for reporting.
  • Added in new targeting logic for melee units that should allow them to better attack moving targets.
    • If issues crop up, or you prefer the old style, this can be enabled and disabled under the Units tab in Galaxy Settings.

UI / Chat Improvements

  • The hotkey for opening the chat window is now Return/Enter rather than C. This actually lets you do C-clicking still and C-hovering, etc, which has been impossible since adding the chat.
    • Thanks to UFO and Strategic Sage for reporting.
  • All of the various modifier keys for doing things like hiding tooltips no longer function while you are entering text into a textbox.
  • Simply having the chat window open no longer causes all other input to be blocked. Now you actually have to have the cursor in the chat textbox for that to be the case.
  • Hitting the escape key while you are in the chat window now properly closes that window, even if you are in text entry at the moment.
  • Hitting the escape key to close whatever window or popup no longer comes with a risk of opening the in-game escape/system menu. That has been annoying for a long time.
    • Thanks to a variety of people for reporting over the last few years.
  • When you first go into that chat window, or the modal textbox window, it now focuses the textbox there for immediate typing.
    • Additionally, after you send a chat message it immediately re-focuses the chat textbox.
  • The chat log now actually uses gametime timestamps, rather than "how many gametime seconds ago was it" to show things. This is a lot easier to read, since every second every line isn't changing width because of all the lines changing numbers every second.

Version 2.021 Hotfix

(Released April 8th, 2020)

  • Fix to a deserialization error with AI Reserves in the prior build which was affecting quick starts but not existing savegames. Sorry about that!

Version 2.019 Regenerator Sanity

(Released April 7th, 2020)

  • When the AI Reserves decide to attack, they now give you a Notification saying "AI Reserves arriving in X seconds" instead of just appearing instantly. This gives you the chance to scrap units, retreat, snipe the command station, etc...
    • Thanks to a number of people for requesting including Iocaine, swizzlewizzle, Lord of Nothing and his Inimitable Puffinness
  • Fix a null reference exception in in the Spire Debris notification; could only be hit if you were hovering the notification when the debris vanished
    • Thanks to Endovior for reporting
  • Alarm Posts now also free ships in Guard Posts
    • Thanks to GreatYng for reporting
  • Tidied up some names.
    • Extragalactic Thunderbird is now Extragalactic War Thunderchild.
    • Extragalactic Chimera is now Extragalactic War Chimera.
    • Extragalactic AI Hunter / Seeker is now Extragalactic War Hunter / Seeker.
    • Extragalactic AI Hunter / Annihilator is now Extragalactic War Hunter / Annihilator.
    • Extragalactic Jackalope is now Extragalactic War Jackalope.
    • Extragalactic Mothership is now Extragalactic War Mothership.
    • Extragalactic Planet Cracker is now Extragalactic War Planetcracker.
    • Thanks to Fluffiest for noting some of the inconsistencies.
  • For at least a month or so now, ever since we switched in the linked lists for storing entity lists instead of List<> and ArcenMob<>, and possibly slightly before that, if you were to do a swap between ship lines on a planet with a regenerator golem on it, you'd get a crash to desktop and a ton of extra ships in general.
    • In general, for some time now it has been allowing for various things to happen when you self-kill units (by scrapping or otherwise) that should not have been happening. This includes things like zombification copies being made, entities spawning on death in terms of things like hydra heads out of hydras, dying to remains, and regenerator golems spawning replacement ships. In this particular instance it could cause an infinite loop, but it was problematic in general.
    • There are still various other things that DO need to happen on-death even for scrapped units, like various loss conditions, AIP gains, and so on. And in the past, prior to us making some changes here that have led to this crash, we weren't running those things, which is problematic.
    • The game now does a much better job of telling all the sub-factions and so on what is happening and letting it react properly in the event of death from self-damage. So that solves the most recent problems, but keeps the longer-term benefits we've had for a while now.
    • Thanks to Bob for reporting.
  • Tweaked a couple of things in the "regenerator golem" code so that they should take the proper amount of damage now, rather than too much or too little. They also shouldn't be able to kill themselves anymore by taking too much damage.
    • Additionally, crippled regenerators stop helping at all.
  • Regenerators can't regenerate one another anymore (the AI could have multiple of them regenerating one another).
    • Thanks to Puffin for reporting.
  • The game now has 3 Pathing Modes to let ships figure out which planets to move through. Shortest (always use shortest path), Safest (always take the safest path) and Default (take the safest path unless it's significantly longer than the shortest path, in which case use the shortest path).
    • By default all player commands use the Default mode, but the player can hold a modifier key for the Safest or the Shortest path
    • Note to modders: FindPath() calls now take an extra argument.
    • Resolves pathing problems reported by a number of people, including UFO and Sigma7

Version 2.018 Hotfix

(Released April 6th, 2019)

  • Fix to a bug that was causing some-but-not-all savegames to fail to load in the previous version of the game. Mainly saves that were games started in 2.016 that were being loaded in 2.017. This was to do with fixing the AI reserves missing. Turns out those should not be added in mid-save. Now that no longer happens, but in the other cases where AI reserves were missing, it adds them properly.
    • Thanks to Badger for reporting.
  • Also added in a helpful method on the World_AIW2 singleton object which lets us just quickly write all the factions (invisible and otherwise) to the log.

Version 2.017 GOG Achievements

(Released April 7th, 2020)

  • The Scourge now have some power scalings based on the Overall Power Level of enemy factions. It maxes out at a 10% increase in Neophyte spawning rates if the scourge's enemy factions have an overall power level of >= 5.
    • Thanks to swizzlewizzle among others for requesting
  • Fixed a rare exception that can happen in the fallen spire code.
  • Fixed an issue that could have AI Reserves not appearing in the prior version of the game sometimes.

Achievement Fixes And Improvements

  • The Steam and GOG Galaxy client integrations have been moved out into their own sections of code, and a bunch more of GOG Galaxy integration has been included now.
    • As networking is added via Steam, its code will grow enough that it really needs to be on its own.
  • The GOG Galaxy client now logs you in (if you are logged into that program on your system), if you are on Windows or OSX.
    • This is a prerequisite for both GOG Achievements, as well as for networking through GOG.
  • GOG Achievements now log in the same manner that has worked for Steam -- it's about time we got this in!
    • It took us longer to get into their API than it really should have, but we need this sort of thing for multiplayer anyhow, as well as in general this being great for GOG players in the first place.
  • Steam and GOG now properly only get sent achievements that it doesn't think you've already unlocked.
  • Apparently we were saving the "all time statistics" but never actually loading them. Fixed to just not have them, now, as they contained very little aside from local achievements and that was not working.
  • Added local achievements tracking that actually remembers what the heck you have previously unlocked.
    • This also prevents your achievements from popping up every time you restart the game program and enter a savegame with the conditions for the achievements met.
    • Thanks to GreatYng for reporting.
  • The "resubmit offline achievements to Steam and GOG" code now actually does what you'd expect, since it now logs things offline.
    • We tightened this up a bit, anyway, to make it run a little more efficiently on the main menu.

Version 2.016 Thunderchild

(Released April 2nd, 2020)

  • HRF has received many buffs to their budget, and how they use it
    • Maximum budget increased by 500%
    • Budget per second increased by 450%
    • Minimum budget required to attack increased by 3000%
      • Thanks to the a large portion of the community for their notes on HRF
  • Make the "Enable HRF" hack cost fewer hacking points
    • From a discussion on discord

Extragalactic Surprises

  • The AI will spawn more extragalactic ships at AI difficulty >= 7
    • There's been a good amount of feedback that the spire is too easy.
  • Jackalope and Thunderchild extragalactic war units now make their debut. Expect to run into them when using the Fallen Spire, and potentially with other factions in the future. These are SCARY...

Lobby Fixes And Improvements

  • We're now using the ability to load savegames into the lobby to make it so that every time you open the lobby, it now has the selected options that you last used -- factions and otherwise.
    • This fixes several bugs with things showing values that were not a match to the underlying data, as well as making it a lot more convenient in general.
    • Thanks to ptarth, Histidine, NRSirLimbo, Fluffiest, Ecthelon, and deo for reporting.
  • Added a new Reset To Defaults button in the lobby, which lets you change the lobby back to the default settings and build up fresh again if you want to (now that it instead remembers your settings from last time).
  • The "this is experimental" warning on loading savegames and quickstarts into the lobby is now removed.
    • We're using this pipeline for very central things in a lot of places now, and have beat the heck out of it testing permutations.
    • If you find any problems with it, please let us know and we'll fix that as soon as we can, rather than treating it like an optional side feature.
  • When you load any old savegame or quickstart or whatever into the lobby, it now uses your profile's player color properly.
  • If you try to load an old savegame into the lobby and it has a fleet that is no longer valid (or was from a mod or something that you don't have), it now loads properly and just randomizes the fleet in question.
  • When loading a quick start in general, or a savegame/quickstart into the lobby, it was previously possible to have the underlying map seed be different from the one on the UI, which was confusing for sure.
  • When you are in the lobby and the map regenerates, it now refreshes all the faction data rather than potentially keeping some stale data in there. This solves several problems with it showing out of data info for starting fleets in particular.

Other Fixes And Improvements

  • Fix an exception with the Extragalactic War: Ignore Player-Allied Minor Factions option
    • Thanks to Greatmar2 for reporting
  • Fix a bug where the player overall power level was being miscalculated
  • Fix a bug where the Hacking Menu looked incorrect at game load time
    • Thanks to Arc-3N-4B for reporting
  • Fixed a bug with setting the game mode on background threads where it would crash the game because it was trying to instantiate some planet visual objects on those background threads; that's a main-thread-only thing, and was quite the cascade of things to chase down.
    • In general it now protects it against itself, and waits to do it later on the main thread as needed.
    • We also tidied up some code into separate methods to make it easier to find things that are crashing in this area if it ever happens again, but it should not.
    • Also made it so that it can center on a planet from a background thread if it has to.
  • The game had very old multiplayer sync code that has been partially running in place the entire time (even in single player), and which is very outdated compared to what we want to do in the near future. We've commented out the old in preparation for the new, which will be adaptive and scan some entities/planets at a time; the old method was about detecting wholesale problems as soon as possible and halting the simulation, which is not the approach we're taking with this game.
  • If the game is missing a surrogate table for some reason, it now gives an appropriate visible message rather than just hanging game load.
  • Fixed an exception that could happen when loading certain savegames or quick starts into the lobby for further editing. As part of this, was able to verify that all the custom settings are properly being loaded in properly, too, when loading highly-customized saves.
  • A bunch of added robustness and fixes to some strange edge cases when loading worlds either from disk or across the network, or from savegames or directly.
    • Also some things to robustness in the display of galaxies when things go wrong during this load and you get in afterward.
  • Fixed it so that if you are trying to generate a galaxy with a null map type (possibly by loading a quick start or savegame that is using a map type that no longer exists), then it will choose a random map type and use that instead, rather than erroring and dying.
  • Really fixed a ton of different things that would give funky errors that were hard to interpret if the data was messed up enough.
    • These were all cases where we never have had data that messed up "in the wild," but as we get into multiplayer's alpha we may run into that from time to time and we want to make sure that we are able to have it recover more gracefully.
  • The way that savegames and quick starts and the lobby are loaded under the hood has been streamlined and simplified a lot, and made much more clear.
    • This is good news for them functioning really well with the new ability to load savegames and quickstarts into the lobby, and also very relevant for loading multiplayer savegames and into multiplayer lobbies. This was quite a thing to untangle, but now it makes our lives much easier in the future as we get into multiplayer alpha soon.
  • Fixed a harmless but annoying bug that could randomly pop up when trying to load some savegames and would give the message "ArcenDynamicTable<MercenaryGroupData>.GetRowByName() called with null/empty name"
    • Thanks to Malformata for reporting.
  • Fixed a bug that could happen when trying to load a faction that was referencing a named color that is not installed on the local machine for whatever reason. Whether that's for an expansion or mod, or the color was removed for some reason. It now assigns a random color instead, rather than failing to generate the game.
    • This was interfering with loading the Helping Hands scenarios for some reason in the most recent version of the game if you didn't have the expansion installed.
    • Thanks to ArkTheSpark, minnow990, Vola, and Roadrunner for reporting.
  • Fixed a variety of issues where the game could not load quick starts that were created with expansions enabled if you didn't have those same expansions and there were beacon-enable-able factions in that quick start.
    • The game now is able to deserialize expansion content no matter what by moving the "external data pattern" definitions into the main game, and also by making it so that missing ship entities get a dummy stub created for purposes of deserialization (and then being tossed away).
    • Thanks to Thanks to ArkTheSpark, minnow990, Vola, and Roadrunner for reporting.

Version 2.012 Populous

(Released March 26th, 2020)

  • Fix a bug where allied nanocaust could be hostile for a second or two after loading a save game
    • Thanks to GreatYng for the bug report
  • Fix a bug where Marauder Outpost strength wasn't appearing in the galaxy map
    • Thanks to Parch for reporting
  • Fix a bug where Spire Debris intended for a recently killed AI faction could cause a null reference
    • Reported by Cadbury and Admiral
  • Quiet some dev-only debugging code visible in the Threat window
    • Thanks to the crew of the USS Defiant for the report
  • Fix a crash in the BuildingDronesInternally metal flow planning code
    • Thanks to LCEnzo for reporting
  • Fix a bug where Dyson Spheres antagonized by hacking weren't actually doing anything
    • Thanks to Ovalcircle for a nice bug report with a save game
  • AI Mines on a given planet now decloak once the AI command station on that planet is killed
    • Should be a nice little QoL improvement. Suggested by a number of people, including corfe83
  • Fixed centerpieces occasionally reporting being under self construction, thus breaking them entirely.
    • Thanks to Lord of Nothing and Mayheim for reporting.
  • Exogalactic Attacks are not eligible to come through the Exogalactic Wormhole from Wormhole Invasions until the first other ships have come through the wormhole. It's still very hard, but you can see it coming so there's less RNG.
    • This is primarily for the DLC (since there are a lot more Exos there), but applies to the base game as well
    • Suggestion from Lord of Nothing, with additional bug reports by Strategic Sage and The Puffinster
  • Risk Analyzers now show their intensity-analogue in the Escape menu
    • Suggested by Ovalcircle
  • Remove some deprecated settings
    • Thanks to Sombre and ovalcircle for reporting
  • Fix a bug where Exos could sometimes wind up idle after killing their target
    • Thanks to Lord Of Nothing for reporting
  • Fixed the issue with loading Quickstarts/saves into the lobby, but not playing at all
    • Thanks Fluffiest for reporting, Democracy for testing, and Puffin for helping figure out the issue
  • Fixed a few more achievements that weren't triggering correctly
    • Thanks Lord Of Nothing for reporting
  • Added menu to the debug menu that allows players to select the currently playing music track.
    • Thanks DEMOCRACY_DEMOCRACY for suggesting, as well as Steam user "Micah" and "NB_FlankStrike" for reporting similar requests.
  • Fix a bug where usurpers would sometimes leave planets instead of capturing them
    • Thanks to Ovalcircle for reporting
  • Fixed up the Montserrat-Thin font, which would get very distorted when shown in small pixel space on the game. Now it has enough data in there to render precisely even when very small.
    • This should help in a variety of parts of the interface, but most notably in the chat window when your screen resolution is very small.

Lobby Fixes / Improvements

  • The "can edit presets" debug setting has been removed, and the editing of savegames and presets into the lobby is now supported for everyone.
    • There may still be problems with this that we need to iron out, but we're getting there and everyone should at least be aware of the option.
  • When loading a savegame or quick start into the lobby, it no longer has any problems with "factions that must be discovered" showing up inappropriately.
    • Thanks to a lot of players for reporting.
  • Loading a quick start into the lobby no longer requires you have a campaign name first.
  • The factions that are discoverable in a game, but not yet discovered, are now shown at the bottom of the list of factions as (Discoverable) in the escape menu.
  • Fixed a bug that was allowing you to add more than one Zenith Trader or Devourer Golem or other "must only be one" factions.
    • This had then led to a variety of other bugs after that, but we're less concerned about those since the core thing can no longer happen.
    • Thanks to DEMOCRACY_DEMOCRACY and StarKeep for reporting.

Forward-Compatible Settings and Profiles

  • Made it so that settings files and input bindings files -- from this version onward -- are now forwards-compatible.
    • Aka, if you load a version 2.016 settings file in version 2.012, then it would let you do that. In the past, loading a version 2.012 file in 2.011 would cause it to show an error message and toss out all your settings.
  • The player profile is now stored in an xml format rather than the char field format that it was using before, which allows for hand-editing if we ever need to and is more flexible in general.
    • The player profile also now is forward-compatible from version 2.012 onwards, like the settings and player inputs.
    • Thanks to a variety of players, but including Shnatsel, for suggesting.

Changes for The Spire Rises DLC

  • Shifted the values for Fallen Spire exogalactic-strikes around, resulting in low AIP being stronger, and higher AIP not increasing as much.
    • Big thanks to Astilious for reporting and assisting in sorting out the problem.
  • Fix a bug with the hacking sidebar that was causing numbers not to display properly
    • Thanks to Dominus for doing some useful debugging. Thanks to ParadoxSong and Ranakastrasz for the bug reports
  • Fix a bug where mark 7 scourge would try to refuse to fight by constantly thinking they could upgrade
    • Thanks to Ecthelon for the bug report
  • Fix a bug where player or minor faction allied scourge wouldn't realize that the AI Overlord was a legit target
    • Thanks to ArnaudB for the bug report
  • Fix a bug where the Fallen Spire beacon was available even if the Fallen Spire faction was enabled in the game lobby
    • Thanks to Strategic Sage for the bug report
  • Fix a bug where relic trains could go to the AI overlord early
    • Thanks to Lord of Nothing for reporting
  • Fix a bug where the Imperial Spire Fleet was attacking an invulnerable Overlord instead of destroying the guard posts
    • Thanks to Oryutzen for reporting
  • Exos that kill a Spire City no longer get stuck afterwards
    • Thanks to Lord Of Nothing for reporting
  • The scourge was getting stuck if the only path to any target was extremely well defended
    • This was only happening in very late game scenarios with the fallen spire on for certain map types
    • Thanks to Lord of Nothing for reporting

Macrophage Phase 3 - Multi Phage Takeover

  • The Macrophage are now a credible threat. You can have as many of them as you want, and they are fully capable of eating entire chunks of the galaxy on higher intensities. Be warned.

Base Game Changes

  • You can now have multiple Macrophage per game, and they can have seperate allegiences set.
    • If Spores from different Macrophage factions meet; and there are enough unique Spores on the planet to spawn a Telium, one of the spores at random gets priority for deciding whom the new Telium belongs to.
      • Tamed still has absolute priority.
    • There is still only a single Tamed faction.
      • You are still unable to tame any Macrophage subfactions that are friendly to players.
    • There is still only a single Enraged faction.
      • They will still eat everything.
  • Added in two new spawn options for Macrophage: Lone Telium and Clustered Telia.
    • Lone Telium spawns a single Telium for the Subfaction.
      • This Lone Telium is always berserk, never produces spores, its harvesters are much more defensive, and its harvesters only enrage when it dies.
    • Clustered Telia spawns Telia on half as many planets, but spawns 2 Telia per planet.
      • Added in a new quickstart, the Buggalactic War, which makes use of all the spawning styles.
  • Spawn event costs now scale with the number of harvesters that a Telium owns.
    • Base event cost reduced to 125k Metal. (175k for hostile-to-player)
    • On Intensity 5, the cost is increased by 35% for each (non enraged) harvester owned.
      • This value scales with intensity, being 20% at Intensity 10, and 47% at Intensity 1.
      • Tamed is considered Intensity 10 for this purpose.
  • Spore event chance now decreases by 2% for every Telia in the galaxy.
  • Spore event chance is now clamped between 25% and 75%.
  • Higher Mark Macrophage break and snack for longer.
  • Enraged Macrophage snack on homeworlds for thrice as long as they do other planets.
  • Updated the Macrophage Attacking message to no longer spam the log when you kill a large Telium.
  • Tame Telium hack reduced to 25 HaP cost.
  • Chance for Enraged Harvesters to attack the ai starts at 50%, and increases as your Tamed Telia start to outnumber Wild, up until they reach 90%.
  • Gave a facelift to various descriptions such as hacking and entity appenders.

The Spire Rises DLC Changes

  • When a Macrophage faction gets debris, it will upgrade one of its Telia into a powerful Spire Infested Telia.
    • A Spire Infested Telia is equipped with a multitude of short ranged Reaper beams, and is capable of (slow) movement. Be wary.
      • If you manage to kill this Telia, the Macrophage that its part of will be unable to build new Spire Infested Harvesters until they acquire new Debris.
      • You can optionally attempt to hack it to steal the debris, gaining double the science you would from a normal debris.
        • Perhaps its not the best idea to enrage the already powerful bugs that are more powerful than normal.

Balance Tweaks

  • Halved durability of AI Tachyon Sentinels.
  • Black Hole Machines affect units of engine gx 20 and lower, rather than 14. Crippled units can now leave regardless, preventing possible softlocks. Flagship engine gx reduced slightly to be affected.
  • Black Hole Machine, Raid Engine and Magnifier now die with the Command Station.
  • AI Turrets are now at least 75% of the range of player ones.
  • Added numerous AI Ship Groups.
    • Some things of note:
    • There are 50ish Turret Groups, 37 Strikecraft/Frigate groups, and 14 Dire Guard Post groups all added.
    • Swarmer AI has more variety/difference in what it likes to bring.
    • Fortress Baron is the only AI type to have Mini Forts, as a unique thing for it.
    • Turtle AI has 6x the reinforcement group count as before.
      • These vary as to which AIs they are assigned. More specific AI types don't have all of them, while Full Ensemble has most.
      • Many Turret groups require the first DLC to ever show up, and some groups use both base game and DLC Turrets. If you don't have the DLC, those'll just look like normal mono-Turret groups.
  • Some range nerfs to some Extragalactic units. Range and speed nerf to AI Dragon.
  • Dire Plasma Guardian no longer has Overdrive effect, instead is just a larger Plasma Guardian.
    • Nasty interactions with Fallen Spire, particularly the Great Shield.
    • Thanks to Lord of Nothing for reporting.
  • Upgraded AI Fortress power. Large upgrade to AI Super Fortress power.
  • Increased Stingray damage and durability by 40%, metal cost by 60%.
  • Tripled Ion Disruptor damage.
  • Sentinel Gunboat damage increased 60%, metal cost doubled.
  • Ranger damage increased 60%, metal cost increased 50%.
  • Medic Gunboat now has vampirism, metal cost doubled.
  • Agravic Pod and Aggressor damage increased 30%.
  • Raider and Dagger damage increased 50%.
  • Grenade Launcher Corvette and Molotov reload time 12s -> 9s.
  • Guard Posts and Dire Guard Posts now use the same armour/albedo stats as their relevant Guardian, if they have one.
  • Put a small bit of Dire Guard Post shield into hull, going from a 1:5 ratio to a 1:3.

Balance Tweaks (The Spire Rises DLC)

  • Both Spy Cradles vision range increased by 1, both have very powerful planet wide tachyon systems.
  • Buttress has same durability as normal structures rather than less, requires MK4 city rather than 5, uses 2 sockets rather than 4, has the same effects as a Black Hole Machine, but the gravity part is planet wide.
    • Made the lower tier Extra-Galactic War units susceptible to this.
  • Small tweak to Relic chase force sizes as you progress through Fallen Spire.

Version 2.009 Plenty Of Tuning

(Released March 9th, 2020)

  • Fix several bugs related to forcefields not handling norris effect stuff properly
    • reported by Fluffiest, Xenorius, ussdefiant and gigastar
  • Centerpieces are now always visible even when crippled on both planets and the galaxy map, though still no longer grant vision of anything else when crippled
    • reported most recently by Chthon
  • Add some defensive code to the Overall Power Level code paths
    • Thanks to ArnaudB for reporting
  • When trying to find a random AI faction for things, try to pick a living faction
    • Thanks to GreatYng for reporting
  • Fix a bug with tooltips for units in Fireteams
    • Thanks to a number of people including ParadoxSong for reporting.
  • The icons in the bottom right corner, under the selected ships, no longer try to draw text. That was way too small and thus always hard to read and looked blurry. That happens in any text editor, too. Instead, it just relies on the icons, which are now larger and thus also themselves draw more clearly. There are tooltips for anyone forgetting what they do. The hotkeys for these functions are still shown via text, no problem, though.
  • Fix a bug in the Save Presets code
    • Thanks to ParadoxSong for the bug report and Dominus for the fix

Dyson

  • New Dyson Antagonizer rules
    • Dyson Antagonizers must spawn on Explored planets
    • Dyson Antagonizers are Always Visible, even if you have out of date information about the planet
      • Requested by a number of people
  • Fix the Dyson Antagonizer not respecting the Dyson Intensity for spawning, and spawning much more often than intended.

Marauders

  • Fix a bug where Marauders weren't spawning turrets for their outposts.
  • Hopefully fix a bug where hostile-to-all marauders weren't killing AI command stations
  • Fix a bug where marauder outposts were spawning much too quickly.
    • Net nerf to the marauders; they require much more time to scale up after capturing a planet. I've heard some complaints that the marauders are really getting out of control quickly, and that should no longer be possible.
    • Thanks to the crew of the USS Defiant for reminding me about this

Spire Rises changes

  • Further clarify the description text on the AI Spire Research Lab
    • Thanks to Lord Of Nothing for reporting
  • Spire Debris is no longer allowed to join fireteams
    • Thanks to Smaug for reporting
  • Prevent multiple Spire Cities from being built on the same planet.
    • Thanks to Ovalcircle for reporting
  • AI-allied scourge at intensity > 5 have a chance of building an additional guard post next to any spawner or armory they create. Should make trying to attack the scourge infrastructure a bit more challenging. This code is readily expandable to spawning other AI structures as well if desired
    • From a conversation with a particularly depraved Peltian sympathizer
  • Make doubly sure that spire relics can't spawn on AI homeworlds
    • pointed out by XTRMNTR2K on steam
  • Improve player-allied scourge target selection in the mid/late game
    • Thanks to Ecthelon for a useful save game for debugging
  • If the Imperial Spire Fleet detects your home planet is under attack, they will prioritize defending it
    • Thanks to ArnaudB for the bug report
  • Add additional debugging code to the Spire Sim code
    • Thanks to Admiral for the bug report

Version 2.008 Transport Loading Hotfix

(Released March 4th, 2020)

  • Fixed a bug where ships would unload properly from transports, but never load into them again, in the prior version.
    • This was a casualty of the many changes we made in order to facilitate the performance improvements, but was quick to fix once people reported it. Apologies for that and anything else that crops up!
    • Thanks to Strategic Sage and Daniexpert for reporting.
  • Imperial Spire vessels are now MK7.
  • There is now extra debugging information shown visibly if the fallen spire actually has an issue.
    • Before it would just silently spam the log.
  • When a unit is trying to transform and it is in an invalid state, it now gives a more clear error message.
  • When centerpieces die, they are now blanked out properly; previously it held onto them in a dead format but mostly-removed, and this could cause some funky errors in the fallen spire in particular, but possibly other places eventually.
    • This was something that the squad wrappers we used to use automatically filtered for, so that's why it pops up now but not previously. It's a lot more efficient the new way, but we needed this extra check for this strange edge case.
    • Thanks to Puffin for reporting.

Version 2.007 Speed Boost

(Released March 4th, 2020)

  • When hovering a tech line in the science sidebar, it now lists the ships lines to be upgraded first by mobile ships, then by turrets, instead of always in alphabetical order
  • If remains cannot be rebuilt for some reason, it now shows the reason in the hovertext for those remains. This fixes a lot of ambiguity!
    • It also includes the countdown timers for things that can't be rebuilt for a certain amount of time with/without enemies.
  • Improved the priorities of repairs and other metal expenditures so that it makes more sense. Command stations with next to no health will now be prioritized extra for repairs even if there's a big ship to complain.
    • In cases where there was a giant golem to expensively complain, it often would not let you even choose to override that and spend metal on repairing the command station. Now that works properly, and at least some engineers will break off to repair things even with a giant capturable there.
    • Thanks to Smaug for a savegame where the command station was just impossible to repair while the unclaimed golem was still present.
  • The 'cancel hack' popup now reminds the player that you still pay the full hacking points value

Bugfixes

  • Remove a debugging line related to Dyson Spheres that was left enabled by accident
    • Thanks to a number of people for reporting
  • Make it much harder for structures to start to rebuild themselves mid battle.
    • Thanks to Ubifan for reporting
  • Fix a very long-standing bug where the Threat Count in the resource bar was sometimes counting Warden or Praetorian units
  • Fixed Fleet Centerpieces vanishing from the galaxy map if they were crippled, then moved to a planet that was only Explored.
    • Thanks to Ubifan, Daniexpert and Histidine for reporting.
  • Fixed a bug where command stations still under construction could still help with claiming other ships.
  • Fixed a really longstanding bug where ships that were overkilled that were in a stack were not rolling over their damage properly.
    • They actually were winding up over-healing the health of the next ship in the stack, not causing over-damage.
  • It was somehow possible to have ships with zero health that did not die, seemingly only since the other performance improvements below but frankly the code was pretty unrelated to the area we can think of.
    • These now automatically re-check for dying within the next sim step, and do so properly. This is a nice safety net in general to have, we suppose.
  • Fixed an issue where it would usually return a spurious "." at the start of type names it could not find.
  • When PerFrame_CalculateEffectiveFleetData on fleets has an exception, it now gives more info on where that happened.
    • Fixed an exception that could happen due to centerpieces not fully deserializing into their fleet lines properly. That only seemed to matter for drone producers, but it was a thing.
      • This fix also fixed a common thing that could happen when exiting out of really large savegames to the main menu.

Performance Improvements

  • Improved performance slightly on player planetary fleets without a centerpiece (aka command station), to basically not do all the checking and counts for them. Every planet has a fleet like that for every human player, so doing some checking like that on all of them was a mild expense that was not worth it.
  • Put in some more debugging variables that let us turn off more parts of the simulation to find performance hotspots.
  • Moved some logic for entity removal to be slightly more centralized, which makes it less common and also thus something that doesn't ever accidentally add the same entity to a big list more than once. There is some performance gain from this, but it's not huge in the current scheme of things.
  • SquadCountsByType is now an int array rather than an ArcenSparseLookup, which makes it much much faster.
  • MetalIncomePerPlanet_ForUI and EnergyProducedPerPlanet_ForUIOnly have become simple integers on the actual planet, and are handled in a much more efficient fashion since they are local-player-UI-only.
  • Added a new ArcenLinkedList<> class, which is a new specialist collection that is thread-safe, multiplayer-safe, and extremely high performance to iterate over, add to, and remove from.
    • We're replacing all instances of ArcenMob<>, and the rollup uses of List<>, with this new class.
    • This sees a massive improvement in speed in a lot of savegames, and the removal of micro-stutters relating to entities being removed from lists in general. This also sees a big improvement in how quickly you can get back out to the main menu.
    • It's a lot of code changes, though, so it's always possible we made some sort of mistake in this and are causing a new bug somewhere. Fingers crossed that's not the case, but the places it would be a problem are usually central enough that it should be wildly obvious. So far we're not seeing that.
    • Thanks to zeusalmighty for the savegame that helped us pinpoint the fact that ship/shot removal was being the biggest performance drain at the moment. His savegame went from a choppy 45-55% performance to smooth 100% performance.
  • Revised the Fleets class to no longer use Squad Wrappers, but instead to directly use squads.
    • This causes a slight performance boost in general, and will allow us to use performance-boosting collections that don't work on structs like SquadWrapper.
    • There's also the possibility for some errant bugs here and there, but we think we caught all of those, as they followed a specific pattern.
  • The list of ships inside each fleet membership are now handled via the new linked lists rather than normal lists, extending the speed benefits to them.
    • Most of the "performance trouble" saves that we've collected over the last months now run at full speed, where some used to run at 5%. A couple still only run at about 80%, but those are by far the minority.
      • It is worth noting that just starting a new game at 300 planets will put you immediately at 70-80% sim speed right from the start. Apparently there is something we're doing that is still inescapably planet-bound in terms of calculation cost, even though the number of ships is 1/3 or less of that of much beefier later-game saves that now run at 100% speed. We may need to lower the max number of planets in any map to being more like 140 or so.

DLC changes

  • AI extragalactic response no longer counts its own scourge allies when deciding whether to spawn extragalactic war ships
    • Thanks to Strategic Sage for the bug report
  • Make the Scourge Beacon Hack more costly and harder
    • Thanks to Strategic Sage for the suggestion
  • Awakened Scourge allies should show up in the escape menu now
    • Thanks to vinco for the bug report
  • Fix a bug where the Imperial Spire wasn't pressing home its attacks
    • Thanks to Astillious
  • Fixed the new Arks being unable to rebuild remains.
    • Thanks to Ryulong for reporting.
  • The Objectives for killing the AI Spire Citadel/Research Lab only appear once you have Explored those planets
  • There is now a Spire Beacon, and hacking it activates the Spire Quest.
    • This is only available for new games, it's not retroactive
    • Thanks to SCUD on steam for reminding us about this.
  • The Scourge's Overall Power level can now go up to 1.5 if it has a Nemesis
    • Only relevant for player or minor faction allied scourge

Balance Tweaks (The Spire Rises DLC)

  • Increased durability of Scourge Spawners and Armouries by 50%. Added Forcefields to both.

Balance Tweaks (Base Game)

  • Raid Frigate, Bounty Hunter and Apparition mass 4 -> 5.
  • Raid Frigate damage 5,000 -> 3,500.
  • Dyson and Dark Spire units are immune to being captured.
    • This solves some nasty faction interactions, such as an AI Wendigo finding a nice tasty group of Dark Spire to eat, or the Nanocaust gaining enormous hordes of units.
    • Also fixes some possible player shenanigans using Hacks.
      • Thanks to ArnaudB for reporting a Dark Spire and Nanocaust incident, Histidine for reporting a Wendigo problem, and Fluffiest for suggesting (all separately).

Version 2.006 Hotfix

(Released February 29th, 2020)

  • Viral Shredders now inherit pursuit mode
    • Thanks to Ecthelon for the bug report
  • Quiet some text in the galaxy view hover-planet view. We don't want planets being suddenly Nomadic or anything...
    • Thanks to Fluffiest for reporting
  • Improve the hovertext for AI Spire Research Labs to clarify that they violate other city placement rules
    • As a result of some discussions on discord
  • Fix a bug where you couldn't build Spire structures if the Spire Flagship (but not the city) was crippled
    • Thanks to WolfWhiteFire for reporting
  • Tweaks to the Spire Debris; Debris can no longer be captured by another faction while you are hacking it. The Spire Debris spawn message now shows the correct time that the debris will last for the first debris.
    • Thanks to Vinco for reporting
  • Add some additional debugging code to PreFillFactionBasedData.
    • Thanks to Binary Blitz for the bug report
  • Fix a bug where Outguard hacks were causing the hacking history menu to crash. Add some defensive code there too
    • Thanks to Strategic Sage's thot bug reporting ways
  • Improve the 'ai stops doing anything once it's killed' code to make sure that Anti-MDC exos are no longer spawned after the Overlord is killed
    • Thanks to GreatYng for the bug report
  • You now know which faction will capture Spire Debris if you don't get to it in time. This lets you make informed decisions about which debris you want to prioritize.
    • You also get 3 debris per City instead of 2.
    • Suggested by Starkelp
  • Fixed Viral Shredder copies being swappable, allowing for infinite lines in a single Fleet.
    • Thanks to Lampshade for reporting.
  • Put in defensive coding against some rare nullref exceptions that could happen during some combination of scourge and fallen spire, but which we weren't able to directly duplicate.
    • Thanks to ArnaudB for reporting.
  • Removed the maximum Mark restriction set on Battlestations, Citadels, and Home Forcefields.
    • They now go to Mark 7 like normal.

Version 2.005 Hotfix

(Released February 28th, 2020)

  • Fixed an invalid cast exception that could happen in GetScourgeGlobalDataExt for unexpected reasons if the scourge had wrong metadata for some reason.
  • Definitely fixed the minor capturables exception in mapgen, so that even if it ever happens in the future (even mods could validly cause this), it will just silently log a note in case developers need it, but keep everything on the interface running smoothly. The actual error in this case was related to an expansion, but a mod could easily cause the same thing, and in neither case is it actually a bug or something to notify the user about.
    • Thanks to Jodan008 for letting us know this was still happening.
  • Fixed an issue in the most recent hotfix related to dyson antagonizers not being found.
    • Thanks to ArnaudB and Yog-Sothoth for reporting.

Version 2.004 Hotfix

(Released February 28th, 2020)

  • Fixed units with ShouldNeverBeCapturedByAnotherFaction set to true, such as Tesla Torpedo Frigates, from being loaded into Transports.
    • Thanks to Ubifan for reporting.
  • Clarify the Scourge Neinzul Fortress text to mention that it produces hostile to all zombies
    • Thanks to vinco for reporting
  • Fixed a mapgen error that could happen for people without the new expansion installed. Apologies for that!

Version 2.002 Turret Icons

(Released February 27th, 2020)

  • All 30 of the new turrets now have updated flair denoting what they are. Definitely important for seeing from a distance and in the sidebar what they are!

Version 2.001 Expansion 1: The Spire Rises!

(Released February 27th, 2020)

Prior Release Notes

AI War 2: The Grand New AI