Difference between revisions of "AI War 2:The Era of Discovery"

From Arcen Wiki
Jump to navigation Jump to search
 
(507 intermediate revisions by 6 users not shown)
Line 1: Line 1:
== Known Issues ==
+
== Next Release Notes ==
* The lobby interface is currently temporary, and undergoing a complete overhaul.
 
  
* Beam-weapon style shot graphics don't yet display, and a couple of AOE effects don't show quite correctly yet.
+
[[AI War 2: Pre-Early Access Polish]]
  
* Various bugs on mantis: https://bugtracker.arcengames.com/view_all_bug_page.php
+
== What was this phase all about? ==
  
* Balance needs a lot of attention, with your help.
+
Initial thought process was described on Steam: [https://steamcommunity.com/games/573410/announcements/detail/1732082664630714967 "Retrieval of the Lost Arks" Plus an Essay, Apparently.].
 +
 
 +
Ultimately what this phase turned into was a polish phase as well as a big drive for new content and mechanics that would be easier for players to understand.  The procedural elements we were toying around with wound up being discarded (at least for now), but we added a lot of content.  We mapped out even more content we WANTED to add during this phase, but it will need to be during a later phase instead, at this point.
 +
 
 +
== Version 0.778 I'm Talking To HIM, Not You! ==
 +
(Released October 2nd, 2018)
 +
 
 +
* For the first time, you can actually give direct orders to your engineers, rebuilders, etc to assist specific units: rebuilding them, repairing them, or permanently sticking around to boost their build queue.
 +
** If you explicitly tell an engineer to assist a space dock or starship constructor, it will keep hanging out there to boost that unit FOREVER, until the target of assistance is dead or you give them other orders.
 +
*** THAT said, unlike the first game, if there is nothing to boost on that target at the moment (dock has an empty queue, potentially because unit caps are hit), then the engineers will maintain position while repairing or boosting other things instead, while immediately switching back to boosting the dock as soon as it is able to do anything.
 +
*** This is actually a lot more flexible/useful than the first game, but in general the logic is the same when you want to have "engineers that perma-boost a dock" for speed purposes.
 +
** Thanks to Bummeri and others for being patient while we implemented this.
 +
 
 +
=== Bugfixes ===
 +
 
 +
* The intro story screen should ACTUALLY be updated properly now.
 +
 
 +
* Fixed an issue with a drunk pilot on the main menu clipping the top of the gas giant.
 +
 
 +
* Fixed an issue where we were often sending commands as related to the local player when really they were not.
 +
** There is now a much more explicit GameCommandSource that is passed, which should make it more obvious when we are making that sort of error in the future (and hopefully prevent us from doing so).
 +
** The was the source of the errant click and beep noises that sometimes people were hearing.
 +
 
 +
* Orders now track if they were explicitly issued by a human or not -- meaning if a human literally clicked to cause them, NOT if they were the result of a policy the human set up, etc.
 +
** With this in hand, the game is now able to properly say "don't do anything automated until you stop doing what the human told you to do" to units that are in FRD mode (whether those are engineers or otherwise).
 +
** This will solve the issue of FRD-mode ships absolutely not listening to you when there are enemies on a planet.
 +
 
 +
* Fixed a bug in the prior version of the game where the tutorial, and any messages that showed up in the "ongoing messages" display on the right side of the screen, would all show a general buggy message.
 +
 
 +
* Split out the various parts of the big switch statement in EntitySimLogicImplementation, since there was a note in there that under certain circumstances code could fail to break and instead jump down a switch level.
 +
** This could in theory fix some sort of bug with the rally code, if the code-commenter was correct.  It didn't break anything, so just let us know if some sort of rally-based issue seems fixed!
 +
 
 +
* Fixed a divide by zero error that could happen in the instigator tooltip.  It seems to be an issue with them not actually assisting their faction at all, or their faction not having budgets properly, but at any rate it no longer will error.
 +
** Thanks to JAlfredGoodwin for reporting.
 +
 
 +
* Found and fixed a REALLY nasty bug that was causing entities to get their orders confused and do all sorts of insane things.
 +
** This was a cross-threading issue where two different threads (short term planning and AI order reevaluation) would be both clearing out dud orders and putting the same order back into the pool multiple times.
 +
** Now it is a lot more careful with how things go into and out of the pool, using the appropriate multithreading locks, as well as making it so that in the (very frequent) even that two orders try to go back into the pool at once, it only puts them in there once.
 +
** There is also a lot more error checking and logging in there that throws out clearly-bogus orders and throws visible errors when finding an incorrect case.  This is a lot better than it just getting subtly incorrect in a quasi-hidden way!
 +
* Thanks to an awesome savegame by zeusalmighty, and reproduction instructions by Badger, we found these.  Also thanks to FFace, brianc, HeartHunter7, and RocketAssistedPuffin for reporting.
 +
 
 +
* In a spate of even further caution, we're now using our custom TimeBasedPool class for our entity orders, with a timer of 1 second on them.
 +
** This removes our ability to use locks, but also our need to.  This ensures that no entity order will ever go into the pool and come out of the pool on multiple threads at once, if we have multiple requestors and putter-backers.  Essentially this waits until a period where only one can-touch-orders thread is running, when the second ticks happen, and then only moving them from the "put" queue into the "get" queue at that time, internally.
 +
** At the moment this seems to work about the same as the locks did, and the performance should be similar.  It should remove all possibility of the wonkiest sorts of race conditions actually manifesting, though.
 +
 
 +
* In a spate of further (justified) paranoia, the entity ship-to-ship lines, and the planned metal flows, have been hardened against the sort of multi-threaded pool-area shenanigans that have plagued entity orders until recently.
 +
** The planet faction pool was examined and found not to be vulnerable (since those are only reused between campaigns, not during a single campaign), so that simply got a note in there saying if the usage changes (very unlikely) that they should be switched to TimeBasedPools like the others are.
 +
** This should prevent any funky issues with metal being allocated strangely, or things building too slowly or whatnot, or the visuals for beam weapons getting strange.
 +
 
 +
== Version 0.777 First Impressions ==
 +
(Released October 1st, 2018)
 +
 
 +
* Add some extra Schematic Servers and Data Centers for very large maps (> 140 planets)
 +
** Otherwise there will be lots of the map with nothing interesting in it.
 +
 
 +
* Tweak hacking mouseover to look more presentable
 +
** Thanks to HeartHunter for the report
 +
 
 +
* Instigator base tooltips now show the budget increase in percent rather than internal AI budget number
 +
** Thanks to Kesseleth for prompting
 +
 
 +
* Add the ability to hack Schematic Servers to get access to a different Tech Type in that server.
 +
** Currently untested
 +
 
 +
* The game now runs a release version of itself instead of a development mode version.
 +
** This gets rid of the Development Mode notice in the bottom right corner, but also means that we no longer get line numbers for any errors that pop up.
 +
** The line numbers thing is less of a crisis now that so much of our important code is in external dlls that don't work with line numbers anyhow.  We still get stack traces, and this just means we have to use the debugStage approach everywhere now.
 +
** This also means that the old AIWar2_Rel version of the game is gone from the install folder, since it would now be redundant.
 +
 
 +
* You can now click wormhole names as well as the actual wormholes themselves in the planet view.  This makes them vastly easier to click.
 +
** Thanks to a lot of players for hounding us (rightly so) about this for a long time!  Especially dv = i ln(w0 / wf), Badger, and Kahuna.
 +
 
 +
=== Visual Improvements ===
 +
 
 +
* The visuals for the assault starship have been completely replaced.
 +
** Other things that were using the assault starship graphics still do, however.  Some of them will keep the old graphics permanently.
 +
 
 +
* The Dyson Sphere background has been drastically improved in appearance.
 +
 
 +
* Ten new planet visual styles are now available for show in the background of the game!
 +
 
 +
* The backgrounds and planets are now once again being drawn in their own camera that is layered under the main camera, which prevents large ships, forcefields, etc, from ever visually clipping into planets.
 +
 
 +
* The sentry starship has been completely redone from scratch, and now looks much cooler.
 +
 
 +
* The Spire have a completely new look, and the spire frigate has been redone from scratch.
 +
 
 +
* The Dyson ships (all of which are spire-themed) now have real graphics for the first time, and a quite cool translucent look.
 +
 
 +
* The fortress has a completely new look, much more angular and intimidating.
 +
 
 +
* Wormhole graphics have been replaced by a particle system, since the old style of graphics were having layering issues that were ultimatley intractable.
 +
** The font above them is also improved now, while we were at it.
 +
 
 +
* The main menu has been completely reworked, in terms of what the background scene looks like and the colors of the background as you are loading into the main menu.
 +
** It will probably see more changes in the future, that's how this tends to go.  But it's a lot more attractive for now, which hopefully helps set the tone at the start of the game better, in terms of first impressions.
 +
** Note that the actual menu part isn't adjusted at all yet, just the background.
 +
** Oh, and the logo shows as all white now, as if it were just a flat sprite (it's still a 3D model, though, so it draws more crisply).
 +
 
 +
=== Balance Tweaks ===
 +
 
 +
* AutoBombs damage increased from 90 to 130, now has a 2x multiplier against 80mm armour and below, increasing by 0.5x per mark.
 +
 
 +
* Temperamental and Fragmenting Guardians will no longer spawn in any offensive action (Wave, CPA, etc) and only as reinforcements.
 +
** It was weird to get Eye-mechanic ships attacking your planets...you could never snipe them or anything of the sort before they triggered.
 +
 
 +
* All turret health halved, energy cost for all but the Heavy Beam Cannon reduced by 100GW.
 +
** These were...honestly, stupidly tanky. Their strength due to automatic calculation is now lower as well, so the AI won't quiver in terror at a dozen turrets.
 +
 
 +
* Autocannon Minipods health increased from 400/400 (Hull/Shields) to 600/600. Metal cost reduced from 1500 to 1200, now have a 2x damage bonus against things with 100mm armour and higher, increasing by 0.5x per mark.
 +
** Intended to kind of swarm and gun down tougher single ships, like some of the Nanocaust (albeit easily infected) and Dire Guardians.
 +
 
 +
* Eyebots health is now 1000/1000 (Hull/Shields), and they gain a 3x damage bonus against targets with at most 600 energy consumption, increasing by 1x per mark.
 +
** Fairly experimental. Meant to be kind of Sniper/Sentinel Frigate hunters, though they do get bonuses against...most fleetships, actually. See how they go!
 +
 
 +
* Concussion Guardians and Guard Posts now have a range of 18,000, instead of 30,000.
 +
** Were often able to cover the entire planet, more a trait of Sniper types. Also fairly obnoxious when attacking.
 +
 
 +
* Nucleophilic Guard Posts damage multiplier reduced from 6 to 3 to bring it in line with similar units.
 +
 
 +
* AI Guardians strength value increased by 50%, Temperamental and Fragmenting increased by 500%.
 +
** Too many of them. Especially the Temperamental and Fragmenting, which were being bought incredibly cheaply and en masse.
 +
 
 +
* Add a per-difficulty 'Percent Wave Strength that's allowed to be Guardians' tunable, which right now caps out at 45% for difficulty 10
 +
** Thanks to Kesseleth for the bug report
 +
 
 +
* Gryn, Void Home now has a starting build rate of 5000, up from 2000, and gains 2500 per Mark, up from 1000.
 +
** Thanks to Kesseleth for trying to push this Ark and...finding it falls flat. Hope this helps the regret issue!
 +
 
 +
* All Arks starting weapon has far higher damage - generally between 3000 and 4000.
 +
** I imagine these might need tuned again, but it'll do for now until more data comes in. They won't break the game or anything.
 +
 
 +
=== AI Types ===
 +
 
 +
* All current AI types now have their appropriate ships at game start, with the exception of Starfleet Commander.
 +
** Will get to him soon.
 +
 
 +
* Add new AI Type 'Turtle' that spends most of its budget on Reinforcement
 +
 
 +
* Add new AI Type 'Quadratic' that doubles its wave Interval each time (leading to doubled wave strengths). Just like AIWC.
 +
 
 +
* Rename "Salvage Master" to Overreactive to match AIWC
 +
 
 +
=== Bug Fixes ===
 +
 
 +
* Fixed a bug that was causing schematic servers to often have duplicate items to grant to players.
 +
** This will also retroactively fix old saves.
 +
 
 +
* Improved some of the initialization code so that it will always put entities in their proper rollups based on all their data being calculated for sure by the time it is needed.
 +
 
 +
* Fixed a bug with the dynamic zoom levels on the galaxy map where if the galaxy was taller than it was wide, it would not give you quite sufficient zoom out.
 +
** Thanks to Ovalcircle for reporting.
 +
 
 +
* Major surgery in part of the ui code, specifically relating to "when to tell something to draw."
 +
** Previously it was telling things to draw, once when it was time to change states, and then assuming it would actually DO that and thus it could not bother telling it again until things changed.  Aka, "draw yourself until I say otherwise."
 +
** Unity UI has a "fun" thing, however, where if an element is a child of a disabled element, then telling it to draw won't properly flip it's internal flag.  Apparently.  There may be some other funkiness in there, too.
 +
** At any rate, there was quite a bit of "huh?" and "I didn't hear you" going on in the sidebar in particular, leading to things updating slowly or not at all.  Things like the objectives menu getting garbled when you had more elements added, or things like space docks beyond the third not displaying unless you went to another planet and back (and sometimes not even then).
 +
** Now we just take the approach of saying "STAY ON" every frame, or "YOU BETTER BE TURNED OFF NOW," as the case may be.  Turns out that's just the sort of special tone the Unity UI requires in order for it to do its job.  Yes, the snark is heavy, but this has made life intermittently frustrating for the better part of a year.
 +
** The concern with this method had been that us telling hundreds or thousands of ui controls STAY ON or BE OFF every frame would be a performance hog.  We would have to trust that the Unity UI itself had an "early out" in there saying "I'm already on, we're good" and thus not doing a whole bunch of work whenever we say STAY ON and it's already on.  It seems that is the case, happily, because we still get 180+ fps in our test case with plenty going on in the UI.
 +
*** It's also worth noting that since our UI is hierarchical by nature, we wind up doing a lot fewer of the STAY ON calls than we had been thinking might happen.  A lot of things early-out at the window/canvas level, and don't go any deeper than that, which makes the actual number of redundant calls per frame far lower.
 +
** What we did NOT expect was that this would bork up various of our GUIs, most notably the main menu, tooltips, and a few other floating text windows.  We had to normalize how those windows report "I should be on" or "I should be off" to match the technique of the rest of the windows.  Now they do, and so it all works fine.  But that did lead to some rewriting of bits of the tooltip display code, which makes how they turn on have a slightly different delay than before.  Possibly faster?  The sidebar reacts faster, for sure.  Some of the tooltips might be slightly slower to react.  We'll sort it out later, because it's pretty close to what it was before.
 +
** The TLDR, at any rate, is that the UI actually does what we tell it now, so far as we can tell, and there aren't random missing elements on the sidebars, or elements that draw over and under other elements until you switch tabs and back.  (Now the things that still draw wrong, draw wrong consistently; which is much easier to fix as well as far less prevalent!).
 +
 
 +
* Makes Dark Spire Vengeance Generators immune to all damage.
 +
** Thanks to HeartHunter for yet again, being the only one to actually try shooting something that says invulnerable on it.
 +
* Background story text is no longer garbled.
 +
** Thanks garpu for noticing!
 +
 
 +
* Hopefully make Science and Superterminal hacks work correctly.
 +
** A number of people have complained about this
 +
** Some extra testing to make the UI makes sense would be desirable.
 +
 
 +
* If the AI has queued up a wave from the Exogalactic Wormhole (which is legal), reflect this in the wave notification tooltip
 +
** Thanks to hearthunterfor noticing
 +
 
 +
* Make some improvements to Instigator Base tooltips and calculations
 +
** Thanks to Kesseleth
 +
 
 +
*  Fix a bug where Dark Spire units were being really boring and sitting around because they would think that they were in combat with Cloaked units
 +
** Thanks to HeartHunter's save game for letting me notice
 +
 
 +
== Version 0.776 A Legible Galaxy Map ==
 +
(Released September 28th, 2018)
 +
 
 +
* "Change Profile" under the "More" dropdown in the main menu now edits the profile you made at the start of the game. The same thing can be done by clicking the name of your profile at the bottom of the screen.
 +
 
 +
*  Add a BudgetSpending trace class so we can figure out why HeartHunter reports such weird wave timing.
 +
 
 +
* Fixed typo in Super Terminal description.
 +
** Thanks to Ovalcircle for noticing.
 +
 
 +
* There are now proper icons for all the various types of notifications at the top of the screen.  The text overlap is still there (that's to be fixed very soon), but now you can see if it's an astro train moving around or the macrophage or whatever, without everything using the "your home planet is under attack" icon.
 +
** Now if you see that home planet attack icon, you should really pay attention!  That icon shouldn't be up there if you're defending yourself well... ;)
 +
** Thanks to Badger for setting all these up!
 +
 
 +
* There are now all-new wave icons.  Well, they all use one of the icons that previously we had, anyway.  But then there are four variants of those, for regular, home planet, reconquest, and reprisal waves.  Since they all share the same base icon now, they are much more recognizable.
 +
** Additionally, if a wave is being directed at a non-player faction, these same icons will show up grayed out instead.  Note that if a different player in multiplayer is attacked, then it still shows up with the normal brightness because you should care!
 +
** Also note that for reconquest waves, those never show up grayed out because those are always aimed at a planet not under current player control.
 +
** Thanks to Badger for setting all the innards of these up, too!
 +
 
 +
* You will only get a "Planet Under Attack" notifier if Mobile enemy units are on that planet. If there are stationary enemies then you knew about them when you captured the planet. The most common case here is Shield Generators you haven't killed yet.
 +
** Thanks  to HeartHunter for the impetus for this
 +
 
 +
=== Proper AI Guard Aggro ===
 +
 
 +
* If a human player ship fires on a guard or something that has guards, then the guarded-thing and all its guards should now be immediately aggro'd. A quick test from Badger indicates that it is a giant improvement. There may still be some corner cases, but it's much better now.
 +
** Thanks to Badger for suggesting an approach.
 +
 
 +
=== Galaxy Map Improvements ===
 +
 
 +
* The galaxy map now uses the same sort of icons that we use in the planet view and sidebar rather than 3D models.
 +
** This lets you actually see the planet ownership color WAY more clearly.
 +
 
 +
* There are now different icons for if a planet is un-owned, owned by a mark 1-7 AI, owned by a non-AI (player or NPC), unscouted, or a homeworld for the player or AI.
 +
** There's also a version of each of these for "I have visibility here now, or I don't," which lets you know what you scout coverage is.  Theoretically -- that aspect still needs a lot of work.
 +
 
 +
* The planet name and description text fonts have been improved a lot.
 +
 
 +
* The icons and text of the planets no longer scale up and down as you zoom in and out.  This makes them far easier to evaluate in terms of what is attached to what planet.
 +
 
 +
* The galaxy map camera now actually does scale up the planets and their associated text and sprites, but it sizes them up all as one unit that makes them not remotely so confusing to deal with as they were in the prior versions of the game.
 +
 
 +
* Additionally, once you pass a certain zoom level (configurable in xml), it now starts hiding the special entity icons, and then shortly after that if you keep zooming it stops showing the side text as well.
 +
** Basically if you zoom out that far, things get too crunched together and illegible anyhow, is the idea.  There might be some debate on what level those kick in as far as being issues, but they should be pretty safe values for now.
 +
** The function of being very very zoomed out is thus about seeing where there are planets and who owns what, rather than trying to read all the little numbers or see all the little icons.
 +
** This was another excellent Eric idea that only became possible recently.
 +
 
 +
* The planets on the galaxy map are finally attractive as well as actually something that you can tell if you have visibility on them at the moment or not, AND easily what mark level they are if they are AI-controlled.
 +
 
 +
* The zoom levels on the galaxy map have been completely reworked, allowing you to view things closer and keeping things tighter on the zoom-out.
 +
 
 +
* The apparent distance between planets is now twice as large, making it so that planets don't visually overlap as much.  In the mapgen code, nothing is different, but our actual planets draw at half the size as before and you can zoom in roughly twice as much now.
 +
** Thanks to Mckloshiv and many others for reporting the overlap that previously would happen.
 +
 
 +
* The "lower down text" on planets is now a "left text" and "right text" instead.
 +
** This keeps things nicely organized in a way that Eric has been suggesting for a while, but that Chris didn't think he could do when the scales of the text and icons and whatnot were changing all the time.  That math would have been really tricky, when combined with the 3D objects from before.  Now it's trivial, so we have Eric's superior design in place.
 +
 
 +
* The "ships of note at this planet" now show up below the planet, centered and then filling in in two rows of 3 at most.  In older versions of the game we could only display 4 items at a planet on the galaxy map, and they were way off to the upper left of the planet in a really confusing way.
 +
** Thanks to dv and others for suggesting improvements.
 +
 
 +
* On the galaxy map, when it's showing allied or player strength next to a planet, it now shows first the mobile strength on one line, then the rest of the strength on the next line.
 +
** Thanks to dv = i ln(w0 / wf) for suggesting.
 +
 
 +
* On the galaxy map tooltips for planets, instead of just showing "enemy strength," it now shows the same information that the normal text to the left and right of the planets now do, just written out fully.
 +
** This way you can actually figure out what those numbers MEAN, since this shows the same values but with the text written out.
 +
 
 +
* Updated the galaxy map zoom to be dynamic, so that it allows you to zoom out enough to view the entire galaxy map, whatever that size may be.  This allows for us to have full flexibility in laying out galaxy maps however we want without zoom becoming an issue.  Particularly important when we're trying to do something like ensure that planets are never so tightly packed together that their text overlaps.
 +
 
 +
* Double-clicking planets in the galaxy map view now immediately takes your view into them.
 +
** Note that you can also hold Ctrl and then left click planets to do the same thing if you wish.
 +
** Thanks to Kahuna for suggesting.
 +
 
 +
* In the galaxy map, hovering over any ship type or ship icon in the left sidebar (ships, docks, build, or science tabs) or underneath a planet in the main view, will darken all planets that don't have one of those on it (or that you don't know of having one on it).  It does not differentiate by faction.
 +
** You can use this, for one example, to quickly find all your scouts.
 +
** You can also use this, as another example, to quickly see all the planets that have fleetship schematic servers (that you've discovered).
 +
** Reminder: holding shift will suppress the tooltips, making it easier to see the planets that have darkened.
 +
 
 +
* Hovering over objectives on the sidebar when you are viewing the galaxy map now darkens all the planets that are not related to that objective.
 +
** This is highly useful, because then you can easily see where things are on the galaxy map without having to hunt through icons.  You can simply look by category in the objectives section and easily plot your personal plans without having to zoom in and out a bunch, too.
 +
 
 +
* All of the objectives in the sidebar now have one of the following behaviors when hovered-over:
 +
** Highlight/darken no planets (rare; refers mainly to things that could be anywhere and everywhere, like a nanocaust invasion).
 +
** Darken all planets (not super common; refers mainly to things that don't have a specific location in mind, like spending science).
 +
** Highlight a specific planet (common; the objective is clearly on a single planet and this is the one).
 +
** Highlight all planets with a specific entity type on them (common; all the places that can be hacked a certain way, for instance).
 +
** Highlights all unexplored planets (common; "explore galaxy for xyz" items and "find the overlord" items all do this).
 +
 
 +
* The lines in the galaxy map now draw much thicker, and scale up appropriately as you zoom out.  Overall this makes things vastly more visible.
 +
** There is also more contrast now between the color of "just regular lines" and "lines that represent a relationship."
 +
 
 +
* When you are hovering over the notifications at the top of the screen while on the galaxy map, they now do the same sort of highlighting of the relevant planets that the objectives on the sidebar do.
 +
 
 +
=== Bugfixes ===
 +
 
 +
* AI specific fleetships are no longer selectable as bonus choices.
 +
** Thanks to Hearthunter for noticing.
 +
 
 +
* Salvage is now collected based on unit Strength not metal cost. Fix a bug where salvage wasn't being collected by the AI. As far as I can tell player salvage is working.
 +
** Thanks to RocketAsssistedPuffin for reporting
 +
 
 +
* Fix a bug where things were Autobuilding before the Command Station had finished building
 +
** Thanks to folks on Discord for noticing, Ovalcircle in particular
 +
 
 +
* Fixed an exceedingly rare exception that could happen during error logging itself.
 +
 
 +
* Fixed it up so that "normal planet nasty picks" don't block larger faction things from seeding.  These were causing map generation failures on higher difficulty  levels.
 +
** Thanks to zeusalmighty and BadgerBadger for figuring out the fix.
 +
 
 +
* Fixed an issue where, in fresh installs of the game, the escape key would not work for closing the in-game menu.  No idea how long that has been going on, but it's one of those "how did that ever work?" situations.  Basically it WAS closing it, but then immediately checking if it should open it again thanks to some keybinding confusion.  Apparently at one point in the past, a triple-negative made a positive (which is correct, but... ugh).
 +
** Thanks to Ovalcircle, HeartHunter7, and Dominus Arbitrationis for reporting.
 +
 
 +
* Fixed an issue where if we remove a keybinding there would be exceptions shown on the main menu the next time you started the game.
 +
 
 +
* Fixed a bug where the AI's hacking response was not correctly handling its Response Multiplier. So you were getting waves 5x too strong.
 +
** Thanks to HeartHunter for noting.
 +
 
 +
* Fixed a bug where it was not showing allied strength when you were not also present, in the little text next to planets on the galaxy map.
 +
 
 +
* Fixed a bug that could cause the map generation logic to fail infinitely if it didn't generate any planets.
 +
 
 +
* Commented out an exception that was probably harmless ("Error: tried to start thread [threadname] but it appears to not have responded to the last start request"), but that could come up in some rare cases.
 +
** Basically this is probably a timing issue that isn't really an issue; the exception was originally there to detect threads that didn't start for whatever reason, but based on the occasional latency in starting a thread that can naturally happen, this was likely getting triggered spuriously.  Basically it should just fail silently, then check again a few milliseconds later and everything will be fine.
 +
** Put another way, this logic was put in originally to catch threads that fail to start at all for whatever reason.  That has never happened, though.  What actually happens is that sometimes threads are a little slow to start, on a millisecond scale, and this would get tripped by that case instead.  So our threading manager needs to basically just be quiet and trust that the OS will spin up the thread quite soon. ;)
 +
** Thanks to ColonelBlimp for reporting, although Chris was also running into this sometimes.
 +
 
 +
* Fixed a minor bug that was letting players see "hack X ship type" objectives prior to exploring their planets.
 +
 
 +
* Fixed some really annoying input lag with the band-box selection.
 +
** Thanks to HeartHunter7 for reporting.
 +
 
 +
* Fix a null reference exception in AstroTrains
 +
** Thanks to Puffin for reporting
 +
 
 +
=== Balance Tweaks ===
 +
 
 +
* Auto Bomb cost down from 1000 to 600 for spammability.
 +
 
 +
* Exogalactic Waves can now use Dire Guardians as the Exo-Leader.
 +
 
 +
* Command Station changes.
 +
** Economics now only give 5k Energy per mark, down from 10k.
 +
** Military now only gives 60 metal at mark 1, increasing by 20 each mark.
 +
** Logistics now now only gives 60 metal at mark 1, increasing by 20 each mark. Now increases metal storage by 300k instead of 100k, grants 20k energy at mark 1, increasing by another 20k each mark, and harvests salvage at twice the rate of the others.
 +
 
 +
* Mercenary Flagships should now have a health total of 1 million, and Distractor Flagships should have 1.6 million.
 +
 
 +
* Raid (and AI Raid, though it spawns none yet) Starships now do 2000 damage, up from 1000, bypass 90% of personal shields, have 50mm armour up from 30, engine gx of 18 up from 14, cost 70k instead of 7k, gain 2 per mark up from 1, and gain 500 Cloaking Points per mark, up from...none. Oh, and they're a much higher priority for the AI, so it WILL shoot these if it sees one.
 +
 
 +
* Sentinel Frigates now have a strength multiplier of 2, so the AI won't get several hundred of them early on as easily.
 +
** Likewise the AI will consider yours to be more of a threat.
 +
 
 +
=== Hacking Rework ===
 +
 
 +
* The balance levers for Hacking response have been moved to the XML. This will make it much easier to balance Hacking in the future.
 +
* The AI will tell you its response level in the tooltip for hacking points
 +
 
 +
=== AI Types ===
 +
 
 +
* Adds the Sledge Hammer type.
 +
** Takes longer to spend the wave budget, but as a consequence when it finally does, the wave is much larger. Gets worse with things that add to the budget.
 +
 
 +
* Adds the Golemite type.
 +
** Has Golems occasionally in the same place Dire Guardians would be. Rare, but sore.
 +
 
 +
* Adds the Vicious Raider type.
 +
** Has access to the Vicious Raid Starship, which is identical to the players...except it also has a bonus against bubble forcefields, to break them down and get at the vulnerable targets within.
 +
*** You can hack the Design Backup for these, to either stop them ever appearing or steal it for yourself...
 +
 
 +
== Version 0.775 Unit Stacking ==
 +
(Released September 25th, 2018)
 +
 
 +
* Orchid Ark weapon renamed to Fusion Spore Bomb for theming.
 +
** Thanks to zeusalmighty for suggesting something along that line.
 +
 
 +
* The little yellow backplate behind attack-moving (stop on target; x+click) units is now less overwhelmingly large.
 +
 
 +
* There is now a midsize blue backplate behind the icons of units that are currently containing other units.
 +
** Units containing other units?  Why yes!  Guard posts do this all the time, not that you would have known prior to now.  Guardians sometimes do it, too.
 +
** Additionally, their icons now show a count of how many units they have within themselves.
 +
 
 +
* If an entity is a stack, then now the tooltip for it says that it's a stack, and how many.
 +
** The tooltip also says what that means, and what the current outgoing damage multiplier from it is.
 +
 
 +
* The various status-of-the-ship text at the bottom of the tooltip is now drawn in a smaller font so that it's less of an overwhelming blob an more easily told apart from the text higher up.
 +
 
 +
* For the first time, you can finally see in the tooltip for a ship how many ships it contains inside it, and at what strength.  That goes for those that carry drones, as well as those that are enemy guard posts, etc.
 +
** You can freely see this information for any faction.
 +
 
 +
* The game now supports having systems partially overriden in copy_to entries.  Please see AntiShieldSpaceTank for one example, and VeteranSniper and GhostSniper for another style.
 +
 
 +
* Design Template Servers are now far more aggressive about being seeded when the AI gets a new ship type unlocked.
 +
 
 +
* Fix a null reference exception on unit transformation, in particular changing command station types
 +
** A number of people noticed, including Mcloshiv, Kesseleth, Hearthunter and probably others
 +
 
 +
=== Bugfixes ===
 +
 
 +
* Fixed a bug where the schematic servers were seeding at a distance of >= 2 hops from the player planet rather than > 2 hops.
 +
** Note that in some instances you'll still find ones seeded closer, but it should be rare.
 +
** EXCEPT for always 1 of the turret servers should almost always be within distance 1 of your planet, and 1 of the starship servers should always be at distance 2 from your planet.  With a few rare exceptions.
 +
** Thanks to Mckloshiv for reporting.
 +
 
 +
* Fixed a bug in the prior version of the game which could have let other factions seed ON the home planet at times.
 +
** Thanks to OvalCircle for reporting.
 +
 
 +
* Improved the output of the error message if the galaxy doesn't have enough space for all the factions in it so that we can see what the heck is actually going on, why it thinks things are filled.  Right now it makes no sense and seemingly shouldn't be possible, so there's some sort of other bug this will let us track down.
 +
 
 +
* Fixed several cases in the targeting code where there could be a bad sort result because of PrimaryKeyIDs being reassigned.
 +
 
 +
=== Automatic Strength Calculation ===
 +
 
 +
* The concept of a strength multiplier (for visual display purposes) on the mark level is gone.  There is now an attack multiplier instead, like the hull multiplier that exists there.
 +
** As the mark levels go up, we're now introducing ever so slight of a creep to the attack compared to the hull values.  This makes battles between two mark 7 ships take very slightly less time than their mark 1 counterparts battling would.  The effect is super duper slight, though.
 +
 
 +
* There used to be a required "strength" integer on all units.  That has been removed, and strength is auto-calculated now.
 +
** The existing field was renamed to old_strength, and its sole purpose is for a comparison point when manually looking at the GameEntityReferenceData.csv export in the PlayerData folder.
 +
 
 +
* The GameEntityReferenceData.csv export in the PlayerData folder now has the strength field moved up to column D, and then has the "old strength" in column E, and the difference between the two (new-old) in column F.
 +
** Note that this csv file is used just for populating the wiki, or for people to use as a direct reference.  It's an export only, it has no gameplay purpose directly.  It gets generated every time you launch the game.
 +
** So if you're balancing a unit, you can make some changes in xml, then run the game and check out your updated csv file.  Tip: if you're using excel, be sure to close the csv file before you run the game, because excel locks the file from external editing while it's open.
 +
 
 +
* The way that strength is now calculated is very simple, and it is NOT multiplied by mark level anymore.
 +
** In other words, it recalculates this independently at each mark level, rather than calculating at mark 1 once and then multiplying for the higher mark levels.
 +
*** This means that there can be some WILD swings in the strength of a unit at higher mark levels if it gets extra guns at higher mark levels.  Just something to bear in mind.  The export presently only writes the mark 1 versions of units.
 +
** The formula, per mark level, is simply: ( (hull health at that mark level)/12 + (shield health at that mark level)/20 + SUM( DPS of each weapon at that mark level) ) / 20.  Minimum 1.
 +
 
 +
* What exactly does the "strength" value affect?
 +
** It affects the values shown in the interface to the player, which is important to decision-making but not actual gameplay.
 +
** It affects the values that the AI and other factions use to calculate risk and opportunity when considering planets to attack or defend.  So this DOES affect AI/NPC behavior quite a lot if it thinks that something is much stronger or weaker than it is in reality.
 +
** It affects the "cost" of units that the AIs and NPCs pay in order to purchase units for waves, reinfocements, etc.  Where the player spends metal, AIs and NPCs spend strength budget points.
 +
*** This also applies to how mercenary units determine what to bring with them; they have a strength budget that gets randomly allocated to their allowable units when you hire them.
 +
 
 +
* With this in mind, it is sometimes going to be desirable to multiply the strength value to get a different number.
 +
** Usually this is because there is some other factor going on with the unit.  The DPS calculation does not take into account any multipliers to outgoing or incoming damage, for example.  It doesn't take into account any strange special effects like zombification.
 +
** Therefore, to allow for human fine-tuning of the strength calculations, we have a strength_multiplier field that can be set to a floating-point-style number (actually a fixed-int on the inside).
 +
** This can be set to adjust units to be valued as more or less threatening, plus more or less expensive to the AIs/NPCs to purchase.
 +
** One good example is Snipers -- they come out with a strength value of 3, because their base attack speed is very very low.  However, they have a 10x attack multiplier against fast targets, and that isn't reflected at all.  So we added a  strength_multiplier="2" to make them show up a bit more appropriately.
 +
** On the flip side we have Scouts, which come out with a strength value of 25, which is ludicrous.  They have no guns at all, but a lot of shielding; so they're weak to anything that fires through shields... plus anything that shoots in general.  For now we've set a strength_multiplier="0.3", putting them at a final strength of 8.
 +
** Note that we HAD internally talked about using a strength override instead of a strength multiplier, but because we're calculating these values per-mark-level rather than at the base and multiplying, that really isn't possible.  This approach also makes it so that changes to units with a multiplier are automatically reflected, whereas if it was a flat override that would not have been the case.
 +
 
 +
* The exports for the csv file are now strictly ordered by name, rather than by starting mark level and then name.  Now you can actually find things in there!
 +
 
 +
* There is now a second export, GameEntityStrengthData.xml, that happens at the same time as the csv export.
 +
** This gives an export of just the vitals for purposes of strength balancing, and actually shows the strengths and strength differentials for every mark level that a ship can have.
 +
** Despite the extra data, it's in a far easier-to-read format, and doesn't require you to close it every time you run the game to update it.  You can just keep it open like any other xml file, and if you're in visual studio it will just automatically reflect the new values so long as you made no changes to it.  If you're using Notepad++, it will ask you if you want to load the changes, but that's a minor inconvenience compared to what it was before.
 +
 
 +
=== Unit Stacks ===
 +
 
 +
* It is now possible for AI/NPC units/squads to be "stacked."
 +
** A stack consists of 2+ identical units, with a little marker on them stating how many are in the stack.
 +
** A stack is able to fire at up to 5x its normal attack power, depending on how many units are in the stack (1 unit in a stack = 2x, 5 units = 5x, 5+ is still 5x).
 +
** A stack takes damage just as it would if it were not a stack.  When the current item visible from the stack "dies," then the next item pops out and the stack count goes down by one.
 +
*** Damage does not roll over from one unit in the stack to the next, so this makes AOE weapons weaker against stacks, as well as weapons with a lot of overkill.
 +
** If a tractor is grappling a stack, then each stacked entity counts as 1/4 of a tractor target for purposes of the grappling capacity of the tractor beam.
 +
*** This makes tractor beams substantially stronger against stacked enemies.
 +
** The purpose of stacks is performance and visual decluttering.  These keep the battles runnning quickly while still being large.
 +
*** Note that ONLY mobile ships/squads can stack.  Turrets and whatnot do not stack.
 +
*** Stacks will typically only kick in when there are more than 50 of a single type of unit on a planet, owned by the same AI/NPC faction.
 +
*** However, there is a max_count_per_npc_faction_before_stack flag that can be assigned to entities to make them stack sooner.
 +
**** The various starships and guardians that have bubble forcefields now have a value of 3 for  max_count_per_npc_faction_before_stack.
 +
***** This keeps them from absolutely tanking performance if the AI somehow gets a hold of a ludicrous number of mobile shield generators on one planet, which has happened in the past.
 +
** The stacking logic runs on a background thread on the game host only, and sends out orders across the network to cause units to stack when needed.
 +
** It's worth noting that this also makes savegames WAY smaller during certain ginormo-battles.
 +
** Additionally, when there are stacked units on a planet, and there are fewer than half the stacking cap, then stacks start being slowly split apart.
 +
*** That way you don't wind up with a single stack of 50 units as the last entity, it will spread back out, first to two stacks of 25, and so forth and so on.
 +
** Also note that the combining into stacks is done by mark level, so if there are multiple mark levels at a single planet it will not mix and match and change the difficulty on you.
 +
** Thanks to these changes, our test savegames where we had awful things like literally 10% sim speed and 50+ second targeting cycles now run at full speed within 30 seconds of loading, and have quarter-second targeting cycles as well.  In the 10% performance savegame's case, it also reduced the savegame file size from 8.6MB to 1.6MB.
 +
** Thanks in particular to HeartHunter7 for providing us with so many high-intensity saves to really test the system.
 +
 
 +
* The way that commands queued from long-term continuous planning loops are done is now far more immediate and responsive.
 +
** Also... found a couple of WTF items relating to the thread timing of intermittent versus continuous that we fixed up.  It's one of those "how did this work at all with those bugs" things.  Actual functionality doesn't seem to have been impacted, though, strangely.
 +
 
 +
=== Unique Ship Varaints For AI Types Now Possible ===
 +
 
 +
* AIs now have two new fields on them that can take lists of GameEntity InternalName lists:
 +
** ship_lines_to_start_with gives a list of freebie ships that that AI type starts with.
 +
** ship_lines_forbidden gives a list of ships that that particular AI type can never unlock.
 +
*** Note that this can't remove the basic always-unlocked ship types.
 +
 
 +
* The Ghost and Sniper and Shield Hater AI types now have some unique ships of their own that are variants of the main ships Sniper and Space Tank that get seeded for their types.  Ghost Sniper, Veteran Sniper, and Anti-Shield Space Tank, specifically.
 +
 
 +
* There is a new field ai_can_not_directly_unlock_this that can be added to ship types, which makes it so that the AI won't normally get this ship type via the usual unlock methods.
 +
** This is assigned to the unique ship types that those AI types have, preventing other AI types from using them.
 +
 
 +
=== Balance Tweaks ===
 +
 
 +
* AI Concussion Guard Posts damage multiplier reduced to 3x at Mark 1. Dire version changed to have the same as a Mark 5.
 +
** A combination of these and Sabots would have been very unfortunate...
 +
 
 +
* Mercenary Flagships have had their health increased, so they are more likely to survive to yarr harr again.
 +
** Thanks to zeusalmighty for pointing out their low life expectancy.
 +
 
 +
* AI Guard Posts (not Dire) have had their hull and shield values shifted drastically - 33% of their total health is now in hull, with rest in shields.
 +
** Fusion Bombers were...completely ineffective at shield piercing these - the shield was so little that it went down before the Guard Post died, meaning...well, you didn't bypass any of it. Now they should be better Post killers.
 +
 
 +
* Fusion Bomber damage decreased from 225 to 125, reload time halved from 12s to 6s.
 +
** Still a damage increase, but prevents the annoying case of them firing pot shots en route to their actual target, then having to stare at it uncomfortably for a long time...before finally attacking it!
 +
 
 +
* V-Wings have been altered a fair bit. Health is now mostly in shields, with a bit of hull, their weapon range is increased, damage decreased from 80 to 20, reload decreased from 4s to 2s, they now fire 2 shots per salvo instead of 1. They gain 1s engine slow per Mark, down from 2, and at Mark 4, their "Slowing Shotgun" is exchanged for the Enhanced version, which fires 4 shots instead, and has a maximum engine slow of 5s instead of 4.
 +
** Hopefully these are actually wanted! Possible scenarios are being thrown at the Warden fleet while the rest of your forces attack elsewhere, delaying the response, intercepting Plasma Guardians from hitting your forcefields, etc. Should succeed at these more now.
 +
 
 +
* Auto Bomb health increased from 300 to 1500, damage tripled from 30 to 90, and they now hit 12 targets instead of 9.
 +
 
 +
* Warbird damage increased from 120 to 160 per shot.
 +
** Thanks to Mckloshiv for the suggestion on these.
 +
 
 +
== Version 0.774 Five Thousand Days ==
 +
(September 24th, 2018)
 +
 
 +
* Astro Train notifications only tell you the planet name if you have vision of the planet
 +
** Thanks to Puffin for noticing
 +
 
 +
* Incoming waves now give a text notification, including their target planet
 +
 
 +
* Slight tweak to description of Instigator Bases
 +
 +
* Slight tweak to the tutorial
 +
** Thanks to Eric for the suggestion
 +
 
 +
* The number of construction voice messages could get overwhelming, particularly if you were in the middle of heavily fortifying a planet. Limit them to no more than once every 10 seconds
 +
** Thanks to Puffin for the suggestion
 +
 
 +
* Human Command Stations now harvest Science and Hacking points at a slow rate from the planet they're on.
 +
 
 +
* Slight tweak to Intensity 10 golem seeding.
 +
 
 +
* Add in several new varieties of Cluster map type. One is called Nebula, I'm looking for names for a few others. Also give Small Clusters a bit more randomness.
 +
 
 +
* Allow the player to choose how many planets they want in the galaxy
 +
 
 +
* Slight tweak to hovertext for incoming wave notifications
 +
 
 +
* Don't allow Nanocaustation or Zombification for Drones
 +
 
 +
* Unclaimed units (metal harvesters, etc) no longer regen their shields until they are claimed.
 +
 
 +
* A new keybind has been added to the game, default bound to shift: Suppress Tooltips
 +
** Description: Sometimes you just want to look around without tooltips coming up at all.  Hold this key to do so.
 +
 
 +
* Previously only the P and Pause keys would pause the game.  Now the spacebar does, as well.
 +
** Thanks to Dominus Arbitrationis for suggesting.  Chris kept hitting spacebar, too, trying to pause and unpause.
 +
 
 +
=== New Objectives ===
 +
 
 +
* Killing Data Servers/Coprocessors
 +
 
 +
* Capturing Schematic Servers
 +
 
 +
* Hacking DTS/Supterminal/Dyson Sphere
 +
 
 +
* Beginner Objectives to seek out Schematic Servers/DTS, and also to build Engineers and Remains Rebuilders
 +
 
 +
=== AI Defensive Changes ===
 +
   
 +
* Allow the AI to defend all its Guard Posts, not just the command station
 +
 
 +
* Allow the AI to spawn Guardians for defense
 +
 
 +
* Allow the AI to build at most 1 of each type of non-turret defense per guard post/command station.
 +
** This prevents fields of Tachyon Sentinels from being build 
 +
 +
* Don't allow the AI to build shields both with the Shield budget and the NonTurretDefense budgets.
 +
** This was allowing the AI to have a ton of shields per planet. Thanks to Puffin and zeusalmighty for reporting
 +
 
 +
* The AI is allowed to use Guardians in Waves
 +
** Only 1/3 of the wave composition can be Guardians, so fleetships will always dominate
 +
 
 +
* Decrease the number of Riot Starships built by the Warden Fleet
 +
 
 +
=== Performance ===
 +
 
 +
* A lot of the ship to ship targeting is now separated out into just being calculated at the faction level instead of at the ship-system level.  We also now do early segregation of things with zero priority (the stuff for "very last") to keep our list sorting a bit faster.  We tried a bunch of other things, but just can't get the sorting any faster than this at the moment.  There are some changes we could make, but they would likely be incremental in nature.  The amount of data to crunch is just astronomical by gaming standards.
 +
 
 +
* For-multiplayer-in-the-future performance improvement: the game steps and the primary keys for entities are now stored as int32s rather than int64s.  This saves on the amount of data we have to pass around, and is smaller in some math operations as well.
 +
** There was never going to be another chance to make this sort of change where we wouldn't be impacting actual live games, so now was better than any other time to go ahead and do it.
 +
 
 +
* Rewrote some of the targeting eligibility code to be far more robust, and to get run less frequently on the targeting thread, as well.
 +
** This probably will fix the issue with targeting sometimes stalling out but having really low times for the targeting thread cycles.
 +
 
 +
=== Visual Changes ===
 +
 
 +
* Instigator Bases, Astro Train Depots and Stations now use much larger Space Dock models, for a visual upgrade and ease of targeting them. This is temporary.
 +
 
 +
* Macrophage Harvesters now use the Tethuida model and icon, to better suit being giant organic ships. Enraged Harvesters use the Tethuida Drone icon, and get even bigger to help pick them out as...well, enraged. This is temporary.
 +
 
 +
* Riot Control Starships are now named Shield Starships.
 +
 
 +
* MLRS Guardposts and Fortresses now fire all of their missiles at once instead of one at a time.
 +
 
 +
* Mercenaries now use the colour gunmetal2 to make them stand out a bit more in text.
 +
 
 +
* AI Sentinels default main colour shifted a bit away from red to help differentiate them more.
 +
 
 +
* Fortresses are now bigger and more impressive looking!
 +
 
 +
* Arachnid named weapons and units, and mass driver weapons other than the Orbital Mass Driver, are all now called Sabots.
 +
 
 +
* Dark Spire Vengeance Generators now use the Dyson Warp Gate model.
 +
 
 +
* Marauder bases now use the same Space Dock model as Instigator Bases and Astro Train Stations/Depots.
 +
 
 +
* All references to Lightning/Electric changed to Tesla.
 +
 
 +
* Flak Turrets and Guardians renamed to Grenade Launcher Turrets and Guardians.
 +
 
 +
* Dire Leech Guard Post is now named the Parasite Guard Post.
 +
 
 +
* Widow Guardians, both normal and Dire, are now called Paralysis Guardians.
 +
 
 +
==== The Icon Overhaul ====
 +
 
 +
* Wow what a butchering of old icons!  For the ship icons, we're not sure offhand how many we removed that were there, but we only kept 56 of the ones that used to be there, and have added 105 new ones, so that gives you a pretty good idea of the scope of changes.
 +
** In general the way that the icons are handled is now different, with things like guardians and turrets and so on all sharing one central icon that is easy to recognize, and then having little colored overlay markers that show a pictograph that you can recognize to see what KIND of turret or corvette or starship or guardian or whatever they are.
 +
** Overall, yes, this gets kind of back into the idea of flair, but handled a lot better this time.  It's not generically--placed on ship images, but rather is overlaid where makes sense.  The way the command stations for the player are handled is particularly cool, with the center swapping out for different graphics depending on if it's logistical, military, or economic in nature.
 +
** Additionally, tons of ships that never had unique icons at all (Arks had no icon of their own, macrophage and astro trains did not either, merc communicators didn't either, and the list goes on) now do.
 +
** And then various icons that were just hard to read, or which were so thin that they made the color look odd on them compared to everything else on the team, have been redone.  Corvettes are the big one there.  But they're just one among many.
 +
 
 +
* Information overload!  The various statuses and modifiers on the ship icons has been getting overbearing.
 +
** Actually it's been overbearing for a while, it's not "getting" that way.  But having the new little overlay modifiers next to ships was making it more obvious how hard the actual ship icons themselves (including the new overlays or not) were to even SEE when you had your ships in an attack/FRD stance.
 +
** With that in mind, we began experimenting with a way to make it so that it wasn't such a huge round red sphere behind ship icons that are in attack stance.
 +
** Ultimately, the only thing that really works well is having a little tiny marker that is basically behind the mark level numerals, or where those would be in the case of markless ships.  This keeps the amount of visual clutter down, and doesn't obscure the profile of the actual ships, so you can finally SEE what is happening in your big mass of ships.
 +
*** But!  This comes with a pretty hefty downside, in that especially if you're playing as a red color, or if you've got a lot of mark iv ships... you can't very easily see which of your ships are in attack stance.  The information has been effectively minimized... but now it's, well, minimized.
 +
*** The solution to that was for us to start colorizing the selection circle itself (we also made the selection circle consistent aside from color regardless of ship mode, which is new and much better, too; also the selection circles are now more transparent than before, since they were also overbearing before).
 +
**** When you select a mass of your ships, even just hitting M for all mobile military, it's now blatantly obvious which ones are in attack stance (red selection circles) and which ones are not (white selection circles).  The minimized data becomes very maximized, now that you're actually in a decision-making mode for the ships.
 +
*** The goal here is for there to be a balance where hopefully you can mostly see what you need at a glance, but if it's hard to see then you just quickly select it.  And beyond that, the actual icons are vastly more readable all the time, which is goal #1 here.
 +
** Going along with this, we did the same thing with the "ship has a problem" yellow icon, the "AI ships are in guard stance" blue shield (now a gold shield), the "ships are in group move" blue/white cluster of spheres, the engineer version of FRD mode (green radar), the "ship under construction" hexes backplate (not nearly as small as the others, but definitely smaller -- this is both less common and more important), the "ship is off" marker (same notes as the under construction one), and so on.
 +
** We may still need more tuning over time with this, but hopefully this is such a major step in the right direction that readability is up and is sufficient for early access.  We shall see what people think.
 +
 
 +
==== Shot Visuals/Audio ====
 +
 
 +
* All of the beam weapons now use an underlying shot type of "HeavyBeamInvisible" rather than ShotBasic.  The usage of the former was confusing, although it didn't show anything differently, and it may have been triggering the wrong sound effect.  The beam weapons should now be using a better sound effect that actually sounds beam-weapony rather than like a gunshot, but please let us know if not since we've not tested it yet.
 +
** Thanks to Puffin for discovering this.
 +
 
 +
* Adjusted shot code so that they can again draw a "main projectile" and a "trail" together if desired. For quite a while now, we've just been drawing the "trails."
 +
 
 +
* GuidedMissile, MajorZombifyingRocket, and FusionRocket now all have actual missile graphics again (as they did long ago), and all of those now should be sufficiently differentiated from one another (as they used to be, too).
 +
** The exhaust trail from the guided missiles is now a yellow/orange/red mix, rather than just being yellowish. Makes them stand out a lot more.
 +
 
 +
* The basic "armor piercing shell" that so many shots use now has a different shape, more rounded and fancy and yet actually fewer polygons!
 +
 
 +
* There are four new "laser pulse" shot visual styles: sickly green (nanocaust), deep blue (most player stuff, turrets, etc), pink (ablative gatlings), red1 (weakest AI or dyson stuff), red2 (stronger AI stuff and middle dyson stuff), red3 (strongest dyson stuff).
 +
** These also use different sound effects compared to the "basic shot" sound effect that they were previously using. These were all previously just using the standard "basic shot" that was the boring yellow thing.
 +
 
 +
* The engine disrupting shells have a new visual that is more striking and unique, and now only spiders use that bullet type; armor ships don't use that anymore.
 +
** The visual for this actually now looks rather spider-y in itself! Very menacing to see. :)
 +
 
 +
* Energy wave shots are now green and flatter/wider, like in AIWC.
 +
 
 +
* The "sniper" shot of the sentinel frigates is now called "sniper energy wave," and uses the new energy wave graphics. Dark Spire Eidolons and Macrophage Harvesters now also share this.
 +
** The long-ranged weapon of the military command station also shares this, though not the sniper part.
 +
 
 +
* The visuals of the "ion" shots are now vastly larger and vastly scarier-looking, as well as having this cool little helix shape around themselves.
 +
 
 +
* MajorZombifyingRocket, which was green and used by the zombie-creating entities, is now deprecated.
 +
** A new ParasiteCurvedPinkShot, which at the moment we're just calling Parasite Bolt (or Zombifying Bolt), is instead used by all those entities as well as now the parasite guard post.
 +
** Actually a balance change, not just a visuals change: the Archon MLRS on the AI Overlord Phase 2 was previously using the zombifying rocket image but not zombifying. Now it uses the zombifying bolt image AND zombifies. :)
 +
 
 +
* Nematode Rockets on the Abomination and Deviant are now Nematode Sickle-Shot, which is a sickly green color of the parasite shot.
 +
 
 +
* All of the Pike weapons now shoot a bullet called PikeShot_Gold, which looks really cool and is also quite pointy.
 +
 
 +
* The paralysis guardians no longer use guided missile graphics, but instead use a new ParalysisProngedShot_Blue.
 +
** Ooh, hey, the cursed golems also now use this new visual, and their sniper-type shots now have a minor paralyzing effect, too. Good luck with that! ;)
 +
** Hey, while we're at it, why not also to the Warbird Starship. Slightly new spin on that one and it looks darn cool.
 +
 
 +
* The visuals for plasma bolts have been changed notably, to be more of a ring-y spherical thing.
 +
** The visuals for the guided missiles that the usurper had are now "stinger bolts" like the stingray has, since they are both anti-forcefield.
 +
** The secondary weapon of the tritium sniper guardian is also now stinger bolts with an anti-forcefield bonus, instead of just regular guided missiles.
 +
*** Same for the only weapon of the Dark Spire Specter.
 +
*** And now the Ark One actually has a purpose: having this sort of stinger weapon, as well, for being anti-forcefield.
 +
** And the raid starships, which use a "fusion bolt," now have a different color for that that more evokes the fusion bombs while having the shape of the plasma bolt.
 +
 
 +
* A variety of ships had just boring ballistic shots, and some have already been noted as switching to other types. But the following have been switched to fusion bombs and get the bypasses-personal-shields bonuses that those confer:
 +
** Tractor Guardians, Assault Starships (also retain the bonus against heavy armor!), Orchid Ark (and it's extra powerful passing shields now!), AI Overlord Phase 2 (along with its other two weapons it still has), Mercenary Flagship, Mercenary Distractor Flagship (had no weapon at all before!).
 +
 
 +
* Color variants for the agravic fusion bomb and viral fusion bomb have also been added.
 +
 
 +
* The mass driver shot is now a large, orange-glowing chunk of asteroid junk -- as it should be. :)
 +
** The artillery golem now uses this, as does the Orbital Mass Driver.
 +
 
 +
* The visuals for the plasma torpedos are now vastly much larger versions of the plasma bolts.
 +
** For the ones that don't explode at the end, they now have a greenish tint instead of a blue one.
 +
 
 +
* The railgun shots (sniper bullets, in other words) are now exceedinly cool and different. They're far longer and thinner than other bullets, and the tip effect of them should actually pierce through enemy positions a bit. They're also colored with a gradient that goes from red to orange and finally to green at the back, with the coloring becoming more prounced the faster they are going.
 +
 
 +
* The rockets fired by the devouerer/nemesis have been replaced by "antimatter jaws" (feel free to suggest a better name) that are basically these large, freaky, spiky energy emissions that look like jaws if you watch them from the wrong angle.
 +
** The nemesis has one that's colored slightly differently from the devouerer, so it's pretty easy to tell the two apart just from their shots now.
 +
 
 +
* The actual projectiles from flak shots are now drawn as a trio of tear-shaped lines rather than just a boring regular shot. They also have their own slightly unique red glow.
 +
 
 +
* A new projectile shape has been introduced for sabots and ambush turrets. There's a color difference between the two. It has a very unique shape that is inspired by the real-life sabots.
 +
 
 +
* The last new shot type is called ElegantCurl in the code, and is used by the Armored Golem as well as two of the Arks (Thanatos and Gyrn). When used by the Arks, it's called a Ballistic Vortex. Feel free to suggest name shifts!
 +
 
 +
=== Sidebar Updates ===
 +
 
 +
* The Objectives tab on the sidebar no longer uses a superscript for its count of objectives, but instead uses a smaller font for the number and a parenthetical number.
 +
** Thanks to Badger for suggesting.
 +
 
 +
* Sidebar headers now have the full count of how many squads are in each section noted in their headers.
 +
** Hooooley cow this makes a big difference.  Huge thanks to Badger for suggesting.
 +
 
 +
=== New Units ===
 +
 
 +
* Adds the Auto Bomb as a player only Fleetship.
 +
** These are cheap, speedy, very flimsy suicide units that do area damage.
 +
 
 +
* Adds the Warbird Starship.
 +
** Fast, cloaked, fires multiple rockets all at once every 2s. Also causes paralysis of 2s on every target hit, if they have a mass less than 4.
 +
 
 +
* Adds the Parasite Fleetship, for players only.
 +
** Not very good fighters, but can zombify their targets upon death. Is immune to being zombified or nanocausted itself.
 +
 
 +
* Add the Superterminals and Coprocessors back into the game.
 +
** Coprocessors don't stop you from capturing the planet itself, but do block building harvesters and capturing any neutral units until it is destroyed
 +
** There is a known bug with the hovertext for co-processors, but it would be good if someone verified the "killing one individually increases AIP, but killing all of them gives a big net decrease" behaviour
 +
 
 +
=== Reinvented Units ===
 +
 
 +
* Missile Guard Posts and their Dire version are now Concussion Guard Posts, firing multiple missiles with a damage increase against thinner hulled ships.
 +
 
 +
* Missile Turrets are now Concussion Turrets, and are essentially Concussion Corvettes in turret form.
 +
 
 +
* Missile Guardians are now Concussion Guardians, and are the same as the above.
 +
 
 +
* Laser Turrets are now Nucleophilic Turrets, gaining a damage bonus against targets with higher energy use.
 +
 
 +
* Laser Guard Posts have the same treatment, becoming Nucleophilic Guard Posts. Dire is included.
 +
 
 +
* Laser Guardians are the same.
 +
** Guardians, Arks, Golems and some Nanocaust units have changed energy costs to make them weaker to these units.
 +
 
 +
==== Goodbye ARS, Hello Schematic Servers! ====
 +
 
 +
* The following changes to turrets have been made:
 +
** Grenade Launcher Turrets used to be available from the start, but now they require being captured from a schematic server.
 +
*** Same for MLRS turrets.
 +
** Fortified Tesla Turrets used to have a science cost for mark 1 but otherwise be available from the start; now they must be captured from a schematic server, but mark 1 is free.
 +
*** Same for tritium sniper turrets.
 +
*** Same for beam cannons, but now beam cannons have a unit cap of 2 instead of 1.
 +
** Don't worry! From the start you still have Pike Turrets, Ambush Turrets, Nucleophilic Turrets, and Concussion Turrets. Also from the start, you can still spend science to unlock Spider Turrets if you wish.
 +
*** So that's 5 turret types you can get from structures now and have for free at mark 1 in terms of science, 4 you start with, and 1 you have to just unlock if you want it.
 +
 
 +
* The old "Advanced Research Station" unit, recently renamed Schematic Server, has been removed.
 +
** In its place, we now have three new capturables: Fleetship Schematic Server, Starship Schematic Server, and Turret Schematic Server.
 +
** There are presently 22 available fleetships to unlock via these, 4 starships to unlock, and 5 turret types to unlock. More will be added in the future.
 +
 
 +
* The number_ars_to_seed tag from the AI difficulty settings has been removed. Before that ranged from 6 to 3.
 +
** Now it seeds 3 starship schematic servers, one of which should be at distance 2 from the players if at all possible.
 +
** Now it seeds 4 turret schematic servers, one of which should be at distance 1 from the players if at all possible.
 +
** Now it seeds 6 fleetship schematic servers, all of which are > 2 distance from the player but random other than that.
 +
 
 +
=== Balance Tweaks ===
 +
 
 +
* Etherjet Hull and Shields increased from 800 to 1100 each.
 +
** Thanks to HeartHunter for the suggestion. This is for until they get their tractoring while cloaked implemented.
 +
 
 +
* Botnet Golems fire 50 missiles per salvo, up from 16, and send them all at once for a more impressive super unit attack visual.
 +
** Thanks to zeusalmighty for noting how "meh" it was.
 +
 
 +
* Nanocaust Aberrations and Abominations now get a 4x damage boost on their Viral Emitter weapons against armour values of 90mm and higher.
 +
** This is to make them more dangerous to Starships, which in testing were easily able to wipe the Nanocaust off the map by themselves with little effort.
 +
 
 +
* Pike Corvette damage down from 50 to 40 per shot.
 +
 
 +
* Concussion Corvette damage down from 80 to 70 per shot.
 +
 
 +
* Artillery Golem lost splash damage, damage increased up to 500,000.
 +
 
 +
* All plasma type weapons, save the Plasma Siege Starship and the Fortress', are now single target only, but have increased damage to compensate. The before mentioned units have the damage increase, but spread the damage out among targets in the explosion radius instead.
 +
 
 +
* AI Overlord Phase 2 loses a Cannon in favour of an MLRS - remaining Cannon damage increased, Plasma Cannon follows the same theme as the others.
 +
 
 +
* Cursed Golem damage increased, self damage reduced. Damage is split across four shots as well.
 +
** Thanks Badger for the four shot suggestion!
 +
 
 +
* Armored Golems have a multi shot weapon again, intended as an inbetween of the horde killing Botnet, or the single target demolisher of the Artillery.
 +
** I am not quite sure on what these should be. Feedback is greatly appreciated from anyone who uses one.
 +
 
 +
* Nucleophile Turrets (old Laser) now have a proper metal cost, instead of being bargains.
 +
 
 +
* Armored Golems now have an inhibiting tesla coil weapon, that fires periodically (17s), hits up to 100 targets, and debuffs them with a reload penalty of 17s. This is so it better suits a "brawler tank" role.
 +
** Thanks to zeusalmighty for this very interesting suggestion, that at last solves a personal dilemma with these fellows.
 +
 
 +
* Temperamental and Fragmenting Guardians have strength values increased from 200 to 300, so there are less of them in waves for now.
 +
 
 +
* The nanocaust and zombification death effects no longer work on any targets that have on-death effects of their own.  So this would mean that they can't zombify a zombifier, or a metabolizer, or a nanocauster.
 +
 
 +
* Nanocaust Aberration and Abomination units now have a more suiting mass of 4, granting them immunity to all current paralysis weapons.
 +
** The new Warbird would...be able to stun these pretty heavily.
 +
 
 +
* All drone units decay much faster without their parent ship being on the same planet, up to 1% per second from 0.1% per second.
 +
** These should now decay at a reasonable rate, instead of in about 15 minutes.
 +
 
 +
* The health and shields of metal harvesters has been reduced to 1/10th its previous value.  They were too tanky!
 +
 
 +
* Added a new "should_never_be_captured_by_another_faction" tag, which is set to true for all the macrophage entities at the moment.
 +
** This tag can be freely applied to any minor faction entities that you want to be sure don't get zombified or nanocausted.
 +
** This should never be used for a general player-and-AI-available fleetship type or anything like that.
 +
 
 +
* At the start of new games, the macrophage and nanocaust planets are cleared of all AI units that aren't some sort of special capturable/claimable.  They no longer have to work for their starting planet at all, with it being assumed they've already conquered it.  All their initial efforts in the game thus now go to expansion and harassing their (probably AI) neighbors.
 +
** Actually, now the nanocaust NOR macrophage use this, but the code is available for any factions in the future.  The idea was that it would be nice to be able to see those factions more easily near the start, but Badger informs us that they prefer to start with a planet full of AIs to eat...
 +
 
 +
* Corrected two nanocaust weapons that didn't have the nanocaustation death effect.
 +
 
 +
==== Brownouts! ====
 +
 
 +
* Brownouts!  When net power is negative, all your bubble shields now go down.  Just like AIWC.
 +
 
 +
* Autotargeting and AIs now strongly lose interest in shield generators that are down (hey let's shoot the things under them instead!)
 +
 
 +
=== Bugfixes ===
 +
 
 +
* Put in a number of method renames that make it clear which methods are on the main thread and which are on background threads, when it comes to factions.  Even I kept forgetting.
 +
 
 +
* Put in some changes to make it clear if the GetDistanceTo() method is expensive or cheap, and how accurate it is, along with adding inaccurate-but-good-enough versions.
 +
 
 +
* Added a bool to the GetDistanceTo() variants to include the radius or radii of the ship(s) in question in the calculation, since the distance from point to point center of the ships can often be non-ideal when you don't know how big a ship will actually BE.  Better to measure the gap between the outside of their respective circles, in that case.
 +
 
 +
* Fixed a bug that was leading to some ships having waaay too many targets calculated for themselves.
 +
 
 +
* Fix a bug where the Special Forces AI Type was using the Tsunami AI Type's budget allocations
 +
 
 +
* Prevent the player from blowing up Exogalactic Wormholes
 +
** Thanks to HeartHunter for trying this
 +
 
 +
* Fix a null reference exception when spawning Exogalactic Wormhole waves
 +
** Found thanks to HeartHunter's save game
 +
 
 +
* Fix a bug where Mercenary Objectives would make things look really weird in the Objectives Menu
 +
 
 +
* Combat on Nanocaust or Marauder planets will now play the "Combat on Hostile Planet" audio cue
 +
** Thanks to Puffin for reporting
 +
 
 +
* Fixed a bug in the main menu that was actually letting you click into the join multiplayer game menu, which is still flagged as coming soon.
 +
** Thanks to Varacka for reporting.
 +
 
 +
* '''Fix the bug where players ships were wandering at random over the map.'''
 +
** Pretty sure everyone noticed this.
 +
 
 +
* Fixed a bug where drones were being built in far too large of quantities, leading to accidental "borg cubes" of marauders, along with mega-migrations of Tethuida drones and the like.
 +
** The actual core bug here was a PlannedMetalFlow object being added to two different queues, and when being removed from one being put back into the pool.  It now make a copy of itself for each queue, because otherwise there's no way to cleanly know when all references to it are gone.  Yes, this was another pooling-related incident.
 +
** Frankly who knows what else this was messing up, because this was at the core of how metal is spent by player units, and then how the AI factions build drones.  It wouldn't have messed with any other parts of the AI, but player construction and repair may have been wonky in ways too subtle for us to notice, we're not sure.
 +
** Thanks to zeusalmighty, BadgerBadger, RocketAssistedPuffin, and Ovalcircle for helping out on this one!
 +
 
 +
* Fix a bug where Mercenaries weren't spawning all of their allowed units
 +
** Thanks to Puffin for reporting
 +
 
 +
* Fixed a logic inversion that would ONLY let you scrap the player starting forcefield, not everything but it. ;)
 +
 
 +
* Fixed several issues where autotargeting would choose units that were dead or not yet claimed (belonging to no one), or would keep firing on something that was dead or not yet claimed after it died.
 +
 
 +
* If any units would be killed by having their balance changed, then make sure to keep them at low health instead of killing them.
 +
 
 +
* Put in the equivalent of a "relief overflow valve" on the faction seeding, which should prevent the issues with seeding sometimes failing.
 +
** Thanks to Ovalcircle, RocketAssistedPuffin, and malkiel for reporting.
 +
 
 +
* Additionally, put in a check for if all the potential targets for a faction are right next to the player homeworld, then it tries to use a different method of calculating potential target spots since that's likely bad map pathing data for some reason.
 +
** Thanks to Ovalcircle, RocketAssistedPuffin, and malkiel for reporting.
 +
 
 +
* Fixed the bug from the last few versions where units would not properly rally to their control group once they reached the planet in question, but rather would just hang out at the wormhole.
 +
 
 +
* Fixed a bug with attack-move (X+right-click) where units were stuttering along and not moving much because of how the targeting cooldowns were altered.
 +
** Thanks to Puffin for reporting.
 +
 
 +
* The "stale unit icons" blipping to a different location for a moment when entering a planet should be fixed now.
 +
** Please let us know if you see it again, though, and if it seems to be a thing for shots as well.
 +
 
 +
* Make the Debug: Send Wave code work again
 +
 
 +
* Fixed a variety of bugs that were causing AOE effects to rarely (though sometimes in the case of grenades!) show visibly in recent versions.
 +
 
 +
* Fixed a bug where the nanocaust was frequently forgetting to be hostile to the AI.  Neutral just doesn't cut it!  So the nanocaust would just kind of chill uncomfortably on the AI planets while they eyed each other menacingly.
 +
** This same bug was technically present in the marauder, macrophage, and devourer code, although it didn't seem to be actually manifesting.  Nonetheless, a fix has been put in.
 +
*** The nature of the bug was that if the allegiances ever switched from the default (supposedly hostile), then they'd never switch back.  Now it explicitly makes sure that it's hostile in the same way that it explicitly makes sure it's allied when it's friendly to players, etc.
 +
 
 +
* Also added in a piece of logic for when the nanocaust is trying to decide whether or not to build a nanobot center: if the nanocaust is stronger than the planet it's considering, then it just takes the planet without trying to decide if it meets the optimal criteria beyond that.  The other criteria comes into play if the nanocaust wants to potentially take a planet but thinks it might be a bit weaker on paper.
 +
 
 +
* Previously it was possible to get literally a dozen or more simultaneous notifications about the nanocaust preparing to frenzy against a planet if they had built up too many fleets at one time for whatever reason.  Now it only gives you one notice per planet.
 +
 
 +
== Version 0.773 Terrorized By An Infinite Loop==
 +
(Released September 18th, 2018)
 +
 
 +
* AI Eyes will now tell you how many many more units it will take to Alert them in their hovertext.
 +
** Thanks to tadrinth than TheVampire for suggesting
 +
 
 +
* Some minor tweaks to the Eye description appenders to make them work nicely for units w/o external invulnerability. Make the Eyes very flimsy once they lose external invulnerability
 +
 
 +
* Clarifies that Stingrays, Siege Starships, Plasma Guardians and Dire Plasma Guardians only do bonus damage against bubble forcefields.
 +
 
 +
* A new xml option, is_scrapping_by_player_disallowed, has been added.  Entities with this set to true can no longer be scrapped by the player.
 +
** The only place this is used right now is on the starting forcefield that you have, which would be a super huge pain to delete by accident.
 +
 
 +
* There are now messages shown when you try to scrap something that is disallowed, either by the new flag, or because it is an Ark or a Home Command Station.
 +
** This way you actually know why the scrapping didn't happen.
 +
 
 +
* The tutorial should prompt you to build a new energy collector if you run out of energy
 +
** Thanks to Ovalcircle for reporting
 +
 
 +
* New popup text messages for Dyson Antagonization/Deantagonization, Instigator Base Spawn, Dark Spire Vengeance Strike, Dark Spire Locus Spawn, Wormhole Invasions and Exogalactic Strikeforces since these are important events. Also hook up Audio cues for when those get recorded.
 +
 
 +
* The tooltips for ships now show how long it will be until the ship finishes reloading if it is presently reloading (per system, of course), and also shows the last time the ship fired a shot, the last time a shot fired by the ship hit its target, and the total damage done the last time the shot hit.
 +
 
 +
* If a shot does zero damage to a target, it now returns an abort code that is displayed in the tooltip for ships doing zero damage.
 +
 
 +
* Ships now show on their tooltips reason for their failure to fire if they are trying to fire but not able to.
 +
 
 +
* Ships that are in FRD mode and have auto-target items available but NOT a FRD target will now use one of their autotargets as their FRD target.
 +
 
 +
* While hovering over a ship that belongs to you, you can now see its autotargeting lines in purple-green if you hold down shift.
 +
 
 +
=== Performance ===
 +
 
 +
* Now that we're pooling GameEntities, we no longer have to worry about memory leaks from references that are held too long.  Which is nice, because now we can hold references directly more often without fear... except the new problem is that entity might return to the pool and thus become invalid.  Due to this, we now have a SquadWrapper struct that can keep track of the ID of the entity and the entity reference itself.  Since these go on the stack instead of the heap, they can be created and thrown away without consequence.  And since these keep track of the ID separately from the entity reference, we can compare the ID on the entity to the original stored ID to see if that changed and thus the entity has gone back into (and come back out of as something else) the pool.
 +
 
 +
* We're using SquadWrapper for our various forcefield-bubble protection logic now, and it's roughly doubled the performance in our insane test savegame that has 63 forcefields on one planet.  That's still only moving the needle from 10% to 20% of full gamespeed, and we don't plan on allowing that huge number of bubble forcefields to be in place long in general in the game for a variety of reasons.  But wringing out all the performance we can out of that particular woe begotten example will keep other scenarios running faster.
 +
 
 +
* The way that AI entities check for re-absorption into the things they are guarding is now a lot more efficient.
 +
 
 +
* The way that units keep track of the squad they are guarding or the squad that is coordinating them is now vastly more efficient.
 +
 
 +
* Put in some more changes to the shot target tracking and forcefield-hitting that basically double their performance again.  Our prior savegame example that was at 10% now gets up to 40% after a few minutes, up from 20%ish prior to this change.
 +
 
 +
* A few more improvements have been made regarding shields, particularly in terms of how frequently their radii are calculated.  This gives a minor performance bump.
 +
 
 +
* A methodology change has been made to how the items are removed from lists during the target sorting cycle.  This makes the background thread for that far more responsive.  Previously in our example insanity test case it was taking 40+ seconds to execute, but now it takes about 13 seconds.  In general it takes under 1 second in most saves, and we want it under 5 seconds in all saves if we can at all help it, but this is a big step forward either way.
 +
 
 +
* The way that the speed of shots and ships is calculated is now a lot more intermittent, leading to yet another decrease in CPU load on repetitive calculations.  This also should solve a nullref exception that could happen on background threads.
 +
 
 +
* Some fairly tame updates to control group performance/code-clarity.  The code is now less ambiguous about the function of a few things that were easily misread previously, and there are now fewer lookups required in order to get the contents of a control group, etc.  SquadWrapper to the rescue again on that part.
 +
 
 +
* Throughout the game, the strength value is internally tracked as an int32 now instead of a fixed-integer (FInt, based on int64).
 +
** This creates a massive performance boost for a lot of the background threads (not targeting or decollision, sadly), at the cost of some mild precision that we were likely not using in the first place.  If any of the factions start having a bit of trouble using very small budgets, that should be the only real ill effect.  But it's not likely they were doing that, anyway.
 +
*** Obviously it's also possible that we simply made a typo in here at one point or another, or converted something to an int32 that should have stayed FInt, and that will bear itself out in the behavior updates.
 +
** Our lockstep strength-calculating code was one of the biggest slowdowns (behind protection calculations) to the simulation, and it now should range from 2x to 5x faster simply by virtue of how much faster 32bit math is.  For reference, see the table here: https://msdn.microsoft.com/en-us/library/ms973852.aspx
 +
** Essentially, we were using FInts for these because we thought we would need to talk about them in smaller increments than we do.  For things like science collection and metal income and storage and whatnot, we still use FInts because we still need that precision.  But metal and similar doesn't get literally multiple millions of calculations per second, unlike the various strength fields.
 +
 
 +
=== Bugfixes ===
 +
 
 +
* Fixed a bug where entities could remain selected beyond death, and even beyond exiting to the main menu and coming back.
 +
** Thanks to Ovalcircle for reporting.
 +
 
 +
* The way that unit selection works has been rewritten pretty heavily.  It's more efficient now, and the new method should also solve a number of bugs relating to things still being selected when they should not be, or mistakenly suddenly taking action, etc.
 +
** These are also now using the new SquadWrapper struct, which is useful although not wholly imperative to the new method.
 +
** Please let us know if any of the cases that were reported previously still are or are not present in this new version.
 +
 
 +
* Fix a null reference in AI Long Range Planning.
 +
 
 +
* Fix typo in Dyson Sphere description
 +
** Thanks to Ovalcircle for reporting
 +
 
 +
* Don't allow the AI to try to spend 0 budget. This prevents 0 size Waves during the Tutorial.
 +
** Thanks to Ovalcircle for reporting
 +
 
 +
* Fixed a nullref that could happen in the new Wrappered Squads.
 +
 
 +
* Fixed yet another nullref exception that could happen with SquadWrappers getting bad data.
 +
 
 +
* Fix another null reference exception in DecollisionPlanning
 +
 
 +
* Some debug checking has been put in place in the only location that DataForMark can be set to null.  It should never be null within the game, but it sometimes definitely has been, so we want to find out more about where it's being called from that is resulting in that.
 +
 
 +
* Put in protection against a potential infinite loop in selection logic.
 +
 
 +
* Put in a couple of more nullref protections.
 +
 
 +
* Fixed a nullref in the updates for external invulnerability.
 +
 
 +
* Fixed the game's background threads to never report ThreadAbortExceptions anymore, since those are always valid.
 +
 
 +
* Fixed the game's background threads to potentially do some better reporting of unhandled errors in general.
 +
 
 +
* Put in code to prevent and catch two different kinds of vis layer exceptions that could happen.
 +
 
 +
* Fixed some possible nullrefs in ListAvailableMercenaryGroups.
 +
** Thanks to Ovalcircle for going the extra mile and discovering this one hidden deep in his logs.
 +
 
 +
* Added a new ControlGroupVisualIndex field onto control groups that lets us tell the player the correct number on the interface.
 +
** Thanks to RocketAssistedPuffin for reporting.
 +
 
 +
* Put in a couple of fixes to make ships not target other ships that are temporarily invulnerable, such as Eyes, etc.
 +
 
 +
* Fixed several cases where the forcefield effect might not have been played properly.
 +
 
 +
* Fixed several issues where ships would try to target dead things or think about shooting dead things for too long, etc.
 +
 
 +
* Fixed a bug in the auto-targeting indexing logic that was causing it to return null a ton and thus not really progress battles much.
 +
 
 +
* Added NonSimPermanentUniqueID for use in Target List Planning.  Notes for programmers (which are in the code as comments):
 +
** This field can ONLY be used in long-running threads.  It should be used as a unique identifier INSTEAD of PrimaryKeyID, but only in the non-sim contexts.  Really only in the continuous long-term planning. 
 +
** If the primary key is used in the continuous long-term-planning sorts, then "System.ArgumentException: Unable to sort because the IComparer.Compare() method returns inconsistent results" is likely to happen randomly as the PrimaryKey gets reprovisioned.
 +
** Reprovisioning can only happen in between runs of the intermittent long-term threads and the short-term threads, and is on the main thread synchronously, so all other places are free to sort on PrimaryKey.
 +
** Note that NonSimPermanentUniqueID is NOT consistent between machines, so sorting on this or in any way using it in a sim-contained context will cause a multiplayer desync.
 +
 
 +
* Better exception logging has been added to TryWiringUpShotToTarget(), although we didn't see any actual location where a nullref made any sense.  We had one instance of that happening, so the added debugging code will help us find that and stop it in the future.  In the meantime, hitting ignore when this comes up and continuing to play will not affect your simulation's correctness.
 +
 
 +
* Implemented a new LazyLoadSquadWrapper, which is basically like the SquadWrapper class except that it only loads the squad references when needed.  This is ideal for the targeting data, where we want to spread the load around.
 +
** This doesn't really help performance or anything, but it does help to guarantee correctness in some places where previously we were able to have some bugs because of implementing the lazy-loading logic manually.
 +
 
 +
=== New Units ===
 +
 
 +
* Adds the Temperamental Guardian.
 +
** Transforms to a Tantruming Guardian when the AI is outnumbered on the same planet, and reverts once no longer outnumbered.
 +
 
 +
* Adds the Fragmenting Guardian.
 +
** Transforms into 8 Shards when the AI is outnumbered on the same planet, permanently.
 +
 
 +
=== Balance Tweaks ===
 +
 
 +
* Macrophage Harvesters mass down from 5 to 4.
 +
** These were dying en masse in testing to Arachnid Posts and mostly being inactive as a result.
 +
 
 +
* Increases the damage of the Tritium Sniper Starships railcannon from 110 to 330.
 +
 
 +
* Massively boosts Gryn, The Void Homes dock build speed.
 +
** It was slower than even a single Mobile Space Dock - now it's faster than three of them at Mark 1, comparable to a normal Dock. Still builds Starships slower, however.
 +
 
 +
== Version 0.772 Eye See You ==
 +
(Released September 16th, 2018)
 +
 
 +
* Fix a bug where the Encapsulated Map Type had its planets too close together. This was causing errors during mapgen and looked very cramped.
 +
** Also spread the planets for the Maze, X, Wheel and Honeycomb map types
 +
** Thanks to Ovalcircle for suggesting
 +
 
 +
* Fix a few null references in Decollision and in MoveManyToMany.
 +
** Thanks to Puffin for reporting
 +
 
 +
* Put some performance improvements in place that prevent pointless recalculation of certain things during ship targeting.  In general saves a lot of lookups, mainly.
 +
 
 +
* Fixed a silly comparison operator inversion that was causing radius-based AOE attacks to completely fail.  Including Artillery Golem, among others.
 +
** Thanks to Puffin and HeartHunter7 for reporting.
 +
 
 +
* That "handy" logic for keeping cloaked units from firing unless they're in FRD mode or have explicitly been given an order is now non-player-only.  It was causing confusion with player ships that would just sit there when they seemed like they should be shooting.
 +
** We'll be implementing the disabling of ships AIWC-style for players handling cloaking raids.
 +
** For non-player ships, it still uses this logic because the AIs and similar know how to use it just fine.
 +
** Thanks to HeartHunter7 for reporting.
 +
 
 +
* Fixed a few dozen ships, guard posts and raptors included, which were using a shot_speed of instant, which meant that their shots visually reached the target instantly and thus never animated at all.  This was super duper confusing.
 +
** Thanks to HeartHunter7 for reporting.
 +
 
 +
=== The Return of AI Eyes! ===
 +
 
 +
* Add AI Eyes, starting with the Ion Eye and Plasma Eye
 +
** An AI Eye is invulnerable as long as any Guard Posts are left on the planet
 +
** If the AI outnumbers you on the planet, the Eye will do nothing. If you bring too large of a force over it brings the AI's full attention to that planet and the Eye will transform into a very powerful defensive structure. Once your force is sufficiently reduced, the Eye will become idle again.
 +
 
 +
=== Balance Tweaks ===
 +
 
 +
* Unifies all bubble forcefields found so far to be 85mm armour - immunity to all armour stat based weapons.
 +
** These are mainly shield based - so the armour thickness shouldn't matter much. There is the new anti-bubble-forcefield mechanic in place too, so that takes over the role.
 +
 
 +
* Shifts a fair bit of Devourer hull to shields - lets it have more guaranteed regeneration against Mass Drivers. Means it won't accidentally die to them somehow.
 +
 
 +
* Stingrays damage reduced from 100 to 90.
 +
** A little too good at their job.
 +
 
 +
* Shredder Drones from Dire Guardians and Posts damage increased from 700 to 2000.
 +
** Bit weak for a Dires main damage source.
 +
 
 +
* Pike Corvette damage reduced from 60 to 50.
 +
** The new MLRS! A constant thorn.
 +
 
 +
* Turret strength halved except for the Beam Cannon, which is reduced by 25%.
 +
** These were seeming too high, so the AI was never confident in attacking even if you only had a small group.
 +
 
 +
* Fortresses MLRS weapons have had their damage tripled - the plasma cannon doubled. Metal cost increased 50% to make these actually a bit more of a resource strain.
 +
** Fairly lackluster.
 +
 
 +
* Metal Harvesters give 100 metal, down from 120, and only gain 100 per mark.
 +
** Everyone is just too darn rich!
 +
 
 +
* Normal Guard Posts have had damage mostly tripled.
 +
** Still too weak - Arachnids should now almost one shot an equivalent mark Starship.
 +
 
 +
* Orbital Mass Driver damage doubled from 300,000 to 600,000. This helps it not simply be a barely stronger Arachnid Post, when said Post is at higher marks.
 +
** With the above Devourer change, these'll take 20 shots just to get through the shield. At a reload of 17s...I don't think the Cookie Monster will have issues eating these.
 +
 
 +
* Some damage boosts to a few Dire Guard Posts to make the normal ones not become better than them at higher marks.
 +
** Apologies.
 +
 
 +
* Turrets have health very slightly reduced, but in turn their energy cost also lowered very slightly.
 +
** These just don't die, yet take so much energy that having a few really hurt the power budget.
 +
 
 +
* Tractor Turret now grabs 41 units instead of 32, and Gravity Generators now slow slightly less, but in a wider area.
 +
** Testing showed that Tractors grabbed so few that it was always superior to use Gravity instead. This should differentiate them a bit more, with Tractor being a smaller, complete stop, and gravity being a wider slow.
 +
 
 +
* Firerate tweaks to Arachnid and Dire Arachnid Guard Posts.
 +
** Normal ones should fire slower, while Dires fire faster.
 +
 
 +
== Version 0.771 Cleanup Aisle 1 ==
 +
(Released September 15th, 2018)
 +
 
 +
* For purposes of debugging, and it's just useful in general, the game now shows what your units are doing and why when they are moving, decolliding, or heading to a wormhole to another planet.  This may or may not stay on all the time in the future.
 +
 
 +
=== Yet More Performance Improvements ===
 +
 
 +
* Keith's high-performance "ArcenMob" class, which is used on PlanetFactions to keep track of their entries, now does automatic "packing" of its entries over time in rolling updates in order to keep performance from degrading over time based on lists that get too large.
 +
** Generally speaking it takes a couple of minutes to get through the entire list at the moment, but it does it nice and slowly like this in order to avoid actually worsening performance during the packing.  Think of the packing basically like defragmenting a hard drive.
 +
 
 +
* Added a small performance improvement to how we look up where the wormhole is that ships are going to go through in order to do a wormhole move order.
 +
 
 +
=== Bugfixes ===
 +
 
 +
* Fixes being able to select Armor Drone, Raider Drone and MLRS Drone as bonus ships in the lobby.
 +
** Thanks to zeusalmighty for reporting.
 +
 
 +
* Show shot-hitting-shield visual effect when the target has a bubble shield.
 +
 
 +
* Normal Guardians are now a fair bit bigger to not be so tiny, even at Mark 5 next to a Dire of the same type.
 +
** Thanks to Ovalcircle for a comparison picture and pointing the amusing situation out.
 +
 
 +
* Put in what should be a fix to the ShotVisualizer.DoMainUpdate nullref exception that started happening in the prior build.
 +
 
 +
* Fixed an issue in the prior build of the game where the stance of entities, and their orders, could be erroneously carried over to an unrelated entity after one entity dies.  This was most notable when you use rally to point or rally to control group, and would get worse the longer you played.
 +
 
 +
* Fixed a very longstanding issue where entities with orders to rally to a control group or to rally to a point would not properly forget about those orders if you gave them new orders.  We've had a variety of complaints about this for a while, but they should all be fixed now; please let us know if not.
 +
 
 +
* Logic has now been put in that should pretty much always override the decollision movement orders when you're giving your ships new orders.
 +
** Thanks to HeartHunter7, Badger, and Puffin for reporting.
 +
 
 +
* When ships are within range 2000 of a wormhole that they intend to go through, they will now disregard any decollision orders, and will not be given new decollision orders until they are through.
 +
 
 +
* Entities are now better about discarding invalid wormhole pathing orders that may accidentally happen largely due to timing issues between issuance of the order and calculation of the order.
 +
** Additionally, if entities shifted planets between this period, they now properly skip the orders.
 +
 
 +
* Also fixed some cases where ships from other planets could be given orders as if they were on your current planet.
 +
 
 +
* Fixed the various errors people were getting in Helper_AddAssistLines starting last build.
 +
** Thanks to HeartHunter7 and Badger for reporting.
 +
 
 +
* Fixed quite a few issues with the decollision logic that were making it less accurate than desired, particularly when there were really huge groups of units.  The units also now react more rapidly to being in collision with one another, and have a bit more of a contact buffer between each other when at all possible.
 +
 
 +
=== Balance Tweaks ===
 +
 
 +
*Golems should no longer be engine stunnable by Spiders - V-Wings will still affect them however.
 +
 
 +
*Autocannon Minipods, Ablative Gatlings, Stingrays and Etherjets have their strength halved.
 +
** These are Swarmers, so the AI should be able to buy more of them on the same budget than other ships.
 +
 
 +
== Version 0.769-0.770 Thinking Long-Term ==
 +
(Released September 14th, 2018)
 +
 
 +
* The escape menu now shows the Warden Fleet and Hunter Fleet settings, as well as the current Wave/Shark Plot settings.
 +
 
 +
* The Dark Spire and Mercenary Beacon hacks should now actually cost hacking points
 +
** Thanks to Ovalcircle for reporting
 +
 
 +
* The damage dealt by "fusion reaction" shots now clarifies itself that this does NOT include bubble forcefields.
 +
** Additionally, when firing on a bubble forcefield generator it has no effect (previously it treated it like a personal shield when damaging it).
 +
** This was confusing a lot of folks, but then when we tried to make it bypass personal and bubble shields it got even messier, so this solution worked out for the best.
 +
 
 +
* FINALLY fixed that insane bug with the ships flying across the planet all of a sudden when they are first added to planets, particularly through wormholes, etc.  If you see any more instances of it, please let us know, but it should no longer be possible.
 +
** Thanks to RocketAssistedPuffin, Badger, and others for reporting.
  
* The tutorial is currently a not as comprehensive as it could be.
+
* Fixed the mark 2 versions of pretty much all ships with increasing effects like slowing and whatnot or even salvage recovery still being the same as their mark 1 counterparts (but mark 3 and up were correct).
 +
** Thanks to RocketAssistedPuffin for discovering this.
  
* '''Multiplayer is temporarily disabled''' while we focus on tightening up the single-player loop.
+
* Fixed a bug where AIP was not being applied appropriately if it was on the death of a non-AI-owned entity (such as human cryo pods).
 +
** Thanks to RocketAssistedPuffin for reporting and guessing correctly what the issue was.
  
* There are still a bunch of ships that we either want to re-implement, or new ideas that we want to implement for the first time.
+
* Fixed up the on-death logic for ships so that parts of it never get skipped because of errant return statements.
 +
** With the AIP increasing logic, that just meant putting it into a sub-method.
 +
** For the faction-specific checks, that meant putting them into a sub-method that is now faction-specific.
 +
*** This also has the dual benefit of making this part of the death logic properly moddable, and not having faction-specific code embedded directly in the central ondeath method (since factions may be added from other dlls or locations in general).
 +
**** Note that for the AI sentinels, since those are so absolutely central, we're not moving those out of there; the bits that are there relate to salvage, which is a core game mechanic.
  
* There are a variety of ships/units that don't have proper graphics or reuse icons at the moment.
+
* When there are exceptions in GameCommands that get sent, then it now dumps the data from the GameCommand in question so that we can more easily debug it.
 +
** You can also now use the WriteToStringInefficient method to write the details of a game command prior to sending it in order to check that it is the same on the sending and receiving side, or for whatever other reasons.
  
* There is not an in-game way to see and edit the control bindings yet.
+
* When the game signals it wants to exit, the application now does a better job of cleaning up its background threads.
** But you can go into the created bindings file inside the PlayerData folder to edit them in a text editor.
 
  
== What's this phase all about? ==
+
* Fixed an issue that could happen in rare instances in the "finding what to protect" background thread logic.
  
Initial thought process was described on Steam: [https://steamcommunity.com/games/573410/announcements/detail/1732082664630714967 "Retrieval of the Lost Arks" Plus an Essay, Apparently.].
+
* Astrotrains can now spawn drones properly.
 +
 
 +
* Fixed a bug where some of the AI ships were showing up with their tooltips looking like they were on the tech upgrade screen (oops).  Particularly shield generators.
 +
 
 +
* If the AI is unable to use elements of its budget, it instead spends that income on Reinforcements. An example of this is that if you have disabled reconquest waves (or the AIP isn't high enough to allow them yet), the AI will get extra Reinforcements to compensate.
 +
 
 +
* Instigator Bases are now constrained to spawn at different distances from the player depending on the AIP. Lower AIP means closer instigator base spawns.
 +
 
 +
* Ships that self-damage themselves to death can now leave remains like anything else.  Aka minefields.
 +
 
 +
* When a wave is cancelled, allow some of the strength of that wave to also go to the next Wormhole Invasion as well as to benefit the next wave.
 +
** Currently it allocates very little strength to the next Wormhole Invasion, and this is added mostly as a balance lever in case we need it moving forward.
 +
** Thanks to HeartHunter for figuring out how to very efficiently exploit the Wave Cancellation mechanic
 +
 
 +
* Fix a bug with the tutorial where you could get stuck in the Scouting phase.
 +
** Thanks to Ovalcircle and Unicursor on Steam for reporting
 +
 
 +
* Command Stations now take longer to build (45 seconds w/o engineers).
 +
** Thanks to HeartHunter for this
 +
 
 +
* Recalculate planet ownerships immediately after the Usurper captures it. This way if the AI has multiple usurpers on a planet eligible for capture, only the first one will actually do anything.
 +
** Thanks to HeartHunter for the bug report
 +
 
 +
* AI Budgets can now be spent either on a strict time interval or "whenever they accumulate enough budget". This distinction is set in the XML. Player facing things operate on a time interval (Wave, CPA, etc), and AI internals (Reinforcements, Special Forces, etc) are done on a budget basis. Note that Reconquest is done on a budget basis because that's primarily gated by finding a suitable planet to attack.
 +
** Events on a Time Basis will now sometimes delay themselves a little bit, just to make things a bit less predictable. 10% of the time, an event will delay itself by 10%. So if your waves are on a 10 minute timer, a wave might come at 11 minutes, or a CPA on a 2 hour timer might come at 2 hours and 12 minutes (and these will be a bit stronger as a result).
 +
** This fixes a problem where some events were happening much more frequently than desired.
 +
   
 +
=== New AI "Verb": Wormhole Invasions ===
 +
 
 +
* Add support for Wormhole Invasions. These are sudden Behind-Your-Lines assaults by the AI through Exogalactic Wormholes. They are intended to be scary, unpredictable and hard to defend against. They are also infrequent, and will not happen more often than once per hour.
 +
** The AI has a new budget type for Wormhole Invasions (to go with Waves, Reinforcements, etc). To spend that budget, it will spawn an indestructible Exogalactic Wormhole will appear on a player's planet. This wormhole is unstable and will disappear in a few minutes. The AI will launch a number of attacks through it. Sometimes it will launch lots of weaker attacks, other times fewer but larger attacks.
 +
** You will get a Notification while the Wormhole Invasion is active, but a minimal time warning when the attacks are actually coming (30 seconds currently).
 +
** The Wormhole Invasion will prefer weakly defended planets behind your front lines
 +
** Exogalactic Wormholes can also be used to spawn regular waves.
 +
** Wormhole Invasions are only available to the AI at Difficulty > 4, and it's gated behind AIP then (right now Difficulty 7 requires 160 AIP for the Invasions to start).
 +
 
 +
=== More Multithreading Work ===
 +
 
 +
* Some of the nesting of background threads has been removed, at least for now, and this seems to result in more consistent usage of more cores on the CPU.
 +
 
 +
* The "long term planning" threads have been split up into "intermittent" ones (like we have had for a long time) and new "continuous" ones (now used for decollisions and targeting logic.
 +
** This split of the logic allows us to control the timing better, and to have targeting run in about 4s instead of 25s (in our test case), still without unduly blocking anything.
 +
 
 +
* Since it's possible that some of the background threads were getting stuck (or something) for players that were seeing unusual AI behavior, we now have a variety of extra readouts on the escape menu's performance section relating to periodic activities.  If any of those numbers is stuck and the game is unpaused, then something is probably wrong.
 +
 
 +
* The game now supports having non-faction-based "long-term planning" threads, which are basically "thinking threads" that run only on the host in a multiplayer game (or the sole player in single player), and which do some calculations that are too slow to do in realtime lock-step of the simulation.
 +
 
 +
=== Epic Decollision ===
 +
 
 +
* The decollision logic has now been moved to be a long-term planning thread, and has been improved a bit since now we have some extra processing power.  Rather than ships just moving to a random nearby spot, they actually check to see if the spot is empty first and check for another up to 9 spots before giving up and waiting until the next decollision cycle if so.
 +
 
 +
* A large number of the GameCommand variables have been condensed and/or stripped, to make for better efficiency in multiplayer and a bit in single-player as well (serialization efficiency only matters in MP, but in SP the memory footprint and instantiation speed matters).
 +
** One thing that is new is that it can take an array of points, rather than just one point.  This in turn allows us to have two move commands: one that is sending a bunch of entities to one spot, and another that is sending a bunch of entities to different spots.  Very efficient, and incidentally used for decollisions.
 +
** Another improvement is that all of the lists on this start out as null unless they are used, which is purely an improvement in memory footprint and instantiation speed.  All of the existing places that used those lists should be properly updated, but if we run into any nullrefs we'll know we missed a spot.
 +
 
 +
* Now that our decollision logic is on a non-sim-coupled thread, we can do all sorts of crazy logic in there that is CPU-intensive (and then it's simply spread across cycles/time, versus slowing down the simulation).  With this fresh power, the game now makes a lot of effort to offset ships that are overlapping and heading to a similar destination.
 +
** This should, for example, get them to not travel inside large ships that are heading the same way except in some corner cases where they start near the same place but one is heading further than the other in the same direction.
 +
** This also spreads out the ship graphics and the icons substantially more, making it so that's a lot easier to tell how many ships there are in a given area.
 +
** For some ships that are slower and have a fairly small radius, if they are in a big clump as they try to navigate a long string of queued movement commands that a player defined, you'll find that they wind up having trouble getting around various corners because of the desire to spread out.  This is again a very corner case, and probably isn't worth throwing more CPU power at.
 +
** Please let us know if you experience any issues from this, or if it doesn't hit all the main cases that folks were reporting of ships stacking up too much.
 +
** Thanks to Badger, and folks on Discord, for bringing this up.
 +
 
 +
=== Targeting Overhaul ===
 +
 
 +
* Put in a small targeting change that should make it so that multi-shot units with direct attack orders will fire at more than their direct target (since there is a limit of one shot per target).  Needs testing to be sure it works.
 +
 
 +
* Adjusted the GameCommand object to allow for a couple of new arrays of integers, which we'll be using in some upcoming more-complex internal commands.
 +
 
 +
* Also updated the GameCommand object so that the central list of related entities now starts off as null, which lets us initialize it to the size we need, or not initialize it at all.
 +
** This may lead to some breakages somewhere unexpected in the code, but they'll be quick fixes if they do happen. (Knock on wood).
 +
 
 +
* On the client side (or execution side on server/solo player), the game is now far more efficient at initializing the sizes of the lists of things on its GameCommands that it is deserializing. On the server/solo side, in places where the list size is such that size matters, we can also initialize those more efficiently.
 +
 
 +
* On entity systems, we now calculate a TheoreticalMaxDamage, and also a MaxDamageMultiplier.
 +
** For ion systems, TheoreticalMaxDamage is fairly nonliteral.
 +
 
 +
* We now have a way of checking for the amount of damage a system will do to a target, ignoring all outside global factors, so that we can normalize it against the TheoreticalMaxDamage.
 +
** This will be used in the new target sorting logic.
 +
 
 +
* Targeting logic has been completely rewritten from scratch, and is now based on a combined "weighted factor" ranking of potential targets, rather than just various sorting algorithms.
 +
** This ranking is also now done on a non-sim-bound background thread, so it doesn't hold up the execution of the simulation while it is happening (thus freeing up the simulation to run faster).  In multiplayer, this thread runs only on the host.
 +
 
 +
* As part of the targeting overhaul, all the old target_sorter options are now gone.  There's a new, optional, added_target_evaluator instead.
 +
** Normally this can be skipped if you just want ships to do their best general targeting to maximize damage, hit the most important targets, the targets closest to them, etc.
 +
*** There is also specialized logic in here that should make it so that things that shoot beam weapons that intersect all targets will prefer things that are in-range but farther away.
 +
*** And in general we will be able to expand on the general "standard target scoring" without too much trouble.  This sort of thing won't need a custom evaluator for every possible ship case or anything like that.
 +
** That said, in some cases we want to focus on something else other than the usual weightings... at least partially.  In these cases, the added_target_evaluator can add either a major or minor extra bit of weight to some other factors that ships don't normally consider.  This is almost universally about special abilities, or in some cases some kind of handicap that the ship itself has.  The ones so far:
 +
*** EngineDamageAsMinorPart: Used for things like V-Wings that partially stun engines of ships they hit.  They'll prefer to spread their stun around, all else being equal.  Assuming the targets are weak to their stun.  If not, then they focus like normal on damage dealing.
 +
*** EngineDamageAsMajorPrimary: Used for spiders and the that are hugely about stunning and stopping target engines.  These try very hard to actively murder the engines of targets, and spread it around, with damage becoming a secondary concern to these folks.
 +
*** ParalyzerAsPrimary: Same as the engine damage as major priority, but this time dealing with paralysis.  Paralyze as much of the enemy as possible!
 +
*** Melee: Adds in a preference for ships that are slower than us.  The slower the better, although it's a minor addition.  This way if we're chasing things, we can actually catch them and hurt them.  Of course things that are closer and that we can hurt more get a general priority from the central logic, anyway.
 +
 
 +
* The logic for "Attackers" on the AI side, or "free roaming defenders" on the human side, is now wholly contained within the vastly-smarter external targeting logic that is also used for auto-targeting in general now.
 +
** This makes all of the ships act far smarter, and the entire flow of the battle just feels instantly different from what it did before.  It's also higher-performing than before, funnily enough.
 +
** Additionally, now the ships hang onto a target of this fashion only for 30 seconds, and then after that they think about whether there might be a better target or not.  Previously it was keeping them on the existing target until it died or became invalid in some fashion.
 +
** Additionally, if they have a sniper-style weapon, then ONLY the sniper-style weapon can do any auto-targeting now.
 +
 
 +
* When player ships switch planets, they now get fast-tracked for targeting updates.  The AI and other factions get no such advantage...
 +
 
 +
* Player ships now keep track of their favorite FRD target even when not in FRD mode, so that if the player puts them into that mode their response is instant.
 +
 
 +
* Cloaked mobile ships (of the human and other factions) will no longer open fire on random targets they happen to be near unless they lose cloaking.  They will instead hold their fire until they are within range of their assigned target (either chosen via FRD mode or by direct player order), or until their cloaking is blown by some other mechanism.
 +
** This basically makes it so that cloaking is way more useful in an automated fashion.  If you want them to engage at will, just put them into FRD mode -- but they'll still make sure to go to their preferred target before they fire, so as to not waste any of their health to attrition.
 +
 
 +
* Spiders now do a better job of targeting enemies that they can engine-stun, and snipers now do a better job of not giving a flip about what their range to target is.
 +
** This could potentially still use some work, but it's not bad.  Spiders and paralyzers and so forth try to spread their damage around a bit better now, too.
 +
 
 +
* Newly created drones should now default into attacker (FRD) mode, but existing ones won't be upgraded.
 +
 
 +
=== Other Performance Improvements ===
 +
 
 +
* Some of the central lists of entities have been removed since they were redundant at this point.  This will make the addition and removal of entities to the game a bit faster.
 +
 
 +
* Previously it was possible to accumulate a cruft of abandoned shots that were in the world object but not actually part of the game.  This was only during deserialization, so it probably wasn't the cause of the slowdown over time, but it's good to have fixed anyhow.
 +
 
 +
* Fixed an issue where our internal "loopback buffer" that is used in single player and on multiplayer hosts was causing some substantial garbage to be thrown onto the memory heap, leading to more frequent GC collections particularly when a lot of commands are being issued.
 +
 
 +
* The game now pools GameCommands for reuse by type, which is vaaaastly more efficient than what we were doing before.  It wasn't such a big deal in the past when we had much smaller commands on average, but now that some of the commands are quite large this was causing a major GC spike very frequently.
 +
** This also makes the instantiation of individual commands, faster, as a side bonus.  So this both makes GC collections less severe and much less frequent, it also makes sim steps a bit faster.
 +
 
 +
* We've added in leak-detection for the GameCommands, where we can see any that are being eaten by the garbage collector instead of pooled.  These show up in your log during garbage collections if any are set up wrong.
 +
 
 +
* Shots are now pooled (with a 5 second delay before they can re-enter so that anything that was referencing them has time to be cleared out before the shot is used again to mean something new).
 +
** During battle, this is the single greatest performance improvement we could make, it turns out.  It brings a battle that was running at 70% speed up to 100%, and one that was running at 40% up to the 70-100% range (depending on the moment-to-moment).
 +
** This is of course after all the other performance improvements already done this release.
 +
** This also makes the garbage collection calls extremely infrequent and extremely tame.  They give the tiniest little bump every so often, but it's extremely lightweight.
 +
 
 +
* Except for some things in the long-term threading section, the only thing using spatial partitioning was direct placement of units and the deployment of drones.  Both of those are incredibly infrequent, and not worth the overhead of having ships go through all the partitioning lists and so forth.
 +
** Okay, actually the insta-fire beam weapons and aggroing some specific ships were also a thing, but frankly there were simpler ways we could get equal-or-superior performance, by limiting on other factors prior to distance.
 +
** Shots and ships moving really fast were being slowed down on the main thread by having to be put into spatial partitioning, and at this point that was the far-more-salient issue.
 +
** Additionally, we discovered that there was some form of memory leak in the spatial partitions themselves, that was causing old references to hang around for shots in particular.  This was likely what was causing the "slowdown that happens over time, but is fixed by an exit to the main menu and reload of the savegame."
 +
** Overall this change has led to a 10-20% increase in performance during battle-heavy periods.  On Chris's machine, there are some periods where he had 15k shots moving around on the screen with some 3k ships, and it was running between 80% sim speed and 100% sim speed while staying at over 100fps and no noticeable GC collection spikes.  This is ridiculously improved from the prior build.
 +
 
 +
* Wormholes are now also pooled, because why not -- we're going to be pooling most things starting in this release, which will also make mapgen a lot more responsive in the lobby (this was a big gripe of Chris's in particular).
 +
 
 +
* Spent the morning investigating our mysterious ArcenMob collection class, which has the ominous note on it "If you use this for something it's not specifically designed for, it will break your legs."  Chris considers his legs well and truly broken. ;)
 +
** After trying and failing to create a faster collection class than this one, and after noting just how slow the List<> class is (that's built into C#) compared to this, attention was then turned to trying to figure out what was going on with this in terms of why it was suddenly having issues in a memory-leaky fashion.
 +
** It ultimately turns out that there is... mostly... NOT a memory leak here.  Kinda.  The behavior that Chris was observing that seemed like an obvious leak was partly caused by the way that this class uses the PrimaryKeyID of the entities as a hashcode to find them, which was leading to them not being removable after having their PrimaryKeyID reset.  Therefore, regarding pooling: the PrimaryKeyID is now just left in an intedeterminate state along with a few other fields until the object is re-activated from the pool with a new identity.  This solves some thread race condition issues elsewhere in the code, too.
 +
** That said, there MAY still be some sort of leak in here, in that UsedCapacity seems to increase on these arrays over time, never getting compacted.  After a while, this would lead to truly terrible performance, but exiting to the main menu and entering the game again would restart that process.
 +
*** Chris has spent a goodly while trying to figure this one out, but is going to punt it to Keith instead and focus elsewhere, since that issue is not new in this build, and probably only comes up fully after a few hours of play.
 +
 
 +
* Now that GameCommands are pooled, it was possible to make them even more efficient by not creating arrays all over the place and instead reusing their lists over and over.  This almost entirely eliminates GC allocations, making things even faster and smoother than ever.  There's still some more stuff that we can pool, but it's no longer critical to do.
 +
 
 +
* EntityBeamWeaponLineSets and EntityOrders and MetalFlowPurpose are now pooled, as are Squads themselves.
 +
** This wasn't strictly needed in the short term for performance, but it does actually help performance -- and most importantly, in the very short term we remember how to do this very easily, and have a window in which to fix the inevitable bugs that result from it.  So we went ahead and did it now.
 +
 
 +
* All of the memory pooling stuff has now been moved out into its own section of the escape menu, not just being slapped under the performance section anymore.
 +
** One interesting discovery here is that the MetalFlowPurpose pooling was actually vastly more useful than suspected initially, as it gets hit harder than any other pool in the whole set!
 +
 
 +
* Fixed a longstanding bug where "Invalid AABB" could occasionally show up when shots tried to render.  The recent pooling changes made this a lot more common.  It was basically shots having an invalid position and trying to draw in a crazy location.
 +
 
 +
* PlanetFactions are now pooled, which makes mapgen a bit faster.
 +
 
 +
=== New Units ===
 +
 
 +
*Adds the Stingray to the game - a swarmer type fleetship that gains a damage bonus against bubble forcefields.
 +
**Thanks to zeusalmighty for the suggestion, and the name.
 +
 
 +
*Adds the Fortress to the game - a large, expensive defense structure sporting two large MLRS weapons and a plasma cannon. The AI can get these too.
 +
**First pass, so likely need adjusting later.
 +
 
 +
* Design Template Servers are back! Whenever the AI unlocks a new fleetship type (which it does at certain AIP gain intervals) then it will also seed a Design Template Server for that fleetship type on the map. Hack it to get that type for yourself, or to prevent the AI from using it. I would love some testing on the Hacks to make sure that it works properly.
 +
 
 +
*Adds Carrier, Heavy Beam, Vampire, Gravity, Shield, Plasma, and Pike Guardians back into the game with their existing models and new stats. Also turns the AIs fleetship triangle into possible drone variants with the same swarmer weakness as Carrier Starship drones.
 +
 
 +
*Adds Minefields, Area Minefields and Widow Minefields back into the game.
 +
**More adjustment required!
 +
 
 +
*Orbital Mass Drivers return, with extremely high damage...but a crippling penalty to small ships, making them pretty safe against it. A certain Trader stocks these toys...
 +
 
 +
*Bunch of Dire Guardians return! These spawn on the AI "Core Worlds", and are fairly nasty...Tethuida is invited too!
 +
**Lightning, Missile, Plasma, Shield, Heavy Beam, Widow, Shredder, and Tethuida.
 +
 
 +
*Etherjets are back. Currently they don't seem to work too well, but they're there.
 +
 
 +
*Adds a bunch of Dire Guard Posts back.
 +
**Arachnid, Electric, Heavy Beam, Leech, Missile, Spider, Laser, Tethuida, Shredder, and Gravwell.
 +
 
 +
=== Balance Tweaks ===
 +
 
 +
*AI Overlord Phase 2 and Armored Golems have lost their multishot weapons in favour of rather...large, plasma cannons.
 +
** There were problems with the multishots, with overkilling, etc. They really weren't impressive on super units.
 +
 
 +
*Lost Spire Frigate now has a beam weapon, just how they did in Classic.
 +
** Thanks to x4000 for fixing those and making it possible!
 +
 
 +
*Artillery Golem and Cursed Golem have had some tweaks - higher damage on both, Cursed takes slightly less self damage.
 +
 
 +
*Ambush Turrets now fire twice as fast - so they'll get more bonus shots in, and generally higher dps too.
 +
**Thanks to zeusalmighty for suggesting increasing the bonus shot count.
 +
 
 +
*Macrophage Harvesters (and Enraged too) now have 5 Mass Tx instead of 4 - makes them immune to Widow paralysis.
 +
**Thanks to zeusalmighty for suggesting.
 +
 
 +
*Riot Control Starships have their shield strength reduced from 900k at Mark 1 to 200k at Mark 1, and their Strength is doubled, so the AI gets less of them.
 +
**There have been numerous complaints about this, and with Fusion Bombers not working against these...
 +
 
 +
*Golems and the Spire Frigate have very large health boosts, usually around 300% what they were before.
 +
**Further personal testing had these dying way too quickly for a super unit.
 +
 
 +
*Increases the shield radius of the Starting Shield Generator to cover all the Cryopods, and gives it the display name of "Home Shield Generator" to distinguish it from normal Generators.
 +
 
 +
* Added a new MaxBubbleForcefield based_on value to damage modifiers.
 +
 
 +
* Siege Starships and Usurpers now have a wicked strong damage bonus against bubble forcefields, making them essentially shieldbreakers.
 +
 
 +
*AI Overlord health has been vastly reduced, and armour thickness up to 300mm on both phases.
 +
**Thanks to zeusalmighty for both suggestions.
 +
 
 +
*Automated Shredders mercenary group has the Cutlass no longer self damage, and no longer states this. The Vampire Claw has vastly reduced health gain in line with the normal variant.
 +
**Thanks to zeusalmighty for the Cutlass suggestion.
 +
 
 +
*Vampire Claws health gain per point of damage down from 100 to 3.
 +
**These were kind of invincible...
 +
 
 +
*Agravic Pods damage increased from 54 to 80.
 +
** These seemed utterly useless against anything they weren't getting a bonus against, and even with the bonus were falling a little short in something so specific.
 +
 
 +
*Marauder Raiders engine Gx up to 18, mass Tx up to 5, and hull + shield amount doubled. This makes them immune to Spiders, Widows, and lets them survive to do their pillaging.
 +
**Thanks to zeusalmighty for the suggestions.
 +
 
 +
*AI Guard Posts have had a fairly large overhaul - all of them gaining more damage, health, with Needlers becoming Pikes, Arachnids doing tremendous damage to higher mass targets, and lasers really laying the hurt on bubble forcefields.
 +
**As with the Fortress and Stingrays, this is a first pass. Feedback is appreciated!
 +
 
 +
* Dire Guard Posts are now seeded on the AI homeworld(s), but presently on no other planets.
 +
 
 +
* Dire Guardians are now actually seeded from the game start, primarily on AI homeworlds but also on other higher-mark planets in decreasing numbers as the mark level goes down.
 +
** In general, planets now have guardians all over the place from the start, except mark 1 planets (and very few on mark 2 and not too many on mark 3).  It should make the higher-level planets feel a lot more alive and threatening right from the start, which is the goal.
 +
 
 +
*Forcefield generators now have increased mass of 5 Tx, which makes them immune to Widow Paralysis.
 +
 
 +
*Pike Corvettes damage reduced from 80 to 60.
 +
 
 +
*Space Tanks damage down from 194 to 170, but in return they gain the Augmented Cannon - a secondary weapon that deals higher damage at a very slow rate, at longer range.
 +
 
 +
== Version 0.768 Golem Rebirth==
 +
(Released September 7th, 2018)
 +
 
 +
* Add notification for Enraged Macrophages attacking
 +
** Thanks to zeusalmighty
 +
 
 +
* Decrease the strength of the Antagonized Dyson
 +
** Thanks to HeartHunter
 +
 
 +
* Remove some no longer needed unit tags for the Dyson Sphere
 +
 
 +
* Fix a bug where the player could no longer build command stations on any new worlds
 +
** Big props to malkiel for finding a fix to this one
 +
 
 +
* Prevent the player from having multiple hacks simultaneously on a planet
 +
 
 +
* A large amount of defensive code, as well as some better logging that doesn't gum up the entire system as it runs, has been added to the DoOnAnyDeathLogic section of the code.
 +
** Thanks to malkiel for reporting.
 +
 
 +
* Fixed an issue where higher-mark docks were building higher-mark versions of their ships for players (oops!)
 +
** Thanks to RocketAssistedPuffin for reporting.
 +
 
 +
* Fixed the logic where ships in FRD mode, and AI ships, were trying to hug their enemies.
 +
** Thanks to HeartHunter7, RocketAssistedPuffin, Ovalcircle, and malkiel for reporting.
 +
 
 +
* Added a new Zenith Shield Generator, which is mark 4 and very expensive and can be bought from the Zenith Trader.
 +
** Thanks to zeusalmighty for suggesting.
 +
 
 +
* The metal tooltip now spells out exactly how much metal you have, versus the abbreviated version.
 +
 
 +
* Fixed a couple of rather severe display bugs that would show when you had numbers in the millions, with things like 2.08m being written as 2.8m instead.
 +
** Thanks to malkiel for figuring this out!
 +
 
 +
* Rather than processing every ship's re-evaluation of orders and targeting logic every sim frame, it now only checks them every 4 sim frames, divided up randomly by the modulus of the ship's primary key.
 +
** This has the side effect of making ships shoot not all in such big burst batches constantly, but in a much more attractive set of bursts that are ongoing.  It looks far more like a battle now!
 +
** But the really big effect of this is that it almost doubles the performance of some hefty sections of the code.  Woo!
 +
 
 +
* Also put in a gate to only process the long-range-planning logic of the special faction logic every other sim frame rather than every frame.  Doesn't seem to make any difference performance-wise right now, but you never know in the future.
 +
 
 +
* Fixed the issue where when the AIP was > 999 it would go up off the top bar.
 +
** Thanks to Ovalcircle for reporting.
 +
 
 +
* Completely redid a lot of the FRD logic, which also handles a lot of the AI logic.  It could still use some work, for sure, but it's no longer quite so bafflingly moronic as before. ;)
 +
** Thanks to HeartHunter7 for an awesome savegame and continuous reports!
 +
 
 +
* If a unit does not properly have itself set up for self-building, but it's set up to be buildable in the Build sidebar (not docks), then it now complains about that rather than failing silently.
 +
 
 +
* Fixed the fact that you could not actually buy the Zenith Trader's wares since they were not set up to be self-buildable.
 +
** Thanks to HeartHunter7 for reporting.
 +
 
 +
* The metal policies and quick build sections have been removed from the Build sidebar for now.  They were non-functional and for now are just clutter.  Hopefully for bringing back later!
 +
 
 +
* Probably fixed a bug with all multi-shot ships, who were likely not firing nearly enough shots.  Will require more testing to be sure, but it looks good at a first bit of testing.
 +
** As a bonus, their targets are now chosen more intelligently than they previously were.
 +
** Thanks to RocketAssistedPuffin for reporting.
 +
 
 +
=== Beam Weapon Upgrades! ===
 +
 
 +
* The visuals for the various types of beams (tractor, tachyon, repair, claim) have all been redone to look nicer, and the beam weapon effects for conical and individual beam weapons are also now in place.  Finally, you can actually see your beam weapons!  And it looks cool!
 +
 
 +
* The calculations for beam weapons, and the stats that they use, have been reworked substantially.  The targeting turned out to be quite offset from what was advertised, because we don't have enough precision in our fixed-int math to get the angular positions well.  This is unfortunate, but for now we're just switching to making it so that you just fire one powerful beam per weapon.  It looks cool enough as it stands, it actually hits what it aims at, and we can deal with the added beam-fans later on if need be.
 +
** Thanks to malkiel for reporting the various woes that beam cannons had.
 +
 
 +
=== AI Tomfoolery ===
 +
 
 +
* Made AI targeting more likely to actually kill remains rebuilders so that a sufficiently big turret/etc ball doesn't distract it indefinitely.
 +
 
 +
* Now if a chunk of threat sees a hostile king unit in its list of potential target planets, it has a 80% chance of ignoring any potential target planet without a hostile king unit.
 +
** Translation: if it thinks it can get to your home command station, it will probably try.
 +
** It's not a 100% chance to avoid things being too predictable.
 +
 
 +
=== Balance Tweaks ===
 +
 
 +
*Gryn, The Void Home can now build units starting at Mark 1, instead of Mark 3.
 +
 
 +
*Grenade Launchers, Flak Turrets and Flak Guardians now do far less damage, but hit triple the targets per shot, and gain a damage bonus against anything with at most 30mm armour. This makes them into anti swarmers.
 +
 
 +
*Autocannon Minipods are now cap 180, and have armour thickness of 30mm to become a swarmer type.
 +
 
 +
*Ablative Gatlings now have armour of 30mm to finish becoming a Swarmer type.
 +
 
 +
*Space Planes have had their armour reduced to 30mm - but retain their cap.
 +
 
 +
*(Re)Birth of the Golems! Armoured and Artillery have had massive weapon boosts, the Regenerator now has limited vampirism, and the Cursed has a slight damage increase, much higher range, and the AI version is now properly weaker than the players.
 +
 
 +
*Drones produced by the Carrier Starship now have armour thickness of 30mm, to make them weak to anti-swarmer weaponry.
 +
**Thanks to zeusalmighty for suggesting.
 +
 
 +
* Tractor Arrays previously had ludicrous health and shields.  More than halved the health, and fifth the shields.  Enemies should actually have a hope in hades of breaking through, now.
 +
 
 +
== Version 0.767 Newly In Stock, By Zenith==
 +
(Released September 6th, 2018)
 +
 
 +
* Update the Macrophage Telium description to say "Be careful about killing this, it will enrage all the Macrophages"
 +
** Thanks to zeusalmighty for suggesting
 +
 
 +
* The infrastructure menu can now be seen properly on enemy planets.  Additionally, items within it that are not buildable on enemy planets -- like energy collectors -- should no longer show up.  Now mobile builders are actually more useful!
 +
** Thanks to RocketAssistedPuffin for reporting.
 +
 
 +
* The "Start with units Queued" option now works again.  Turns out it was easier to fix than remove.
 +
** Thanks to RabidSanity for reporting.
 +
 
 +
* Extremely long-ranged units will now have a reasonable kiting distance.
 +
** Units with extremely long-ranged weapons (sniper guns, etc) will no longer approach targets if they also have a shorter-ranged gun.  This prevents the sniper starship from running up against enemies like it used to.
 +
** Thanks to HeartHunter7 for reporting.
 +
 
 +
* It should now be impossible to have your stored metal go over your metal storage cap.
 +
** Thanks to malkiel for reporting.
 +
 
 +
* When you can't afford mercenaries right now, it now shows that as the proper message rather than saying they can't be hired at the current planet.  The incorrect message was super confusing!
 +
** Thanks to RocketAssistedPuffin for reporting.
 +
 
 +
* The Rorqual Hegira now also has the Norris Effect, same as Gyrn does.
 +
 
 +
=== More Targeting Work ===
 +
 
 +
* Fixed a bug in the prior release that made it continue to use the old AI-style target priorities on ships in FRD mode.
 +
** Thanks to HeartHunter7 for reporting.
 +
 
 +
* Updated the general targeting logic in TargetPlanning so that it now also makes use of the target priorities and pays attention to ranges, which should lead to more consistent behavior between that sort of targeting and the targeting from FRD mode.  It also takes into account overkill, etc.
 +
** Thanks to HeartHunter7 for reporting.
 +
 
 +
* Added some logic that prevents some thrashing when ships are chasing targets out of their current firing range.  This leads to better ship behavior, plus a nontrivial CPU performance bump.
 +
 
 +
=== Zenith Trader: New Wares In Stock ===
 +
 
 +
* The Zenith Trader should now have some interesting wares to sell.  They aren't tested yet, so may have some bugs.
 +
** Scrubbed Aberration
 +
** Scrubbed Abomination
 +
** Tamed Macrophage
 +
** Chained Dark Spire Eidolon
 +
** You don't have to have any of those factions enabled for these to be available.
 +
** Thanks to Ovalcircle for reminding us to give the Trader something to sell.
 +
 
 +
=== Reinvented Units ===
 +
 
 +
* Vorticular Cutlass has been adapted into the new Metabolizing Gangsaw.
 +
** Melee ships that damage themselves when they do damage, but also carves metal off their target to add to your income.
 +
 
 +
* Needler Turret has become Pike Turret.
 +
** Exceptional against highly-armored ships, particularly those with high remaining hull health.
 +
 
 +
* Multi-Needler Corvette has become Pike Corvette.
 +
** Exceptional against highly-armored ships, particularly those with high remaining hull health.
 +
 
 +
=== New Units ===
 +
 
 +
* New player-only turret: Ambush Turret
 +
** Specializes in destroying enemies new to the planet.
 +
 
 +
*New AI-only Guardian: Widow Guardian
 +
**Scary, causes paralysis to victims with low mass.
 +
 
 +
=== Balance Tweaks ===
 +
 
 +
*AI Overlords have reduced health - bit more than half. Phase 2 now has 2 Archon Cannons, dealing 8000 damage every 2s, and Archon Missiles, firing 32 missiles at once, every 2s, with 200 damage each. Also has the Norris effect, so no more cheesing this by trapping it.
 +
**Thanks to Ovalcircle for suggesting the idea and the general weapons, and x4000 for the Norris Effect.
 +
 
 +
*Macrophage Harvesters now have 90mm thick armour, to make them a bit easier to actually fight now.
 +
**Thanks to zeusalmighty for reporting, and Badger for the 90mm figure.
 +
 
 +
*Sentinel Frigates and Sentry Starships now give sensor data for neighbouring planets.
 +
 
 +
*Space Planes now take half damage from anything shooting them beyond their own weapon range.
 +
 
 +
*AI Hunter Fleet starting budget is vastly reduced. This should hopefully stop it attacking you even in the first minute, and make the initial planet grab a bit easier.
 +
**An example of this is building the initial triangle of fleetships wasn't enough to deter the Hunter from attacking at difficulty 7, two minutes into the game.
 +
 
 +
*Starting metal increased from 360k to 540k. This should mean you don't go into "Starving" just building initial fleetships, and will help the initial planet grab as well.
 +
**This is currently the exact amount required to build the initial triangle.
 +
 
 +
== Version 0.766 Target Equilibrium==
 +
(Released September 5th, 2018)
 +
 
 +
* Hopefully fix null reference in Hacking Notifications
 +
** Thanks to Ovalcircle for reporting
 +
 
 +
* Hopefully fix game load problem due to Dyson Shpere
 +
** Thanks to HeartHunter for reporting
 +
 
 +
* Improvements to the Nanocaust:
 +
** Improve detection of when a planet is capturable
 +
** Improve detection of fleet state (this was causing huge numbers of notifications to pile up)
 +
** Lots of improvement to nanocaust tracing
 +
** Some overall nerfs to the Nanocaust strength (HeartHunter's suggestion)
 +
** Make the Hack cost more hacking points
 +
** Hacked Nanobot Hives now show in the galaxy map
 +
 
 +
* Improved the wording of a few things in the Tutorial.
 +
** Thanks to Ovalcircle for the critique
 +
 
 +
* Fixed a bug introduced during the GameEntity split where defenses were never seeded at wormholes anymore.  This was because one of the search flags for wormholes was only looking at Squads (which are, of course, never wormholes!), and not looking at Other.  Now a new flag has been made for Other, where wormholes are, and it searches on that.  It's not possible to make this error in the future, since the flags are not cross-compatible, which is good.
 +
** Thanks to zeusalmighty and Ovalcircle for reporting.
 +
 
 +
* Fix a bug where Tertiary mercenary units were spawning secondary units instead
 +
** Thanks to RocketAssistedPuffin for reporting
 +
 
 +
* Previously, things that said "less than" as a requirement really meant "less than or equal to."  They now really mean "less than."  Affects:
 +
** Engine stun gx, paralysis tx, reload slowing mm, gravity gx, tachyon albedo, tractor gx and albedo, and ion albedo.
 +
** Thanks to RocketAssistedPuffin for reporting.
 +
 
 +
* Fixed our internal batch files to finally properly be able to compile with Unity 2018.2+.
 +
** It turns out that on Chris's machine, he was unintentionally still compiling with 2017.3p1 instead.  After updating his path to properly point the right place, trying to debug this with Puffin, he was able to get the same error that Keith and then later Puffin were having.
 +
** The error in question was because something changed with the mcs.exe compilter used by Unity in their new version of .NET.  What exactly was happening is still unclear, but simply switching to use %unityPath%Editor\Data\MonoBleedingEdge\bin\mcs.bat as the path fixes the issue.
 +
 
 +
* Okay, a REAL fix to the compilation issue.  We're simply now using the older compiler from 2017.3p1, same as has been done on Chris's machine for quite a long time.  The newer compiler seems to have some sort of issue or requires some new arguments.
 +
** With this in place, we actually now don't even need unity installed on the developer machine at all in order to compile, most likely.
 +
 
 +
* Fixed a typo when hiring mercenaries where it said things like "Cost: 2 of your 20 metal" instead of "Cost: 2 of your 20 hacking points"
 +
** Thanks to Ovalcircle for reporting.
 +
 
 +
* Fixed a nullref in pathfinding between planets when the target or source was null or identical.
 +
** Thanks to Ovalcircle for reporting.
 +
 
 +
*Mobile Space Docks now properly say V-Wing, Fusion Bomber and Concussion Corvette - this was missed when those ships were revamped.
 +
 
 +
* Added a new DoOnSpawnsOnDeath method on the scenario and on the special faction implementations.  This allows us to have central logic, or per-faction logic, for when an entity is spawned via another entity dying.
 +
** We're now using this on when a mercenary does this in order to copy to mercenary group affiliation from the parent to the child, thus preventing errors that otherwise happened.
 +
** Thanks to RocketAssistedPuffin and Ovalcircle for reporting.
 +
 
 +
* Fixed an xml bug with tractor guardians where they had some tractor fields set up on their main weapon, leading to the interface not showing their tractor stats properly.
 +
** Thanks to malkiel for reporting.
 +
 
 +
* Fixed a bug where if you were spending zero metal per second at the moment, it would not show your metal data properly in the tooltip over the metal field.
 +
** Thanks to Ovalcircle for reporting.
 +
 
 +
* Prevent OnDeath effects from firing when a unit is Despawning. This prevents some crashes when the Nanocaust is trying to take over HRF ships that are warping out
 +
** Thanks to ZeusAlmighty and the Puffin for reporting
 +
 
 +
* Fix a bug where Dyson Hacking wasn't costing hacking points
 +
** Thanks to Ovalcircle for reporting
 +
 
 +
=== Ship Targeting ===
 +
 
 +
* Logic has been added to the game that should make the human forces always target enemies as if they are in FRD-mode, versus spreading damage around evenly. This requires further testing to make sure that we actually got the issue, though.
 +
** Thanks to HeartHunter7 for bringing up the various targeting issues.
 +
 
 +
* Targeting weights for FRD units (on the player side) is now completely different from the targeting weights used by the non-player factions.
 +
** The AIs and humans simply have very different goals in how they fight, so letting them weight things differently makes a lot of sense.
 +
** Thanks to HeartHunter7 for bringing this up.
 +
 
 +
* For every forcefield that a ship is protected by, it now gets its priority divided by 3 if it's a player doing the targeting, or by 5 if it's an AI doing the attacking.
 +
** This makes the AI in particular a lot less cheesable by sticking key ships under forcefields, and it makes your FRD units also behave more intelligently.
 +
** Thanks to RocketAssistedPuffin for suggesting.
 +
 
 +
*AI Overlord Phase 1 now has very low priority instead of requiring manual target. This allows factions that don't take over planets to actually attack it, such as Enraged Harvesters from the Macrophage.
 +
**Thanks to Ovalcircle for reporting.
 +
 
 +
=== Balance Tweaks ===
 +
 
 +
*Macrophage Harvesters now have an engine GX of 19, to prevent them from being engine stunned forever by Spider units, including Guardians. This should let them do their thing...and not be immediately cheesed by a player with one spider turret.
 +
**Thanks to Ovalcircle for reporting this sad situation.
 +
 
 +
* Command stations now SHOULD automatically capture harvesters and other neutral entities without you needing to have your engineers go running around manually.  Requires testing, though.
 +
** Thanks to HeartHunter7 for reporting.
 +
 
 +
* The Orchid Ark now has lost the ability to assist construction on other ships, but it's repair speed has gone up by 10x.  This isn't a multi-repair ability, but it's such a superfast repair process that it should act very similarly to what is imagined.  Let's see how that feels, anyhow.
 +
** Thanks to Malkiel for suggesting.
 +
 
 +
*Carrier, Riot Starship and Tritium Sniper Starships are all bonus ships now. Siege Starships can now be built by default - so you'll have some pretty explosions.
 +
** Thanks to Malkiel for suggesting.
 +
 
 +
*Siege Starships no longer spread their damage out, and instead deal full damage to at most 10 targets.
 +
 
 +
*V-Wings gained 100 Hull, to 2000, and 200 Shields, to 2000. This is to help make it a Human counterpart to the Armor Ship of the AI. (Armors being tougher tanks, while V-Wings trade off for a slow debuff).
 +
 
 +
*Armor Ship damage down from 206 to 120. This is so it isn't utterly wrecking everything while being more durable. These should now have the same DPS as V-Wings.
 +
 
 +
*MLRS Corvettes now have the same hull and shields of Concussion Corvettes - these can now be demolished by Fusion Bombers.
 +
 
 +
*Concussion Corvettes gained even more damage - from 60 to 80.
 +
 
 +
*Sentinel Frigate cap halved and strength doubled for AI budgeting - they'll get less of these now.
 +
 
 +
*Inhibiting Tesla Corvette cap halved and strength doubled for AI budgeting - they'll get less of these now.
 +
 
 +
*Assault Starship now fires every 3s, down from 4. This is to help against Armor Ship masses.
 +
 
 +
*Space Tanks now get a similar bonus against 90mm or greater thickness, like Assault Starships. This is to give a possible counter against Armor Ship masses.
 +
 
 +
*Needler turrets now get a similar bonus against 90mm or greater thickness, like Assault Starships. This is to give a possible counter against Armor Ship masses.
 +
 
 +
*Ablative Gatling cap increased from 120 to 180 - fear the swarm!
  
The short answer is that we hit a point where the game was fun, but super hard to balance. Rather than focusing on balance in a strictly-numbers sense, we thought it would be more interesting to add a procedural element into ships in order to make each game even more different.
+
*Lowered Scout tech costs drastically - should cost 600 for Mark 2, then 1200 for Mark 3.
 +
**Thanks to zeusalmighty for the suggestion.
  
Along with that, we realized just how important the factions are becoming to the game, and how they give more of a sense of life to what is going on.  With that in mind, and the since-forever-even-in-AIWC requests of players to make each planet have more unique "terrain" (per se), we thought it was time to start implementing things a bit differently.
+
*Raiders now have an Engine GX of 18 - this makes them immune to almost all speed penalties - hope you have V-Wings in position.
  
The TLDR is that we hit the point where it feels sufficiently like the first game in a really basic mechanics sense, and now it's time to make things unexpected again
+
*Orchid Ark now has Vampirism in order to heal itself - 5 health for every 1 damage.
  
== Version 0.765 ==
+
== Version 0.765 Game Entity Split ==
(Not yet released -- we're still working on it!)
+
(Released September 4th, 2018)
  
 
* Fix a bug in the mapgen code that could get in an infinite loop
 
* Fix a bug in the mapgen code that could get in an infinite loop
Line 46: Line 1,701:
 
** Thanks to OvalCircle for reporting
 
** Thanks to OvalCircle for reporting
  
* Fix a bug with self-attrition for drones
+
* Fix a bug with self-attrition for drones. They now actually die at .1% per second, instead of 10% per second.
 
** Thanks to Ovalcircle for reporting
 
** Thanks to Ovalcircle for reporting
  
 
* Add in Science hacking
 
* Add in Science hacking
  
* Fix some bugs in the Nanocaust
+
* Fix null reference exception in Marauder code.
 +
** Thanks to Ovalcircle for reporting
 +
 
 +
* Fix a typo on Cloaking hovertext
 +
** Thanks to malkiel
 +
 
 +
* Mark 1 space dock cap increased from 2 to 4.
 +
** Thanks to Badger and RocketAssistedPuffin for suggesting.
 +
 
 +
* The wormholes on player home planets will always now be extremely far out on the gravity well, so that there is plenty of room for the human home command station to be far from those wormholes.
 +
** Thanks to RocketAssistedPuffin for reporting.
 +
 
 +
* The Ark "Gyrn, the Voidhome" now also has the ability "Norris Effect":
 +
** Displaces enemy bubble-forcefield generators when moving into them.
 +
 
 +
* Fixed a bug in the most recent version of the game where the map gen special seeding logic was even _worse_ than before, because we forgot one line of code.
 +
** Thanks to Badger for reporting.
 +
 
 +
* Fixed an issue where ships would be able to repair other ships that just died, so long as they go to them in the exact frame that the ship died.
 +
** This made things like scrapping a unit go into infinite loops if engineers were around.
 +
** Thanks to Ovalcircle for reporting.
 +
 
 +
* Also fixed a bug where engineers could be set to assist space docks or similar that were blown to remains.
 +
 
 +
* Fixed a bug where things that died to remains (or neutral) would still repeatedly explode even though engineers were not involved.
 +
** Thanks to Ovalcircle and crowebird for reporting.
 +
 
 +
* Fixed a bug where after a ship was claimed, it would not switch to its proper claimed graphics until you tabbed out to the galaxy and back in.
 +
 
 +
* There is now a new "ShotHitLogic" tracing option that will dump the data for all the ships that are hitting one another so that you can check for inaccuracies in math.
 +
** Thanks to RocketAssistedPuffin for reporting the lack of this.
 +
 
 +
* When there is only a single unit in a stack that you are hovering over in the ships tab of the sidebar, it now acts as if you are directly hovering over that unit, thus showing a lot more specific info like its individual health, etc.
 +
** Thanks to Ovalcircle for suggesting.
 +
 
 +
* Reorganized the campaign stats section a bit, and broadened the game performance section (as well as moving it down).
 +
** It now says if the game is paused or running, it says what the current frame is, the current entity count, the number of garbage collector calls, the total entities created, and the current command count (that last one is a rough estimate).
 +
** This helps even non-developers tell at a glance what might be going on if the performance is low (tons of commands, tons of entities created or present, it lags every time the garbage collector runs, etc).
 +
 
 +
* The AI is now limited to at most 3 shield generators per planet (for now, anyhow).
 +
** Thanks to HeartHunter7 for reporting the crazy numbers of shields that were otherwise present.
 +
 
 +
* Tutorial enhancements. The third planet is now just a Mark 2 planet. The player is told to use Scouts to explore it, then build Starships and upgraded Fleetships to capture it.
 +
* The Tutorial's AI has been significantly nerfed to make it much harder to lose to.
 +
 
 +
* Fix a potential null reference in the Science Objectives
 +
 
 +
* Weapon Renames for Macrophage and Nanocaust factions.
 +
 
 +
* Fixed Anvil Securities mercenary group being called War Siegers.
 +
 
 +
=== Splitting Our GameEntity For Major Performance Gains ===
 +
 
 +
* Major internal refactor: GameEntity has been split into four classes:
 +
** GameEntity_Base provides the new abstract class that is underneath the other three.
 +
** GameEntity_Squad is for all of the ships.
 +
** GameEntity_Shot is for all of the shots, and is now vastly more lightweight than it used to be.
 +
** GameEntity_Other is for basically just wormholes, and is incredibly more lightweight than it used to be.
 +
** Despite all of these changes, old savegames still work.
 +
** The new data for shots is now faster to load into RAM when creating a firing shot, as well as much more lightweight when saving a game with a lot of shots in it.
 +
*** A savegame that has 14k squads and 29k shots previously took 9.61MB, but now only takes 6.66MB.
 +
** There are a few cases where code is now slightly more verbose, but overall the memory footprint is down notably, and the CPU footprint is down somewhat.
 +
 
 +
* The changes to splitting out the shot data, and thus making it not remotely so heavy to initialize, makes it so that when there are thousands of shots being spawned in a second, it no longer causes lag spikes like it previously did.  It was actively causing huge amounts of hitching before, simply as a part of creating all those new objects in memory, it turns out.
 +
** In our test case, with the prior version of the game it was hanging for about 3 seconds every 3-5 seconds, and it was running at something like 35% speed when not hanging.  It now has no hitches in that same savegame, and runs at a solid 45% of full speed.  This is even true as it progresses into having more than 45k active shots in the game at once, pretty much all of which are all on one planet (nightmare performance scenario).
 +
** Thanks to HeartHunter7 for reporting.
 +
 
 +
* When saving to disk, some of the fairly-temporary data having to do with the plan for the next frame (that has not happened yet) is no longer saved.  It simply isn't needed on disk, but it is needed for sync between clients in multiplayer.
 +
** This brings the on-disk size of the large savegame that has 14k squads and 29k shots further down from 6.66MB to 5.29MB.
 +
 
 +
* A new function has been put into our serializer, where it "compacts" down the Int64 variables that are used for GameEntityIDs, by simply renumbering them 1-x as they are added into it.  This only happens when saving it to disk, but it has the effect of majorly reducing the filesize of long-running games (or those with a lot of shots in them over time).
 +
** This brings the on-disk size of the large savegame that has 14k squads and 29k shots -- which had had over 10 million entities in it since starting -- further down from 5.29MB to 2.68MB.
 +
 
 +
=== Nanocaust Tweaks ===
 +
* Make Nanocaust hacking a bit tougher.
 +
** Thanks to zeusalmighty for the bug report
 +
 
 +
* Fix a variety of issues with the Nanocaust
 
** Thanks to Ovalcircle for reporting. Note that these changes may well make the Nanocaust more aggressive toward the player. This seems like a good thing
 
** Thanks to Ovalcircle for reporting. Note that these changes may well make the Nanocaust more aggressive toward the player. This seems like a good thing
  
* Fix null reference exception in Marauder code.
+
* Improve the Nanocaust notification and objective messages
** Thanks to Ovalcircle for reporting
+
** Thanks to Puffin for reporting
 +
 
 +
=== Dyson Sphere Tweaks ===
 +
 
 +
* The Dyson Sphere now uses tracing to log events, which can be enabled or disabled during the game via the Debug menu.
 +
 
 +
* Fix a bug where Antagonized Dyson Spheres weren't producing units, and also the Description on the Antagonized Dyson Sphere will tell you what is causing the Antagonization.
 +
 
 +
* Allow Three hacks for the Dyson Sphere
 +
** One steals a Dyson Sphere ship design
 +
** One increases the Dyson Sphere's unit production
 +
** One decreases the Dyson Sphere's unit production
 +
 
 +
=== Balance Tweaks ===
 +
 
 +
* This whole section is thanks to RocketAssistedPuffin.
 +
 
 +
* Anvil Securities Riot Ship made MK4, now get half as many.
 +
 
 +
* War Sieger has been rebalanced - used to spread damage among targets, now it deals full damage to at most 10 in the blast radius. Weapon damage and firerate reduced to compensate.
 +
 
 +
* Anvil Securities can be hired twice, if the Riot Starships survive. All others only hireable once.
 +
 
 +
* Fixed Regenerator and Botnet Golems having half the range of their counterparts.
 +
** Thanks to Mckloshiv for reporting.
 +
 
 +
* ShieldGenerator Priority 750 > 75, Shield Guard Posts given same priority (they have a gun, but their main purpose is to shield so gave them same).
 +
** Thanks to Ovalcircle for reporting.
 +
 
 +
* Guardian Health change to 1/4th what it was, and AI Guard Post Health 5x what it was.
 +
** Thanks to Badger for suggesting.
 +
 
 +
* AI Overlord Phase 1 now requires manual targeting to attack - this avoids ships attacking it above hostiles that actually fight back.  
 +
** Thanks to Ovalcircle for suggesting.
 +
 
 +
* Ion Cannons health reduced to a third of what it was before.
 +
** Thanks to Badger for suggesting.
 +
 
 +
* Assault Starship now gains damage multiplier vs targets with at least 90mm thickness, down from 100. This is to give the players something to fight Guardians and sometimes other starships with early on.
 +
 
 +
*Fusion Bomber damage increased from 150 to 225 at Mark 1.
 +
 
 +
*Concussion Corvette damage increased from 50 to 60 at Mark 1.
 +
 
 +
*Scouts now have double the cloaking points at MK1, and only gain 1000 per Mark.
 +
** Thanks to Kesseleth and Badger for mentioning these.
 +
 
 +
*Engine GX of Assault, Shield, Star and Carrier Starships increased to 16. This now makes them immune to Spider fleetships and Spider Turrets, but not Guardians. This was apparently *really* annoying.
 +
** Thanks to Badger for reporting this nuisance.
 +
 
 +
*Spider Fleetships, Turrets, and Guardians now have a maximum stun of 10 seconds. This is to stop ships being stuck for a full minute and just being annoying, while being high enough to still be decent in combat.
 +
 
 +
*Lost Spire Frigate has a much improved weapon on it, firing every 2s and dealing 20,000 damage. Shields improved from 100,000 to 150,000 to better represent their shielding technology.
 +
 
 +
*The original Mercenary groups have received a general improvement - to cost, hire count, strength, etc. Descriptions also list how long they last.
 +
 
 +
*MLRS Corvettes, Turrets and Guardposts now have a reload time of 6s, up from 2s. This is both a balance nerf and a minor performance increase - they were simply firing way too many shots per unit.
  
 
== Version 0.764 Mercenary Surge==
 
== Version 0.764 Mercenary Surge==

Latest revision as of 12:36, 4 October 2018

Contents

Next Release Notes

AI War 2: Pre-Early Access Polish

What was this phase all about?

Initial thought process was described on Steam: "Retrieval of the Lost Arks" Plus an Essay, Apparently..

Ultimately what this phase turned into was a polish phase as well as a big drive for new content and mechanics that would be easier for players to understand. The procedural elements we were toying around with wound up being discarded (at least for now), but we added a lot of content. We mapped out even more content we WANTED to add during this phase, but it will need to be during a later phase instead, at this point.

Version 0.778 I'm Talking To HIM, Not You!

(Released October 2nd, 2018)

  • For the first time, you can actually give direct orders to your engineers, rebuilders, etc to assist specific units: rebuilding them, repairing them, or permanently sticking around to boost their build queue.
    • If you explicitly tell an engineer to assist a space dock or starship constructor, it will keep hanging out there to boost that unit FOREVER, until the target of assistance is dead or you give them other orders.
      • THAT said, unlike the first game, if there is nothing to boost on that target at the moment (dock has an empty queue, potentially because unit caps are hit), then the engineers will maintain position while repairing or boosting other things instead, while immediately switching back to boosting the dock as soon as it is able to do anything.
      • This is actually a lot more flexible/useful than the first game, but in general the logic is the same when you want to have "engineers that perma-boost a dock" for speed purposes.
    • Thanks to Bummeri and others for being patient while we implemented this.

Bugfixes

  • The intro story screen should ACTUALLY be updated properly now.
  • Fixed an issue with a drunk pilot on the main menu clipping the top of the gas giant.
  • Fixed an issue where we were often sending commands as related to the local player when really they were not.
    • There is now a much more explicit GameCommandSource that is passed, which should make it more obvious when we are making that sort of error in the future (and hopefully prevent us from doing so).
    • The was the source of the errant click and beep noises that sometimes people were hearing.
  • Orders now track if they were explicitly issued by a human or not -- meaning if a human literally clicked to cause them, NOT if they were the result of a policy the human set up, etc.
    • With this in hand, the game is now able to properly say "don't do anything automated until you stop doing what the human told you to do" to units that are in FRD mode (whether those are engineers or otherwise).
    • This will solve the issue of FRD-mode ships absolutely not listening to you when there are enemies on a planet.
  • Fixed a bug in the prior version of the game where the tutorial, and any messages that showed up in the "ongoing messages" display on the right side of the screen, would all show a general buggy message.
  • Split out the various parts of the big switch statement in EntitySimLogicImplementation, since there was a note in there that under certain circumstances code could fail to break and instead jump down a switch level.
    • This could in theory fix some sort of bug with the rally code, if the code-commenter was correct. It didn't break anything, so just let us know if some sort of rally-based issue seems fixed!
  • Fixed a divide by zero error that could happen in the instigator tooltip. It seems to be an issue with them not actually assisting their faction at all, or their faction not having budgets properly, but at any rate it no longer will error.
    • Thanks to JAlfredGoodwin for reporting.
  • Found and fixed a REALLY nasty bug that was causing entities to get their orders confused and do all sorts of insane things.
    • This was a cross-threading issue where two different threads (short term planning and AI order reevaluation) would be both clearing out dud orders and putting the same order back into the pool multiple times.
    • Now it is a lot more careful with how things go into and out of the pool, using the appropriate multithreading locks, as well as making it so that in the (very frequent) even that two orders try to go back into the pool at once, it only puts them in there once.
    • There is also a lot more error checking and logging in there that throws out clearly-bogus orders and throws visible errors when finding an incorrect case. This is a lot better than it just getting subtly incorrect in a quasi-hidden way!
  • Thanks to an awesome savegame by zeusalmighty, and reproduction instructions by Badger, we found these. Also thanks to FFace, brianc, HeartHunter7, and RocketAssistedPuffin for reporting.
  • In a spate of even further caution, we're now using our custom TimeBasedPool class for our entity orders, with a timer of 1 second on them.
    • This removes our ability to use locks, but also our need to. This ensures that no entity order will ever go into the pool and come out of the pool on multiple threads at once, if we have multiple requestors and putter-backers. Essentially this waits until a period where only one can-touch-orders thread is running, when the second ticks happen, and then only moving them from the "put" queue into the "get" queue at that time, internally.
    • At the moment this seems to work about the same as the locks did, and the performance should be similar. It should remove all possibility of the wonkiest sorts of race conditions actually manifesting, though.
  • In a spate of further (justified) paranoia, the entity ship-to-ship lines, and the planned metal flows, have been hardened against the sort of multi-threaded pool-area shenanigans that have plagued entity orders until recently.
    • The planet faction pool was examined and found not to be vulnerable (since those are only reused between campaigns, not during a single campaign), so that simply got a note in there saying if the usage changes (very unlikely) that they should be switched to TimeBasedPools like the others are.
    • This should prevent any funky issues with metal being allocated strangely, or things building too slowly or whatnot, or the visuals for beam weapons getting strange.

Version 0.777 First Impressions

(Released October 1st, 2018)

  • Add some extra Schematic Servers and Data Centers for very large maps (> 140 planets)
    • Otherwise there will be lots of the map with nothing interesting in it.
  • Tweak hacking mouseover to look more presentable
    • Thanks to HeartHunter for the report
  • Instigator base tooltips now show the budget increase in percent rather than internal AI budget number
    • Thanks to Kesseleth for prompting
  • Add the ability to hack Schematic Servers to get access to a different Tech Type in that server.
    • Currently untested
  • The game now runs a release version of itself instead of a development mode version.
    • This gets rid of the Development Mode notice in the bottom right corner, but also means that we no longer get line numbers for any errors that pop up.
    • The line numbers thing is less of a crisis now that so much of our important code is in external dlls that don't work with line numbers anyhow. We still get stack traces, and this just means we have to use the debugStage approach everywhere now.
    • This also means that the old AIWar2_Rel version of the game is gone from the install folder, since it would now be redundant.
  • You can now click wormhole names as well as the actual wormholes themselves in the planet view. This makes them vastly easier to click.
    • Thanks to a lot of players for hounding us (rightly so) about this for a long time! Especially dv = i ln(w0 / wf), Badger, and Kahuna.

Visual Improvements

  • The visuals for the assault starship have been completely replaced.
    • Other things that were using the assault starship graphics still do, however. Some of them will keep the old graphics permanently.
  • The Dyson Sphere background has been drastically improved in appearance.
  • Ten new planet visual styles are now available for show in the background of the game!
  • The backgrounds and planets are now once again being drawn in their own camera that is layered under the main camera, which prevents large ships, forcefields, etc, from ever visually clipping into planets.
  • The sentry starship has been completely redone from scratch, and now looks much cooler.
  • The Spire have a completely new look, and the spire frigate has been redone from scratch.
  • The Dyson ships (all of which are spire-themed) now have real graphics for the first time, and a quite cool translucent look.
  • The fortress has a completely new look, much more angular and intimidating.
  • Wormhole graphics have been replaced by a particle system, since the old style of graphics were having layering issues that were ultimatley intractable.
    • The font above them is also improved now, while we were at it.
  • The main menu has been completely reworked, in terms of what the background scene looks like and the colors of the background as you are loading into the main menu.
    • It will probably see more changes in the future, that's how this tends to go. But it's a lot more attractive for now, which hopefully helps set the tone at the start of the game better, in terms of first impressions.
    • Note that the actual menu part isn't adjusted at all yet, just the background.
    • Oh, and the logo shows as all white now, as if it were just a flat sprite (it's still a 3D model, though, so it draws more crisply).

Balance Tweaks

  • AutoBombs damage increased from 90 to 130, now has a 2x multiplier against 80mm armour and below, increasing by 0.5x per mark.
  • Temperamental and Fragmenting Guardians will no longer spawn in any offensive action (Wave, CPA, etc) and only as reinforcements.
    • It was weird to get Eye-mechanic ships attacking your planets...you could never snipe them or anything of the sort before they triggered.
  • All turret health halved, energy cost for all but the Heavy Beam Cannon reduced by 100GW.
    • These were...honestly, stupidly tanky. Their strength due to automatic calculation is now lower as well, so the AI won't quiver in terror at a dozen turrets.
  • Autocannon Minipods health increased from 400/400 (Hull/Shields) to 600/600. Metal cost reduced from 1500 to 1200, now have a 2x damage bonus against things with 100mm armour and higher, increasing by 0.5x per mark.
    • Intended to kind of swarm and gun down tougher single ships, like some of the Nanocaust (albeit easily infected) and Dire Guardians.
  • Eyebots health is now 1000/1000 (Hull/Shields), and they gain a 3x damage bonus against targets with at most 600 energy consumption, increasing by 1x per mark.
    • Fairly experimental. Meant to be kind of Sniper/Sentinel Frigate hunters, though they do get bonuses against...most fleetships, actually. See how they go!
  • Concussion Guardians and Guard Posts now have a range of 18,000, instead of 30,000.
    • Were often able to cover the entire planet, more a trait of Sniper types. Also fairly obnoxious when attacking.
  • Nucleophilic Guard Posts damage multiplier reduced from 6 to 3 to bring it in line with similar units.
  • AI Guardians strength value increased by 50%, Temperamental and Fragmenting increased by 500%.
    • Too many of them. Especially the Temperamental and Fragmenting, which were being bought incredibly cheaply and en masse.
  • Add a per-difficulty 'Percent Wave Strength that's allowed to be Guardians' tunable, which right now caps out at 45% for difficulty 10
    • Thanks to Kesseleth for the bug report
  • Gryn, Void Home now has a starting build rate of 5000, up from 2000, and gains 2500 per Mark, up from 1000.
    • Thanks to Kesseleth for trying to push this Ark and...finding it falls flat. Hope this helps the regret issue!
  • All Arks starting weapon has far higher damage - generally between 3000 and 4000.
    • I imagine these might need tuned again, but it'll do for now until more data comes in. They won't break the game or anything.

AI Types

  • All current AI types now have their appropriate ships at game start, with the exception of Starfleet Commander.
    • Will get to him soon.
  • Add new AI Type 'Turtle' that spends most of its budget on Reinforcement
  • Add new AI Type 'Quadratic' that doubles its wave Interval each time (leading to doubled wave strengths). Just like AIWC.
  • Rename "Salvage Master" to Overreactive to match AIWC

Bug Fixes

  • Fixed a bug that was causing schematic servers to often have duplicate items to grant to players.
    • This will also retroactively fix old saves.
  • Improved some of the initialization code so that it will always put entities in their proper rollups based on all their data being calculated for sure by the time it is needed.
  • Fixed a bug with the dynamic zoom levels on the galaxy map where if the galaxy was taller than it was wide, it would not give you quite sufficient zoom out.
    • Thanks to Ovalcircle for reporting.
  • Major surgery in part of the ui code, specifically relating to "when to tell something to draw."
    • Previously it was telling things to draw, once when it was time to change states, and then assuming it would actually DO that and thus it could not bother telling it again until things changed. Aka, "draw yourself until I say otherwise."
    • Unity UI has a "fun" thing, however, where if an element is a child of a disabled element, then telling it to draw won't properly flip it's internal flag. Apparently. There may be some other funkiness in there, too.
    • At any rate, there was quite a bit of "huh?" and "I didn't hear you" going on in the sidebar in particular, leading to things updating slowly or not at all. Things like the objectives menu getting garbled when you had more elements added, or things like space docks beyond the third not displaying unless you went to another planet and back (and sometimes not even then).
    • Now we just take the approach of saying "STAY ON" every frame, or "YOU BETTER BE TURNED OFF NOW," as the case may be. Turns out that's just the sort of special tone the Unity UI requires in order for it to do its job. Yes, the snark is heavy, but this has made life intermittently frustrating for the better part of a year.
    • The concern with this method had been that us telling hundreds or thousands of ui controls STAY ON or BE OFF every frame would be a performance hog. We would have to trust that the Unity UI itself had an "early out" in there saying "I'm already on, we're good" and thus not doing a whole bunch of work whenever we say STAY ON and it's already on. It seems that is the case, happily, because we still get 180+ fps in our test case with plenty going on in the UI.
      • It's also worth noting that since our UI is hierarchical by nature, we wind up doing a lot fewer of the STAY ON calls than we had been thinking might happen. A lot of things early-out at the window/canvas level, and don't go any deeper than that, which makes the actual number of redundant calls per frame far lower.
    • What we did NOT expect was that this would bork up various of our GUIs, most notably the main menu, tooltips, and a few other floating text windows. We had to normalize how those windows report "I should be on" or "I should be off" to match the technique of the rest of the windows. Now they do, and so it all works fine. But that did lead to some rewriting of bits of the tooltip display code, which makes how they turn on have a slightly different delay than before. Possibly faster? The sidebar reacts faster, for sure. Some of the tooltips might be slightly slower to react. We'll sort it out later, because it's pretty close to what it was before.
    • The TLDR, at any rate, is that the UI actually does what we tell it now, so far as we can tell, and there aren't random missing elements on the sidebars, or elements that draw over and under other elements until you switch tabs and back. (Now the things that still draw wrong, draw wrong consistently; which is much easier to fix as well as far less prevalent!).
  • Makes Dark Spire Vengeance Generators immune to all damage.
    • Thanks to HeartHunter for yet again, being the only one to actually try shooting something that says invulnerable on it.
  • Background story text is no longer garbled.
    • Thanks garpu for noticing!
  • Hopefully make Science and Superterminal hacks work correctly.
    • A number of people have complained about this
    • Some extra testing to make the UI makes sense would be desirable.
  • If the AI has queued up a wave from the Exogalactic Wormhole (which is legal), reflect this in the wave notification tooltip
    • Thanks to hearthunterfor noticing
  • Make some improvements to Instigator Base tooltips and calculations
    • Thanks to Kesseleth
  • Fix a bug where Dark Spire units were being really boring and sitting around because they would think that they were in combat with Cloaked units
    • Thanks to HeartHunter's save game for letting me notice

Version 0.776 A Legible Galaxy Map

(Released September 28th, 2018)

  • "Change Profile" under the "More" dropdown in the main menu now edits the profile you made at the start of the game. The same thing can be done by clicking the name of your profile at the bottom of the screen.
  • Add a BudgetSpending trace class so we can figure out why HeartHunter reports such weird wave timing.
  • Fixed typo in Super Terminal description.
    • Thanks to Ovalcircle for noticing.
  • There are now proper icons for all the various types of notifications at the top of the screen. The text overlap is still there (that's to be fixed very soon), but now you can see if it's an astro train moving around or the macrophage or whatever, without everything using the "your home planet is under attack" icon.
    • Now if you see that home planet attack icon, you should really pay attention! That icon shouldn't be up there if you're defending yourself well... ;)
    • Thanks to Badger for setting all these up!
  • There are now all-new wave icons. Well, they all use one of the icons that previously we had, anyway. But then there are four variants of those, for regular, home planet, reconquest, and reprisal waves. Since they all share the same base icon now, they are much more recognizable.
    • Additionally, if a wave is being directed at a non-player faction, these same icons will show up grayed out instead. Note that if a different player in multiplayer is attacked, then it still shows up with the normal brightness because you should care!
    • Also note that for reconquest waves, those never show up grayed out because those are always aimed at a planet not under current player control.
    • Thanks to Badger for setting all the innards of these up, too!
  • You will only get a "Planet Under Attack" notifier if Mobile enemy units are on that planet. If there are stationary enemies then you knew about them when you captured the planet. The most common case here is Shield Generators you haven't killed yet.
    • Thanks to HeartHunter for the impetus for this

Proper AI Guard Aggro

  • If a human player ship fires on a guard or something that has guards, then the guarded-thing and all its guards should now be immediately aggro'd. A quick test from Badger indicates that it is a giant improvement. There may still be some corner cases, but it's much better now.
    • Thanks to Badger for suggesting an approach.

Galaxy Map Improvements

  • The galaxy map now uses the same sort of icons that we use in the planet view and sidebar rather than 3D models.
    • This lets you actually see the planet ownership color WAY more clearly.
  • There are now different icons for if a planet is un-owned, owned by a mark 1-7 AI, owned by a non-AI (player or NPC), unscouted, or a homeworld for the player or AI.
    • There's also a version of each of these for "I have visibility here now, or I don't," which lets you know what you scout coverage is. Theoretically -- that aspect still needs a lot of work.
  • The planet name and description text fonts have been improved a lot.
  • The icons and text of the planets no longer scale up and down as you zoom in and out. This makes them far easier to evaluate in terms of what is attached to what planet.
  • The galaxy map camera now actually does scale up the planets and their associated text and sprites, but it sizes them up all as one unit that makes them not remotely so confusing to deal with as they were in the prior versions of the game.
  • Additionally, once you pass a certain zoom level (configurable in xml), it now starts hiding the special entity icons, and then shortly after that if you keep zooming it stops showing the side text as well.
    • Basically if you zoom out that far, things get too crunched together and illegible anyhow, is the idea. There might be some debate on what level those kick in as far as being issues, but they should be pretty safe values for now.
    • The function of being very very zoomed out is thus about seeing where there are planets and who owns what, rather than trying to read all the little numbers or see all the little icons.
    • This was another excellent Eric idea that only became possible recently.
  • The planets on the galaxy map are finally attractive as well as actually something that you can tell if you have visibility on them at the moment or not, AND easily what mark level they are if they are AI-controlled.
  • The zoom levels on the galaxy map have been completely reworked, allowing you to view things closer and keeping things tighter on the zoom-out.
  • The apparent distance between planets is now twice as large, making it so that planets don't visually overlap as much. In the mapgen code, nothing is different, but our actual planets draw at half the size as before and you can zoom in roughly twice as much now.
    • Thanks to Mckloshiv and many others for reporting the overlap that previously would happen.
  • The "lower down text" on planets is now a "left text" and "right text" instead.
    • This keeps things nicely organized in a way that Eric has been suggesting for a while, but that Chris didn't think he could do when the scales of the text and icons and whatnot were changing all the time. That math would have been really tricky, when combined with the 3D objects from before. Now it's trivial, so we have Eric's superior design in place.
  • The "ships of note at this planet" now show up below the planet, centered and then filling in in two rows of 3 at most. In older versions of the game we could only display 4 items at a planet on the galaxy map, and they were way off to the upper left of the planet in a really confusing way.
    • Thanks to dv and others for suggesting improvements.
  • On the galaxy map, when it's showing allied or player strength next to a planet, it now shows first the mobile strength on one line, then the rest of the strength on the next line.
    • Thanks to dv = i ln(w0 / wf) for suggesting.
  • On the galaxy map tooltips for planets, instead of just showing "enemy strength," it now shows the same information that the normal text to the left and right of the planets now do, just written out fully.
    • This way you can actually figure out what those numbers MEAN, since this shows the same values but with the text written out.
  • Updated the galaxy map zoom to be dynamic, so that it allows you to zoom out enough to view the entire galaxy map, whatever that size may be. This allows for us to have full flexibility in laying out galaxy maps however we want without zoom becoming an issue. Particularly important when we're trying to do something like ensure that planets are never so tightly packed together that their text overlaps.
  • Double-clicking planets in the galaxy map view now immediately takes your view into them.
    • Note that you can also hold Ctrl and then left click planets to do the same thing if you wish.
    • Thanks to Kahuna for suggesting.
  • In the galaxy map, hovering over any ship type or ship icon in the left sidebar (ships, docks, build, or science tabs) or underneath a planet in the main view, will darken all planets that don't have one of those on it (or that you don't know of having one on it). It does not differentiate by faction.
    • You can use this, for one example, to quickly find all your scouts.
    • You can also use this, as another example, to quickly see all the planets that have fleetship schematic servers (that you've discovered).
    • Reminder: holding shift will suppress the tooltips, making it easier to see the planets that have darkened.
  • Hovering over objectives on the sidebar when you are viewing the galaxy map now darkens all the planets that are not related to that objective.
    • This is highly useful, because then you can easily see where things are on the galaxy map without having to hunt through icons. You can simply look by category in the objectives section and easily plot your personal plans without having to zoom in and out a bunch, too.
  • All of the objectives in the sidebar now have one of the following behaviors when hovered-over:
    • Highlight/darken no planets (rare; refers mainly to things that could be anywhere and everywhere, like a nanocaust invasion).
    • Darken all planets (not super common; refers mainly to things that don't have a specific location in mind, like spending science).
    • Highlight a specific planet (common; the objective is clearly on a single planet and this is the one).
    • Highlight all planets with a specific entity type on them (common; all the places that can be hacked a certain way, for instance).
    • Highlights all unexplored planets (common; "explore galaxy for xyz" items and "find the overlord" items all do this).
  • The lines in the galaxy map now draw much thicker, and scale up appropriately as you zoom out. Overall this makes things vastly more visible.
    • There is also more contrast now between the color of "just regular lines" and "lines that represent a relationship."
  • When you are hovering over the notifications at the top of the screen while on the galaxy map, they now do the same sort of highlighting of the relevant planets that the objectives on the sidebar do.

Bugfixes

  • AI specific fleetships are no longer selectable as bonus choices.
    • Thanks to Hearthunter for noticing.
  • Salvage is now collected based on unit Strength not metal cost. Fix a bug where salvage wasn't being collected by the AI. As far as I can tell player salvage is working.
    • Thanks to RocketAsssistedPuffin for reporting
  • Fix a bug where things were Autobuilding before the Command Station had finished building
    • Thanks to folks on Discord for noticing, Ovalcircle in particular
  • Fixed an exceedingly rare exception that could happen during error logging itself.
  • Fixed it up so that "normal planet nasty picks" don't block larger faction things from seeding. These were causing map generation failures on higher difficulty levels.
    • Thanks to zeusalmighty and BadgerBadger for figuring out the fix.
  • Fixed an issue where, in fresh installs of the game, the escape key would not work for closing the in-game menu. No idea how long that has been going on, but it's one of those "how did that ever work?" situations. Basically it WAS closing it, but then immediately checking if it should open it again thanks to some keybinding confusion. Apparently at one point in the past, a triple-negative made a positive (which is correct, but... ugh).
    • Thanks to Ovalcircle, HeartHunter7, and Dominus Arbitrationis for reporting.
  • Fixed an issue where if we remove a keybinding there would be exceptions shown on the main menu the next time you started the game.
  • Fixed a bug where the AI's hacking response was not correctly handling its Response Multiplier. So you were getting waves 5x too strong.
    • Thanks to HeartHunter for noting.
  • Fixed a bug where it was not showing allied strength when you were not also present, in the little text next to planets on the galaxy map.
  • Fixed a bug that could cause the map generation logic to fail infinitely if it didn't generate any planets.
  • Commented out an exception that was probably harmless ("Error: tried to start thread [threadname] but it appears to not have responded to the last start request"), but that could come up in some rare cases.
    • Basically this is probably a timing issue that isn't really an issue; the exception was originally there to detect threads that didn't start for whatever reason, but based on the occasional latency in starting a thread that can naturally happen, this was likely getting triggered spuriously. Basically it should just fail silently, then check again a few milliseconds later and everything will be fine.
    • Put another way, this logic was put in originally to catch threads that fail to start at all for whatever reason. That has never happened, though. What actually happens is that sometimes threads are a little slow to start, on a millisecond scale, and this would get tripped by that case instead. So our threading manager needs to basically just be quiet and trust that the OS will spin up the thread quite soon. ;)
    • Thanks to ColonelBlimp for reporting, although Chris was also running into this sometimes.
  • Fixed a minor bug that was letting players see "hack X ship type" objectives prior to exploring their planets.
  • Fixed some really annoying input lag with the band-box selection.
    • Thanks to HeartHunter7 for reporting.
  • Fix a null reference exception in AstroTrains
    • Thanks to Puffin for reporting

Balance Tweaks

  • Auto Bomb cost down from 1000 to 600 for spammability.
  • Exogalactic Waves can now use Dire Guardians as the Exo-Leader.
  • Command Station changes.
    • Economics now only give 5k Energy per mark, down from 10k.
    • Military now only gives 60 metal at mark 1, increasing by 20 each mark.
    • Logistics now now only gives 60 metal at mark 1, increasing by 20 each mark. Now increases metal storage by 300k instead of 100k, grants 20k energy at mark 1, increasing by another 20k each mark, and harvests salvage at twice the rate of the others.
  • Mercenary Flagships should now have a health total of 1 million, and Distractor Flagships should have 1.6 million.
  • Raid (and AI Raid, though it spawns none yet) Starships now do 2000 damage, up from 1000, bypass 90% of personal shields, have 50mm armour up from 30, engine gx of 18 up from 14, cost 70k instead of 7k, gain 2 per mark up from 1, and gain 500 Cloaking Points per mark, up from...none. Oh, and they're a much higher priority for the AI, so it WILL shoot these if it sees one.
  • Sentinel Frigates now have a strength multiplier of 2, so the AI won't get several hundred of them early on as easily.
    • Likewise the AI will consider yours to be more of a threat.

Hacking Rework

  • The balance levers for Hacking response have been moved to the XML. This will make it much easier to balance Hacking in the future.
  • The AI will tell you its response level in the tooltip for hacking points

AI Types

  • Adds the Sledge Hammer type.
    • Takes longer to spend the wave budget, but as a consequence when it finally does, the wave is much larger. Gets worse with things that add to the budget.
  • Adds the Golemite type.
    • Has Golems occasionally in the same place Dire Guardians would be. Rare, but sore.
  • Adds the Vicious Raider type.
    • Has access to the Vicious Raid Starship, which is identical to the players...except it also has a bonus against bubble forcefields, to break them down and get at the vulnerable targets within.
      • You can hack the Design Backup for these, to either stop them ever appearing or steal it for yourself...

Version 0.775 Unit Stacking

(Released September 25th, 2018)

  • Orchid Ark weapon renamed to Fusion Spore Bomb for theming.
    • Thanks to zeusalmighty for suggesting something along that line.
  • The little yellow backplate behind attack-moving (stop on target; x+click) units is now less overwhelmingly large.
  • There is now a midsize blue backplate behind the icons of units that are currently containing other units.
    • Units containing other units? Why yes! Guard posts do this all the time, not that you would have known prior to now. Guardians sometimes do it, too.
    • Additionally, their icons now show a count of how many units they have within themselves.
  • If an entity is a stack, then now the tooltip for it says that it's a stack, and how many.
    • The tooltip also says what that means, and what the current outgoing damage multiplier from it is.
  • The various status-of-the-ship text at the bottom of the tooltip is now drawn in a smaller font so that it's less of an overwhelming blob an more easily told apart from the text higher up.
  • For the first time, you can finally see in the tooltip for a ship how many ships it contains inside it, and at what strength. That goes for those that carry drones, as well as those that are enemy guard posts, etc.
    • You can freely see this information for any faction.
  • The game now supports having systems partially overriden in copy_to entries. Please see AntiShieldSpaceTank for one example, and VeteranSniper and GhostSniper for another style.
  • Design Template Servers are now far more aggressive about being seeded when the AI gets a new ship type unlocked.
  • Fix a null reference exception on unit transformation, in particular changing command station types
    • A number of people noticed, including Mcloshiv, Kesseleth, Hearthunter and probably others

Bugfixes

  • Fixed a bug where the schematic servers were seeding at a distance of >= 2 hops from the player planet rather than > 2 hops.
    • Note that in some instances you'll still find ones seeded closer, but it should be rare.
    • EXCEPT for always 1 of the turret servers should almost always be within distance 1 of your planet, and 1 of the starship servers should always be at distance 2 from your planet. With a few rare exceptions.
    • Thanks to Mckloshiv for reporting.
  • Fixed a bug in the prior version of the game which could have let other factions seed ON the home planet at times.
    • Thanks to OvalCircle for reporting.
  • Improved the output of the error message if the galaxy doesn't have enough space for all the factions in it so that we can see what the heck is actually going on, why it thinks things are filled. Right now it makes no sense and seemingly shouldn't be possible, so there's some sort of other bug this will let us track down.
  • Fixed several cases in the targeting code where there could be a bad sort result because of PrimaryKeyIDs being reassigned.

Automatic Strength Calculation

  • The concept of a strength multiplier (for visual display purposes) on the mark level is gone. There is now an attack multiplier instead, like the hull multiplier that exists there.
    • As the mark levels go up, we're now introducing ever so slight of a creep to the attack compared to the hull values. This makes battles between two mark 7 ships take very slightly less time than their mark 1 counterparts battling would. The effect is super duper slight, though.
  • There used to be a required "strength" integer on all units. That has been removed, and strength is auto-calculated now.
    • The existing field was renamed to old_strength, and its sole purpose is for a comparison point when manually looking at the GameEntityReferenceData.csv export in the PlayerData folder.
  • The GameEntityReferenceData.csv export in the PlayerData folder now has the strength field moved up to column D, and then has the "old strength" in column E, and the difference between the two (new-old) in column F.
    • Note that this csv file is used just for populating the wiki, or for people to use as a direct reference. It's an export only, it has no gameplay purpose directly. It gets generated every time you launch the game.
    • So if you're balancing a unit, you can make some changes in xml, then run the game and check out your updated csv file. Tip: if you're using excel, be sure to close the csv file before you run the game, because excel locks the file from external editing while it's open.
  • The way that strength is now calculated is very simple, and it is NOT multiplied by mark level anymore.
    • In other words, it recalculates this independently at each mark level, rather than calculating at mark 1 once and then multiplying for the higher mark levels.
      • This means that there can be some WILD swings in the strength of a unit at higher mark levels if it gets extra guns at higher mark levels. Just something to bear in mind. The export presently only writes the mark 1 versions of units.
    • The formula, per mark level, is simply: ( (hull health at that mark level)/12 + (shield health at that mark level)/20 + SUM( DPS of each weapon at that mark level) ) / 20. Minimum 1.
  • What exactly does the "strength" value affect?
    • It affects the values shown in the interface to the player, which is important to decision-making but not actual gameplay.
    • It affects the values that the AI and other factions use to calculate risk and opportunity when considering planets to attack or defend. So this DOES affect AI/NPC behavior quite a lot if it thinks that something is much stronger or weaker than it is in reality.
    • It affects the "cost" of units that the AIs and NPCs pay in order to purchase units for waves, reinfocements, etc. Where the player spends metal, AIs and NPCs spend strength budget points.
      • This also applies to how mercenary units determine what to bring with them; they have a strength budget that gets randomly allocated to their allowable units when you hire them.
  • With this in mind, it is sometimes going to be desirable to multiply the strength value to get a different number.
    • Usually this is because there is some other factor going on with the unit. The DPS calculation does not take into account any multipliers to outgoing or incoming damage, for example. It doesn't take into account any strange special effects like zombification.
    • Therefore, to allow for human fine-tuning of the strength calculations, we have a strength_multiplier field that can be set to a floating-point-style number (actually a fixed-int on the inside).
    • This can be set to adjust units to be valued as more or less threatening, plus more or less expensive to the AIs/NPCs to purchase.
    • One good example is Snipers -- they come out with a strength value of 3, because their base attack speed is very very low. However, they have a 10x attack multiplier against fast targets, and that isn't reflected at all. So we added a strength_multiplier="2" to make them show up a bit more appropriately.
    • On the flip side we have Scouts, which come out with a strength value of 25, which is ludicrous. They have no guns at all, but a lot of shielding; so they're weak to anything that fires through shields... plus anything that shoots in general. For now we've set a strength_multiplier="0.3", putting them at a final strength of 8.
    • Note that we HAD internally talked about using a strength override instead of a strength multiplier, but because we're calculating these values per-mark-level rather than at the base and multiplying, that really isn't possible. This approach also makes it so that changes to units with a multiplier are automatically reflected, whereas if it was a flat override that would not have been the case.
  • The exports for the csv file are now strictly ordered by name, rather than by starting mark level and then name. Now you can actually find things in there!
  • There is now a second export, GameEntityStrengthData.xml, that happens at the same time as the csv export.
    • This gives an export of just the vitals for purposes of strength balancing, and actually shows the strengths and strength differentials for every mark level that a ship can have.
    • Despite the extra data, it's in a far easier-to-read format, and doesn't require you to close it every time you run the game to update it. You can just keep it open like any other xml file, and if you're in visual studio it will just automatically reflect the new values so long as you made no changes to it. If you're using Notepad++, it will ask you if you want to load the changes, but that's a minor inconvenience compared to what it was before.

Unit Stacks

  • It is now possible for AI/NPC units/squads to be "stacked."
    • A stack consists of 2+ identical units, with a little marker on them stating how many are in the stack.
    • A stack is able to fire at up to 5x its normal attack power, depending on how many units are in the stack (1 unit in a stack = 2x, 5 units = 5x, 5+ is still 5x).
    • A stack takes damage just as it would if it were not a stack. When the current item visible from the stack "dies," then the next item pops out and the stack count goes down by one.
      • Damage does not roll over from one unit in the stack to the next, so this makes AOE weapons weaker against stacks, as well as weapons with a lot of overkill.
    • If a tractor is grappling a stack, then each stacked entity counts as 1/4 of a tractor target for purposes of the grappling capacity of the tractor beam.
      • This makes tractor beams substantially stronger against stacked enemies.
    • The purpose of stacks is performance and visual decluttering. These keep the battles runnning quickly while still being large.
      • Note that ONLY mobile ships/squads can stack. Turrets and whatnot do not stack.
      • Stacks will typically only kick in when there are more than 50 of a single type of unit on a planet, owned by the same AI/NPC faction.
      • However, there is a max_count_per_npc_faction_before_stack flag that can be assigned to entities to make them stack sooner.
        • The various starships and guardians that have bubble forcefields now have a value of 3 for max_count_per_npc_faction_before_stack.
          • This keeps them from absolutely tanking performance if the AI somehow gets a hold of a ludicrous number of mobile shield generators on one planet, which has happened in the past.
    • The stacking logic runs on a background thread on the game host only, and sends out orders across the network to cause units to stack when needed.
    • It's worth noting that this also makes savegames WAY smaller during certain ginormo-battles.
    • Additionally, when there are stacked units on a planet, and there are fewer than half the stacking cap, then stacks start being slowly split apart.
      • That way you don't wind up with a single stack of 50 units as the last entity, it will spread back out, first to two stacks of 25, and so forth and so on.
    • Also note that the combining into stacks is done by mark level, so if there are multiple mark levels at a single planet it will not mix and match and change the difficulty on you.
    • Thanks to these changes, our test savegames where we had awful things like literally 10% sim speed and 50+ second targeting cycles now run at full speed within 30 seconds of loading, and have quarter-second targeting cycles as well. In the 10% performance savegame's case, it also reduced the savegame file size from 8.6MB to 1.6MB.
    • Thanks in particular to HeartHunter7 for providing us with so many high-intensity saves to really test the system.
  • The way that commands queued from long-term continuous planning loops are done is now far more immediate and responsive.
    • Also... found a couple of WTF items relating to the thread timing of intermittent versus continuous that we fixed up. It's one of those "how did this work at all with those bugs" things. Actual functionality doesn't seem to have been impacted, though, strangely.

Unique Ship Varaints For AI Types Now Possible

  • AIs now have two new fields on them that can take lists of GameEntity InternalName lists:
    • ship_lines_to_start_with gives a list of freebie ships that that AI type starts with.
    • ship_lines_forbidden gives a list of ships that that particular AI type can never unlock.
      • Note that this can't remove the basic always-unlocked ship types.
  • The Ghost and Sniper and Shield Hater AI types now have some unique ships of their own that are variants of the main ships Sniper and Space Tank that get seeded for their types. Ghost Sniper, Veteran Sniper, and Anti-Shield Space Tank, specifically.
  • There is a new field ai_can_not_directly_unlock_this that can be added to ship types, which makes it so that the AI won't normally get this ship type via the usual unlock methods.
    • This is assigned to the unique ship types that those AI types have, preventing other AI types from using them.

Balance Tweaks

  • AI Concussion Guard Posts damage multiplier reduced to 3x at Mark 1. Dire version changed to have the same as a Mark 5.
    • A combination of these and Sabots would have been very unfortunate...
  • Mercenary Flagships have had their health increased, so they are more likely to survive to yarr harr again.
    • Thanks to zeusalmighty for pointing out their low life expectancy.
  • AI Guard Posts (not Dire) have had their hull and shield values shifted drastically - 33% of their total health is now in hull, with rest in shields.
    • Fusion Bombers were...completely ineffective at shield piercing these - the shield was so little that it went down before the Guard Post died, meaning...well, you didn't bypass any of it. Now they should be better Post killers.
  • Fusion Bomber damage decreased from 225 to 125, reload time halved from 12s to 6s.
    • Still a damage increase, but prevents the annoying case of them firing pot shots en route to their actual target, then having to stare at it uncomfortably for a long time...before finally attacking it!
  • V-Wings have been altered a fair bit. Health is now mostly in shields, with a bit of hull, their weapon range is increased, damage decreased from 80 to 20, reload decreased from 4s to 2s, they now fire 2 shots per salvo instead of 1. They gain 1s engine slow per Mark, down from 2, and at Mark 4, their "Slowing Shotgun" is exchanged for the Enhanced version, which fires 4 shots instead, and has a maximum engine slow of 5s instead of 4.
    • Hopefully these are actually wanted! Possible scenarios are being thrown at the Warden fleet while the rest of your forces attack elsewhere, delaying the response, intercepting Plasma Guardians from hitting your forcefields, etc. Should succeed at these more now.
  • Auto Bomb health increased from 300 to 1500, damage tripled from 30 to 90, and they now hit 12 targets instead of 9.
  • Warbird damage increased from 120 to 160 per shot.
    • Thanks to Mckloshiv for the suggestion on these.

Version 0.774 Five Thousand Days

(September 24th, 2018)

  • Astro Train notifications only tell you the planet name if you have vision of the planet
    • Thanks to Puffin for noticing
  • Incoming waves now give a text notification, including their target planet
  • Slight tweak to description of Instigator Bases
  • Slight tweak to the tutorial
    • Thanks to Eric for the suggestion
  • The number of construction voice messages could get overwhelming, particularly if you were in the middle of heavily fortifying a planet. Limit them to no more than once every 10 seconds
    • Thanks to Puffin for the suggestion
  • Human Command Stations now harvest Science and Hacking points at a slow rate from the planet they're on.
  • Slight tweak to Intensity 10 golem seeding.
  • Add in several new varieties of Cluster map type. One is called Nebula, I'm looking for names for a few others. Also give Small Clusters a bit more randomness.
  • Allow the player to choose how many planets they want in the galaxy
  • Slight tweak to hovertext for incoming wave notifications
  • Don't allow Nanocaustation or Zombification for Drones
  • Unclaimed units (metal harvesters, etc) no longer regen their shields until they are claimed.
  • A new keybind has been added to the game, default bound to shift: Suppress Tooltips
    • Description: Sometimes you just want to look around without tooltips coming up at all. Hold this key to do so.
  • Previously only the P and Pause keys would pause the game. Now the spacebar does, as well.
    • Thanks to Dominus Arbitrationis for suggesting. Chris kept hitting spacebar, too, trying to pause and unpause.

New Objectives

  • Killing Data Servers/Coprocessors
  • Capturing Schematic Servers
  • Hacking DTS/Supterminal/Dyson Sphere
  • Beginner Objectives to seek out Schematic Servers/DTS, and also to build Engineers and Remains Rebuilders

AI Defensive Changes

  • Allow the AI to defend all its Guard Posts, not just the command station
  • Allow the AI to spawn Guardians for defense
  • Allow the AI to build at most 1 of each type of non-turret defense per guard post/command station.
    • This prevents fields of Tachyon Sentinels from being build
  • Don't allow the AI to build shields both with the Shield budget and the NonTurretDefense budgets.
    • This was allowing the AI to have a ton of shields per planet. Thanks to Puffin and zeusalmighty for reporting
  • The AI is allowed to use Guardians in Waves
    • Only 1/3 of the wave composition can be Guardians, so fleetships will always dominate
  • Decrease the number of Riot Starships built by the Warden Fleet

Performance

  • A lot of the ship to ship targeting is now separated out into just being calculated at the faction level instead of at the ship-system level. We also now do early segregation of things with zero priority (the stuff for "very last") to keep our list sorting a bit faster. We tried a bunch of other things, but just can't get the sorting any faster than this at the moment. There are some changes we could make, but they would likely be incremental in nature. The amount of data to crunch is just astronomical by gaming standards.
  • For-multiplayer-in-the-future performance improvement: the game steps and the primary keys for entities are now stored as int32s rather than int64s. This saves on the amount of data we have to pass around, and is smaller in some math operations as well.
    • There was never going to be another chance to make this sort of change where we wouldn't be impacting actual live games, so now was better than any other time to go ahead and do it.
  • Rewrote some of the targeting eligibility code to be far more robust, and to get run less frequently on the targeting thread, as well.
    • This probably will fix the issue with targeting sometimes stalling out but having really low times for the targeting thread cycles.

Visual Changes

  • Instigator Bases, Astro Train Depots and Stations now use much larger Space Dock models, for a visual upgrade and ease of targeting them. This is temporary.
  • Macrophage Harvesters now use the Tethuida model and icon, to better suit being giant organic ships. Enraged Harvesters use the Tethuida Drone icon, and get even bigger to help pick them out as...well, enraged. This is temporary.
  • Riot Control Starships are now named Shield Starships.
  • MLRS Guardposts and Fortresses now fire all of their missiles at once instead of one at a time.
  • Mercenaries now use the colour gunmetal2 to make them stand out a bit more in text.
  • AI Sentinels default main colour shifted a bit away from red to help differentiate them more.
  • Fortresses are now bigger and more impressive looking!
  • Arachnid named weapons and units, and mass driver weapons other than the Orbital Mass Driver, are all now called Sabots.
  • Dark Spire Vengeance Generators now use the Dyson Warp Gate model.
  • Marauder bases now use the same Space Dock model as Instigator Bases and Astro Train Stations/Depots.
  • All references to Lightning/Electric changed to Tesla.
  • Flak Turrets and Guardians renamed to Grenade Launcher Turrets and Guardians.
  • Dire Leech Guard Post is now named the Parasite Guard Post.
  • Widow Guardians, both normal and Dire, are now called Paralysis Guardians.

The Icon Overhaul

  • Wow what a butchering of old icons! For the ship icons, we're not sure offhand how many we removed that were there, but we only kept 56 of the ones that used to be there, and have added 105 new ones, so that gives you a pretty good idea of the scope of changes.
    • In general the way that the icons are handled is now different, with things like guardians and turrets and so on all sharing one central icon that is easy to recognize, and then having little colored overlay markers that show a pictograph that you can recognize to see what KIND of turret or corvette or starship or guardian or whatever they are.
    • Overall, yes, this gets kind of back into the idea of flair, but handled a lot better this time. It's not generically--placed on ship images, but rather is overlaid where makes sense. The way the command stations for the player are handled is particularly cool, with the center swapping out for different graphics depending on if it's logistical, military, or economic in nature.
    • Additionally, tons of ships that never had unique icons at all (Arks had no icon of their own, macrophage and astro trains did not either, merc communicators didn't either, and the list goes on) now do.
    • And then various icons that were just hard to read, or which were so thin that they made the color look odd on them compared to everything else on the team, have been redone. Corvettes are the big one there. But they're just one among many.
  • Information overload! The various statuses and modifiers on the ship icons has been getting overbearing.
    • Actually it's been overbearing for a while, it's not "getting" that way. But having the new little overlay modifiers next to ships was making it more obvious how hard the actual ship icons themselves (including the new overlays or not) were to even SEE when you had your ships in an attack/FRD stance.
    • With that in mind, we began experimenting with a way to make it so that it wasn't such a huge round red sphere behind ship icons that are in attack stance.
    • Ultimately, the only thing that really works well is having a little tiny marker that is basically behind the mark level numerals, or where those would be in the case of markless ships. This keeps the amount of visual clutter down, and doesn't obscure the profile of the actual ships, so you can finally SEE what is happening in your big mass of ships.
      • But! This comes with a pretty hefty downside, in that especially if you're playing as a red color, or if you've got a lot of mark iv ships... you can't very easily see which of your ships are in attack stance. The information has been effectively minimized... but now it's, well, minimized.
      • The solution to that was for us to start colorizing the selection circle itself (we also made the selection circle consistent aside from color regardless of ship mode, which is new and much better, too; also the selection circles are now more transparent than before, since they were also overbearing before).
        • When you select a mass of your ships, even just hitting M for all mobile military, it's now blatantly obvious which ones are in attack stance (red selection circles) and which ones are not (white selection circles). The minimized data becomes very maximized, now that you're actually in a decision-making mode for the ships.
      • The goal here is for there to be a balance where hopefully you can mostly see what you need at a glance, but if it's hard to see then you just quickly select it. And beyond that, the actual icons are vastly more readable all the time, which is goal #1 here.
    • Going along with this, we did the same thing with the "ship has a problem" yellow icon, the "AI ships are in guard stance" blue shield (now a gold shield), the "ships are in group move" blue/white cluster of spheres, the engineer version of FRD mode (green radar), the "ship under construction" hexes backplate (not nearly as small as the others, but definitely smaller -- this is both less common and more important), the "ship is off" marker (same notes as the under construction one), and so on.
    • We may still need more tuning over time with this, but hopefully this is such a major step in the right direction that readability is up and is sufficient for early access. We shall see what people think.

Shot Visuals/Audio

  • All of the beam weapons now use an underlying shot type of "HeavyBeamInvisible" rather than ShotBasic. The usage of the former was confusing, although it didn't show anything differently, and it may have been triggering the wrong sound effect. The beam weapons should now be using a better sound effect that actually sounds beam-weapony rather than like a gunshot, but please let us know if not since we've not tested it yet.
    • Thanks to Puffin for discovering this.
  • Adjusted shot code so that they can again draw a "main projectile" and a "trail" together if desired. For quite a while now, we've just been drawing the "trails."
  • GuidedMissile, MajorZombifyingRocket, and FusionRocket now all have actual missile graphics again (as they did long ago), and all of those now should be sufficiently differentiated from one another (as they used to be, too).
    • The exhaust trail from the guided missiles is now a yellow/orange/red mix, rather than just being yellowish. Makes them stand out a lot more.
  • The basic "armor piercing shell" that so many shots use now has a different shape, more rounded and fancy and yet actually fewer polygons!
  • There are four new "laser pulse" shot visual styles: sickly green (nanocaust), deep blue (most player stuff, turrets, etc), pink (ablative gatlings), red1 (weakest AI or dyson stuff), red2 (stronger AI stuff and middle dyson stuff), red3 (strongest dyson stuff).
    • These also use different sound effects compared to the "basic shot" sound effect that they were previously using. These were all previously just using the standard "basic shot" that was the boring yellow thing.
  • The engine disrupting shells have a new visual that is more striking and unique, and now only spiders use that bullet type; armor ships don't use that anymore.
    • The visual for this actually now looks rather spider-y in itself! Very menacing to see. :)
  • Energy wave shots are now green and flatter/wider, like in AIWC.
  • The "sniper" shot of the sentinel frigates is now called "sniper energy wave," and uses the new energy wave graphics. Dark Spire Eidolons and Macrophage Harvesters now also share this.
    • The long-ranged weapon of the military command station also shares this, though not the sniper part.
  • The visuals of the "ion" shots are now vastly larger and vastly scarier-looking, as well as having this cool little helix shape around themselves.
  • MajorZombifyingRocket, which was green and used by the zombie-creating entities, is now deprecated.
    • A new ParasiteCurvedPinkShot, which at the moment we're just calling Parasite Bolt (or Zombifying Bolt), is instead used by all those entities as well as now the parasite guard post.
    • Actually a balance change, not just a visuals change: the Archon MLRS on the AI Overlord Phase 2 was previously using the zombifying rocket image but not zombifying. Now it uses the zombifying bolt image AND zombifies. :)
  • Nematode Rockets on the Abomination and Deviant are now Nematode Sickle-Shot, which is a sickly green color of the parasite shot.
  • All of the Pike weapons now shoot a bullet called PikeShot_Gold, which looks really cool and is also quite pointy.
  • The paralysis guardians no longer use guided missile graphics, but instead use a new ParalysisProngedShot_Blue.
    • Ooh, hey, the cursed golems also now use this new visual, and their sniper-type shots now have a minor paralyzing effect, too. Good luck with that! ;)
    • Hey, while we're at it, why not also to the Warbird Starship. Slightly new spin on that one and it looks darn cool.
  • The visuals for plasma bolts have been changed notably, to be more of a ring-y spherical thing.
    • The visuals for the guided missiles that the usurper had are now "stinger bolts" like the stingray has, since they are both anti-forcefield.
    • The secondary weapon of the tritium sniper guardian is also now stinger bolts with an anti-forcefield bonus, instead of just regular guided missiles.
      • Same for the only weapon of the Dark Spire Specter.
      • And now the Ark One actually has a purpose: having this sort of stinger weapon, as well, for being anti-forcefield.
    • And the raid starships, which use a "fusion bolt," now have a different color for that that more evokes the fusion bombs while having the shape of the plasma bolt.
  • A variety of ships had just boring ballistic shots, and some have already been noted as switching to other types. But the following have been switched to fusion bombs and get the bypasses-personal-shields bonuses that those confer:
    • Tractor Guardians, Assault Starships (also retain the bonus against heavy armor!), Orchid Ark (and it's extra powerful passing shields now!), AI Overlord Phase 2 (along with its other two weapons it still has), Mercenary Flagship, Mercenary Distractor Flagship (had no weapon at all before!).
  • Color variants for the agravic fusion bomb and viral fusion bomb have also been added.
  • The mass driver shot is now a large, orange-glowing chunk of asteroid junk -- as it should be. :)
    • The artillery golem now uses this, as does the Orbital Mass Driver.
  • The visuals for the plasma torpedos are now vastly much larger versions of the plasma bolts.
    • For the ones that don't explode at the end, they now have a greenish tint instead of a blue one.
  • The railgun shots (sniper bullets, in other words) are now exceedinly cool and different. They're far longer and thinner than other bullets, and the tip effect of them should actually pierce through enemy positions a bit. They're also colored with a gradient that goes from red to orange and finally to green at the back, with the coloring becoming more prounced the faster they are going.
  • The rockets fired by the devouerer/nemesis have been replaced by "antimatter jaws" (feel free to suggest a better name) that are basically these large, freaky, spiky energy emissions that look like jaws if you watch them from the wrong angle.
    • The nemesis has one that's colored slightly differently from the devouerer, so it's pretty easy to tell the two apart just from their shots now.
  • The actual projectiles from flak shots are now drawn as a trio of tear-shaped lines rather than just a boring regular shot. They also have their own slightly unique red glow.
  • A new projectile shape has been introduced for sabots and ambush turrets. There's a color difference between the two. It has a very unique shape that is inspired by the real-life sabots.
  • The last new shot type is called ElegantCurl in the code, and is used by the Armored Golem as well as two of the Arks (Thanatos and Gyrn). When used by the Arks, it's called a Ballistic Vortex. Feel free to suggest name shifts!

Sidebar Updates

  • The Objectives tab on the sidebar no longer uses a superscript for its count of objectives, but instead uses a smaller font for the number and a parenthetical number.
    • Thanks to Badger for suggesting.
  • Sidebar headers now have the full count of how many squads are in each section noted in their headers.
    • Hooooley cow this makes a big difference. Huge thanks to Badger for suggesting.

New Units

  • Adds the Auto Bomb as a player only Fleetship.
    • These are cheap, speedy, very flimsy suicide units that do area damage.
  • Adds the Warbird Starship.
    • Fast, cloaked, fires multiple rockets all at once every 2s. Also causes paralysis of 2s on every target hit, if they have a mass less than 4.
  • Adds the Parasite Fleetship, for players only.
    • Not very good fighters, but can zombify their targets upon death. Is immune to being zombified or nanocausted itself.
  • Add the Superterminals and Coprocessors back into the game.
    • Coprocessors don't stop you from capturing the planet itself, but do block building harvesters and capturing any neutral units until it is destroyed
    • There is a known bug with the hovertext for co-processors, but it would be good if someone verified the "killing one individually increases AIP, but killing all of them gives a big net decrease" behaviour

Reinvented Units

  • Missile Guard Posts and their Dire version are now Concussion Guard Posts, firing multiple missiles with a damage increase against thinner hulled ships.
  • Missile Turrets are now Concussion Turrets, and are essentially Concussion Corvettes in turret form.
  • Missile Guardians are now Concussion Guardians, and are the same as the above.
  • Laser Turrets are now Nucleophilic Turrets, gaining a damage bonus against targets with higher energy use.
  • Laser Guard Posts have the same treatment, becoming Nucleophilic Guard Posts. Dire is included.
  • Laser Guardians are the same.
    • Guardians, Arks, Golems and some Nanocaust units have changed energy costs to make them weaker to these units.

Goodbye ARS, Hello Schematic Servers!

  • The following changes to turrets have been made:
    • Grenade Launcher Turrets used to be available from the start, but now they require being captured from a schematic server.
      • Same for MLRS turrets.
    • Fortified Tesla Turrets used to have a science cost for mark 1 but otherwise be available from the start; now they must be captured from a schematic server, but mark 1 is free.
      • Same for tritium sniper turrets.
      • Same for beam cannons, but now beam cannons have a unit cap of 2 instead of 1.
    • Don't worry! From the start you still have Pike Turrets, Ambush Turrets, Nucleophilic Turrets, and Concussion Turrets. Also from the start, you can still spend science to unlock Spider Turrets if you wish.
      • So that's 5 turret types you can get from structures now and have for free at mark 1 in terms of science, 4 you start with, and 1 you have to just unlock if you want it.
  • The old "Advanced Research Station" unit, recently renamed Schematic Server, has been removed.
    • In its place, we now have three new capturables: Fleetship Schematic Server, Starship Schematic Server, and Turret Schematic Server.
    • There are presently 22 available fleetships to unlock via these, 4 starships to unlock, and 5 turret types to unlock. More will be added in the future.
  • The number_ars_to_seed tag from the AI difficulty settings has been removed. Before that ranged from 6 to 3.
    • Now it seeds 3 starship schematic servers, one of which should be at distance 2 from the players if at all possible.
    • Now it seeds 4 turret schematic servers, one of which should be at distance 1 from the players if at all possible.
    • Now it seeds 6 fleetship schematic servers, all of which are > 2 distance from the player but random other than that.

Balance Tweaks

  • Etherjet Hull and Shields increased from 800 to 1100 each.
    • Thanks to HeartHunter for the suggestion. This is for until they get their tractoring while cloaked implemented.
  • Botnet Golems fire 50 missiles per salvo, up from 16, and send them all at once for a more impressive super unit attack visual.
    • Thanks to zeusalmighty for noting how "meh" it was.
  • Nanocaust Aberrations and Abominations now get a 4x damage boost on their Viral Emitter weapons against armour values of 90mm and higher.
    • This is to make them more dangerous to Starships, which in testing were easily able to wipe the Nanocaust off the map by themselves with little effort.
  • Pike Corvette damage down from 50 to 40 per shot.
  • Concussion Corvette damage down from 80 to 70 per shot.
  • Artillery Golem lost splash damage, damage increased up to 500,000.
  • All plasma type weapons, save the Plasma Siege Starship and the Fortress', are now single target only, but have increased damage to compensate. The before mentioned units have the damage increase, but spread the damage out among targets in the explosion radius instead.
  • AI Overlord Phase 2 loses a Cannon in favour of an MLRS - remaining Cannon damage increased, Plasma Cannon follows the same theme as the others.
  • Cursed Golem damage increased, self damage reduced. Damage is split across four shots as well.
    • Thanks Badger for the four shot suggestion!
  • Armored Golems have a multi shot weapon again, intended as an inbetween of the horde killing Botnet, or the single target demolisher of the Artillery.
    • I am not quite sure on what these should be. Feedback is greatly appreciated from anyone who uses one.
  • Nucleophile Turrets (old Laser) now have a proper metal cost, instead of being bargains.
  • Armored Golems now have an inhibiting tesla coil weapon, that fires periodically (17s), hits up to 100 targets, and debuffs them with a reload penalty of 17s. This is so it better suits a "brawler tank" role.
    • Thanks to zeusalmighty for this very interesting suggestion, that at last solves a personal dilemma with these fellows.
  • Temperamental and Fragmenting Guardians have strength values increased from 200 to 300, so there are less of them in waves for now.
  • The nanocaust and zombification death effects no longer work on any targets that have on-death effects of their own. So this would mean that they can't zombify a zombifier, or a metabolizer, or a nanocauster.
  • Nanocaust Aberration and Abomination units now have a more suiting mass of 4, granting them immunity to all current paralysis weapons.
    • The new Warbird would...be able to stun these pretty heavily.
  • All drone units decay much faster without their parent ship being on the same planet, up to 1% per second from 0.1% per second.
    • These should now decay at a reasonable rate, instead of in about 15 minutes.
  • The health and shields of metal harvesters has been reduced to 1/10th its previous value. They were too tanky!
  • Added a new "should_never_be_captured_by_another_faction" tag, which is set to true for all the macrophage entities at the moment.
    • This tag can be freely applied to any minor faction entities that you want to be sure don't get zombified or nanocausted.
    • This should never be used for a general player-and-AI-available fleetship type or anything like that.
  • At the start of new games, the macrophage and nanocaust planets are cleared of all AI units that aren't some sort of special capturable/claimable. They no longer have to work for their starting planet at all, with it being assumed they've already conquered it. All their initial efforts in the game thus now go to expansion and harassing their (probably AI) neighbors.
    • Actually, now the nanocaust NOR macrophage use this, but the code is available for any factions in the future. The idea was that it would be nice to be able to see those factions more easily near the start, but Badger informs us that they prefer to start with a planet full of AIs to eat...
  • Corrected two nanocaust weapons that didn't have the nanocaustation death effect.

Brownouts!

  • Brownouts! When net power is negative, all your bubble shields now go down. Just like AIWC.
  • Autotargeting and AIs now strongly lose interest in shield generators that are down (hey let's shoot the things under them instead!)

Bugfixes

  • Put in a number of method renames that make it clear which methods are on the main thread and which are on background threads, when it comes to factions. Even I kept forgetting.
  • Put in some changes to make it clear if the GetDistanceTo() method is expensive or cheap, and how accurate it is, along with adding inaccurate-but-good-enough versions.
  • Added a bool to the GetDistanceTo() variants to include the radius or radii of the ship(s) in question in the calculation, since the distance from point to point center of the ships can often be non-ideal when you don't know how big a ship will actually BE. Better to measure the gap between the outside of their respective circles, in that case.
  • Fixed a bug that was leading to some ships having waaay too many targets calculated for themselves.
  • Fix a bug where the Special Forces AI Type was using the Tsunami AI Type's budget allocations
  • Prevent the player from blowing up Exogalactic Wormholes
    • Thanks to HeartHunter for trying this
  • Fix a null reference exception when spawning Exogalactic Wormhole waves
    • Found thanks to HeartHunter's save game
  • Fix a bug where Mercenary Objectives would make things look really weird in the Objectives Menu
  • Combat on Nanocaust or Marauder planets will now play the "Combat on Hostile Planet" audio cue
    • Thanks to Puffin for reporting
  • Fixed a bug in the main menu that was actually letting you click into the join multiplayer game menu, which is still flagged as coming soon.
    • Thanks to Varacka for reporting.
  • Fix the bug where players ships were wandering at random over the map.
    • Pretty sure everyone noticed this.
  • Fixed a bug where drones were being built in far too large of quantities, leading to accidental "borg cubes" of marauders, along with mega-migrations of Tethuida drones and the like.
    • The actual core bug here was a PlannedMetalFlow object being added to two different queues, and when being removed from one being put back into the pool. It now make a copy of itself for each queue, because otherwise there's no way to cleanly know when all references to it are gone. Yes, this was another pooling-related incident.
    • Frankly who knows what else this was messing up, because this was at the core of how metal is spent by player units, and then how the AI factions build drones. It wouldn't have messed with any other parts of the AI, but player construction and repair may have been wonky in ways too subtle for us to notice, we're not sure.
    • Thanks to zeusalmighty, BadgerBadger, RocketAssistedPuffin, and Ovalcircle for helping out on this one!
  • Fix a bug where Mercenaries weren't spawning all of their allowed units
    • Thanks to Puffin for reporting
  • Fixed a logic inversion that would ONLY let you scrap the player starting forcefield, not everything but it. ;)
  • Fixed several issues where autotargeting would choose units that were dead or not yet claimed (belonging to no one), or would keep firing on something that was dead or not yet claimed after it died.
  • If any units would be killed by having their balance changed, then make sure to keep them at low health instead of killing them.
  • Put in the equivalent of a "relief overflow valve" on the faction seeding, which should prevent the issues with seeding sometimes failing.
    • Thanks to Ovalcircle, RocketAssistedPuffin, and malkiel for reporting.
  • Additionally, put in a check for if all the potential targets for a faction are right next to the player homeworld, then it tries to use a different method of calculating potential target spots since that's likely bad map pathing data for some reason.
    • Thanks to Ovalcircle, RocketAssistedPuffin, and malkiel for reporting.
  • Fixed the bug from the last few versions where units would not properly rally to their control group once they reached the planet in question, but rather would just hang out at the wormhole.
  • Fixed a bug with attack-move (X+right-click) where units were stuttering along and not moving much because of how the targeting cooldowns were altered.
    • Thanks to Puffin for reporting.
  • The "stale unit icons" blipping to a different location for a moment when entering a planet should be fixed now.
    • Please let us know if you see it again, though, and if it seems to be a thing for shots as well.
  • Make the Debug: Send Wave code work again
  • Fixed a variety of bugs that were causing AOE effects to rarely (though sometimes in the case of grenades!) show visibly in recent versions.
  • Fixed a bug where the nanocaust was frequently forgetting to be hostile to the AI. Neutral just doesn't cut it! So the nanocaust would just kind of chill uncomfortably on the AI planets while they eyed each other menacingly.
    • This same bug was technically present in the marauder, macrophage, and devourer code, although it didn't seem to be actually manifesting. Nonetheless, a fix has been put in.
      • The nature of the bug was that if the allegiances ever switched from the default (supposedly hostile), then they'd never switch back. Now it explicitly makes sure that it's hostile in the same way that it explicitly makes sure it's allied when it's friendly to players, etc.
  • Also added in a piece of logic for when the nanocaust is trying to decide whether or not to build a nanobot center: if the nanocaust is stronger than the planet it's considering, then it just takes the planet without trying to decide if it meets the optimal criteria beyond that. The other criteria comes into play if the nanocaust wants to potentially take a planet but thinks it might be a bit weaker on paper.
  • Previously it was possible to get literally a dozen or more simultaneous notifications about the nanocaust preparing to frenzy against a planet if they had built up too many fleets at one time for whatever reason. Now it only gives you one notice per planet.

Version 0.773 Terrorized By An Infinite Loop

(Released September 18th, 2018)

  • AI Eyes will now tell you how many many more units it will take to Alert them in their hovertext.
    • Thanks to tadrinth than TheVampire for suggesting
  • Some minor tweaks to the Eye description appenders to make them work nicely for units w/o external invulnerability. Make the Eyes very flimsy once they lose external invulnerability
  • Clarifies that Stingrays, Siege Starships, Plasma Guardians and Dire Plasma Guardians only do bonus damage against bubble forcefields.
  • A new xml option, is_scrapping_by_player_disallowed, has been added. Entities with this set to true can no longer be scrapped by the player.
    • The only place this is used right now is on the starting forcefield that you have, which would be a super huge pain to delete by accident.
  • There are now messages shown when you try to scrap something that is disallowed, either by the new flag, or because it is an Ark or a Home Command Station.
    • This way you actually know why the scrapping didn't happen.
  • The tutorial should prompt you to build a new energy collector if you run out of energy
    • Thanks to Ovalcircle for reporting
  • New popup text messages for Dyson Antagonization/Deantagonization, Instigator Base Spawn, Dark Spire Vengeance Strike, Dark Spire Locus Spawn, Wormhole Invasions and Exogalactic Strikeforces since these are important events. Also hook up Audio cues for when those get recorded.
  • The tooltips for ships now show how long it will be until the ship finishes reloading if it is presently reloading (per system, of course), and also shows the last time the ship fired a shot, the last time a shot fired by the ship hit its target, and the total damage done the last time the shot hit.
  • If a shot does zero damage to a target, it now returns an abort code that is displayed in the tooltip for ships doing zero damage.
  • Ships now show on their tooltips reason for their failure to fire if they are trying to fire but not able to.
  • Ships that are in FRD mode and have auto-target items available but NOT a FRD target will now use one of their autotargets as their FRD target.
  • While hovering over a ship that belongs to you, you can now see its autotargeting lines in purple-green if you hold down shift.

Performance

  • Now that we're pooling GameEntities, we no longer have to worry about memory leaks from references that are held too long. Which is nice, because now we can hold references directly more often without fear... except the new problem is that entity might return to the pool and thus become invalid. Due to this, we now have a SquadWrapper struct that can keep track of the ID of the entity and the entity reference itself. Since these go on the stack instead of the heap, they can be created and thrown away without consequence. And since these keep track of the ID separately from the entity reference, we can compare the ID on the entity to the original stored ID to see if that changed and thus the entity has gone back into (and come back out of as something else) the pool.
  • We're using SquadWrapper for our various forcefield-bubble protection logic now, and it's roughly doubled the performance in our insane test savegame that has 63 forcefields on one planet. That's still only moving the needle from 10% to 20% of full gamespeed, and we don't plan on allowing that huge number of bubble forcefields to be in place long in general in the game for a variety of reasons. But wringing out all the performance we can out of that particular woe begotten example will keep other scenarios running faster.
  • The way that AI entities check for re-absorption into the things they are guarding is now a lot more efficient.
  • The way that units keep track of the squad they are guarding or the squad that is coordinating them is now vastly more efficient.
  • Put in some more changes to the shot target tracking and forcefield-hitting that basically double their performance again. Our prior savegame example that was at 10% now gets up to 40% after a few minutes, up from 20%ish prior to this change.
  • A few more improvements have been made regarding shields, particularly in terms of how frequently their radii are calculated. This gives a minor performance bump.
  • A methodology change has been made to how the items are removed from lists during the target sorting cycle. This makes the background thread for that far more responsive. Previously in our example insanity test case it was taking 40+ seconds to execute, but now it takes about 13 seconds. In general it takes under 1 second in most saves, and we want it under 5 seconds in all saves if we can at all help it, but this is a big step forward either way.
  • The way that the speed of shots and ships is calculated is now a lot more intermittent, leading to yet another decrease in CPU load on repetitive calculations. This also should solve a nullref exception that could happen on background threads.
  • Some fairly tame updates to control group performance/code-clarity. The code is now less ambiguous about the function of a few things that were easily misread previously, and there are now fewer lookups required in order to get the contents of a control group, etc. SquadWrapper to the rescue again on that part.
  • Throughout the game, the strength value is internally tracked as an int32 now instead of a fixed-integer (FInt, based on int64).
    • This creates a massive performance boost for a lot of the background threads (not targeting or decollision, sadly), at the cost of some mild precision that we were likely not using in the first place. If any of the factions start having a bit of trouble using very small budgets, that should be the only real ill effect. But it's not likely they were doing that, anyway.
      • Obviously it's also possible that we simply made a typo in here at one point or another, or converted something to an int32 that should have stayed FInt, and that will bear itself out in the behavior updates.
    • Our lockstep strength-calculating code was one of the biggest slowdowns (behind protection calculations) to the simulation, and it now should range from 2x to 5x faster simply by virtue of how much faster 32bit math is. For reference, see the table here: https://msdn.microsoft.com/en-us/library/ms973852.aspx
    • Essentially, we were using FInts for these because we thought we would need to talk about them in smaller increments than we do. For things like science collection and metal income and storage and whatnot, we still use FInts because we still need that precision. But metal and similar doesn't get literally multiple millions of calculations per second, unlike the various strength fields.

Bugfixes

  • Fixed a bug where entities could remain selected beyond death, and even beyond exiting to the main menu and coming back.
    • Thanks to Ovalcircle for reporting.
  • The way that unit selection works has been rewritten pretty heavily. It's more efficient now, and the new method should also solve a number of bugs relating to things still being selected when they should not be, or mistakenly suddenly taking action, etc.
    • These are also now using the new SquadWrapper struct, which is useful although not wholly imperative to the new method.
    • Please let us know if any of the cases that were reported previously still are or are not present in this new version.
  • Fix a null reference in AI Long Range Planning.
  • Fix typo in Dyson Sphere description
    • Thanks to Ovalcircle for reporting
  • Don't allow the AI to try to spend 0 budget. This prevents 0 size Waves during the Tutorial.
    • Thanks to Ovalcircle for reporting
  • Fixed a nullref that could happen in the new Wrappered Squads.
  • Fixed yet another nullref exception that could happen with SquadWrappers getting bad data.
  • Fix another null reference exception in DecollisionPlanning
  • Some debug checking has been put in place in the only location that DataForMark can be set to null. It should never be null within the game, but it sometimes definitely has been, so we want to find out more about where it's being called from that is resulting in that.
  • Put in protection against a potential infinite loop in selection logic.
  • Put in a couple of more nullref protections.
  • Fixed a nullref in the updates for external invulnerability.
  • Fixed the game's background threads to never report ThreadAbortExceptions anymore, since those are always valid.
  • Fixed the game's background threads to potentially do some better reporting of unhandled errors in general.
  • Put in code to prevent and catch two different kinds of vis layer exceptions that could happen.
  • Fixed some possible nullrefs in ListAvailableMercenaryGroups.
    • Thanks to Ovalcircle for going the extra mile and discovering this one hidden deep in his logs.
  • Added a new ControlGroupVisualIndex field onto control groups that lets us tell the player the correct number on the interface.
    • Thanks to RocketAssistedPuffin for reporting.
  • Put in a couple of fixes to make ships not target other ships that are temporarily invulnerable, such as Eyes, etc.
  • Fixed several cases where the forcefield effect might not have been played properly.
  • Fixed several issues where ships would try to target dead things or think about shooting dead things for too long, etc.
  • Fixed a bug in the auto-targeting indexing logic that was causing it to return null a ton and thus not really progress battles much.
  • Added NonSimPermanentUniqueID for use in Target List Planning. Notes for programmers (which are in the code as comments):
    • This field can ONLY be used in long-running threads. It should be used as a unique identifier INSTEAD of PrimaryKeyID, but only in the non-sim contexts. Really only in the continuous long-term planning.
    • If the primary key is used in the continuous long-term-planning sorts, then "System.ArgumentException: Unable to sort because the IComparer.Compare() method returns inconsistent results" is likely to happen randomly as the PrimaryKey gets reprovisioned.
    • Reprovisioning can only happen in between runs of the intermittent long-term threads and the short-term threads, and is on the main thread synchronously, so all other places are free to sort on PrimaryKey.
    • Note that NonSimPermanentUniqueID is NOT consistent between machines, so sorting on this or in any way using it in a sim-contained context will cause a multiplayer desync.
  • Better exception logging has been added to TryWiringUpShotToTarget(), although we didn't see any actual location where a nullref made any sense. We had one instance of that happening, so the added debugging code will help us find that and stop it in the future. In the meantime, hitting ignore when this comes up and continuing to play will not affect your simulation's correctness.
  • Implemented a new LazyLoadSquadWrapper, which is basically like the SquadWrapper class except that it only loads the squad references when needed. This is ideal for the targeting data, where we want to spread the load around.
    • This doesn't really help performance or anything, but it does help to guarantee correctness in some places where previously we were able to have some bugs because of implementing the lazy-loading logic manually.

New Units

  • Adds the Temperamental Guardian.
    • Transforms to a Tantruming Guardian when the AI is outnumbered on the same planet, and reverts once no longer outnumbered.
  • Adds the Fragmenting Guardian.
    • Transforms into 8 Shards when the AI is outnumbered on the same planet, permanently.

Balance Tweaks

  • Macrophage Harvesters mass down from 5 to 4.
    • These were dying en masse in testing to Arachnid Posts and mostly being inactive as a result.
  • Increases the damage of the Tritium Sniper Starships railcannon from 110 to 330.
  • Massively boosts Gryn, The Void Homes dock build speed.
    • It was slower than even a single Mobile Space Dock - now it's faster than three of them at Mark 1, comparable to a normal Dock. Still builds Starships slower, however.

Version 0.772 Eye See You

(Released September 16th, 2018)

  • Fix a bug where the Encapsulated Map Type had its planets too close together. This was causing errors during mapgen and looked very cramped.
    • Also spread the planets for the Maze, X, Wheel and Honeycomb map types
    • Thanks to Ovalcircle for suggesting
  • Fix a few null references in Decollision and in MoveManyToMany.
    • Thanks to Puffin for reporting
  • Put some performance improvements in place that prevent pointless recalculation of certain things during ship targeting. In general saves a lot of lookups, mainly.
  • Fixed a silly comparison operator inversion that was causing radius-based AOE attacks to completely fail. Including Artillery Golem, among others.
    • Thanks to Puffin and HeartHunter7 for reporting.
  • That "handy" logic for keeping cloaked units from firing unless they're in FRD mode or have explicitly been given an order is now non-player-only. It was causing confusion with player ships that would just sit there when they seemed like they should be shooting.
    • We'll be implementing the disabling of ships AIWC-style for players handling cloaking raids.
    • For non-player ships, it still uses this logic because the AIs and similar know how to use it just fine.
    • Thanks to HeartHunter7 for reporting.
  • Fixed a few dozen ships, guard posts and raptors included, which were using a shot_speed of instant, which meant that their shots visually reached the target instantly and thus never animated at all. This was super duper confusing.
    • Thanks to HeartHunter7 for reporting.

The Return of AI Eyes!

  • Add AI Eyes, starting with the Ion Eye and Plasma Eye
    • An AI Eye is invulnerable as long as any Guard Posts are left on the planet
    • If the AI outnumbers you on the planet, the Eye will do nothing. If you bring too large of a force over it brings the AI's full attention to that planet and the Eye will transform into a very powerful defensive structure. Once your force is sufficiently reduced, the Eye will become idle again.

Balance Tweaks

  • Unifies all bubble forcefields found so far to be 85mm armour - immunity to all armour stat based weapons.
    • These are mainly shield based - so the armour thickness shouldn't matter much. There is the new anti-bubble-forcefield mechanic in place too, so that takes over the role.
  • Shifts a fair bit of Devourer hull to shields - lets it have more guaranteed regeneration against Mass Drivers. Means it won't accidentally die to them somehow.
  • Stingrays damage reduced from 100 to 90.
    • A little too good at their job.
  • Shredder Drones from Dire Guardians and Posts damage increased from 700 to 2000.
    • Bit weak for a Dires main damage source.
  • Pike Corvette damage reduced from 60 to 50.
    • The new MLRS! A constant thorn.
  • Turret strength halved except for the Beam Cannon, which is reduced by 25%.
    • These were seeming too high, so the AI was never confident in attacking even if you only had a small group.
  • Fortresses MLRS weapons have had their damage tripled - the plasma cannon doubled. Metal cost increased 50% to make these actually a bit more of a resource strain.
    • Fairly lackluster.
  • Metal Harvesters give 100 metal, down from 120, and only gain 100 per mark.
    • Everyone is just too darn rich!
  • Normal Guard Posts have had damage mostly tripled.
    • Still too weak - Arachnids should now almost one shot an equivalent mark Starship.
  • Orbital Mass Driver damage doubled from 300,000 to 600,000. This helps it not simply be a barely stronger Arachnid Post, when said Post is at higher marks.
    • With the above Devourer change, these'll take 20 shots just to get through the shield. At a reload of 17s...I don't think the Cookie Monster will have issues eating these.
  • Some damage boosts to a few Dire Guard Posts to make the normal ones not become better than them at higher marks.
    • Apologies.
  • Turrets have health very slightly reduced, but in turn their energy cost also lowered very slightly.
    • These just don't die, yet take so much energy that having a few really hurt the power budget.
  • Tractor Turret now grabs 41 units instead of 32, and Gravity Generators now slow slightly less, but in a wider area.
    • Testing showed that Tractors grabbed so few that it was always superior to use Gravity instead. This should differentiate them a bit more, with Tractor being a smaller, complete stop, and gravity being a wider slow.
  • Firerate tweaks to Arachnid and Dire Arachnid Guard Posts.
    • Normal ones should fire slower, while Dires fire faster.

Version 0.771 Cleanup Aisle 1

(Released September 15th, 2018)

  • For purposes of debugging, and it's just useful in general, the game now shows what your units are doing and why when they are moving, decolliding, or heading to a wormhole to another planet. This may or may not stay on all the time in the future.

Yet More Performance Improvements

  • Keith's high-performance "ArcenMob" class, which is used on PlanetFactions to keep track of their entries, now does automatic "packing" of its entries over time in rolling updates in order to keep performance from degrading over time based on lists that get too large.
    • Generally speaking it takes a couple of minutes to get through the entire list at the moment, but it does it nice and slowly like this in order to avoid actually worsening performance during the packing. Think of the packing basically like defragmenting a hard drive.
  • Added a small performance improvement to how we look up where the wormhole is that ships are going to go through in order to do a wormhole move order.

Bugfixes

  • Fixes being able to select Armor Drone, Raider Drone and MLRS Drone as bonus ships in the lobby.
    • Thanks to zeusalmighty for reporting.
  • Show shot-hitting-shield visual effect when the target has a bubble shield.
  • Normal Guardians are now a fair bit bigger to not be so tiny, even at Mark 5 next to a Dire of the same type.
    • Thanks to Ovalcircle for a comparison picture and pointing the amusing situation out.
  • Put in what should be a fix to the ShotVisualizer.DoMainUpdate nullref exception that started happening in the prior build.
  • Fixed an issue in the prior build of the game where the stance of entities, and their orders, could be erroneously carried over to an unrelated entity after one entity dies. This was most notable when you use rally to point or rally to control group, and would get worse the longer you played.
  • Fixed a very longstanding issue where entities with orders to rally to a control group or to rally to a point would not properly forget about those orders if you gave them new orders. We've had a variety of complaints about this for a while, but they should all be fixed now; please let us know if not.
  • Logic has now been put in that should pretty much always override the decollision movement orders when you're giving your ships new orders.
    • Thanks to HeartHunter7, Badger, and Puffin for reporting.
  • When ships are within range 2000 of a wormhole that they intend to go through, they will now disregard any decollision orders, and will not be given new decollision orders until they are through.
  • Entities are now better about discarding invalid wormhole pathing orders that may accidentally happen largely due to timing issues between issuance of the order and calculation of the order.
    • Additionally, if entities shifted planets between this period, they now properly skip the orders.
  • Also fixed some cases where ships from other planets could be given orders as if they were on your current planet.
  • Fixed the various errors people were getting in Helper_AddAssistLines starting last build.
    • Thanks to HeartHunter7 and Badger for reporting.
  • Fixed quite a few issues with the decollision logic that were making it less accurate than desired, particularly when there were really huge groups of units. The units also now react more rapidly to being in collision with one another, and have a bit more of a contact buffer between each other when at all possible.

Balance Tweaks

  • Golems should no longer be engine stunnable by Spiders - V-Wings will still affect them however.
  • Autocannon Minipods, Ablative Gatlings, Stingrays and Etherjets have their strength halved.
    • These are Swarmers, so the AI should be able to buy more of them on the same budget than other ships.

Version 0.769-0.770 Thinking Long-Term

(Released September 14th, 2018)

  • The escape menu now shows the Warden Fleet and Hunter Fleet settings, as well as the current Wave/Shark Plot settings.
  • The Dark Spire and Mercenary Beacon hacks should now actually cost hacking points
    • Thanks to Ovalcircle for reporting
  • The damage dealt by "fusion reaction" shots now clarifies itself that this does NOT include bubble forcefields.
    • Additionally, when firing on a bubble forcefield generator it has no effect (previously it treated it like a personal shield when damaging it).
    • This was confusing a lot of folks, but then when we tried to make it bypass personal and bubble shields it got even messier, so this solution worked out for the best.
  • FINALLY fixed that insane bug with the ships flying across the planet all of a sudden when they are first added to planets, particularly through wormholes, etc. If you see any more instances of it, please let us know, but it should no longer be possible.
    • Thanks to RocketAssistedPuffin, Badger, and others for reporting.
  • Fixed the mark 2 versions of pretty much all ships with increasing effects like slowing and whatnot or even salvage recovery still being the same as their mark 1 counterparts (but mark 3 and up were correct).
    • Thanks to RocketAssistedPuffin for discovering this.
  • Fixed a bug where AIP was not being applied appropriately if it was on the death of a non-AI-owned entity (such as human cryo pods).
    • Thanks to RocketAssistedPuffin for reporting and guessing correctly what the issue was.
  • Fixed up the on-death logic for ships so that parts of it never get skipped because of errant return statements.
    • With the AIP increasing logic, that just meant putting it into a sub-method.
    • For the faction-specific checks, that meant putting them into a sub-method that is now faction-specific.
      • This also has the dual benefit of making this part of the death logic properly moddable, and not having faction-specific code embedded directly in the central ondeath method (since factions may be added from other dlls or locations in general).
        • Note that for the AI sentinels, since those are so absolutely central, we're not moving those out of there; the bits that are there relate to salvage, which is a core game mechanic.
  • When there are exceptions in GameCommands that get sent, then it now dumps the data from the GameCommand in question so that we can more easily debug it.
    • You can also now use the WriteToStringInefficient method to write the details of a game command prior to sending it in order to check that it is the same on the sending and receiving side, or for whatever other reasons.
  • When the game signals it wants to exit, the application now does a better job of cleaning up its background threads.
  • Fixed an issue that could happen in rare instances in the "finding what to protect" background thread logic.
  • Astrotrains can now spawn drones properly.
  • Fixed a bug where some of the AI ships were showing up with their tooltips looking like they were on the tech upgrade screen (oops). Particularly shield generators.
  • If the AI is unable to use elements of its budget, it instead spends that income on Reinforcements. An example of this is that if you have disabled reconquest waves (or the AIP isn't high enough to allow them yet), the AI will get extra Reinforcements to compensate.
  • Instigator Bases are now constrained to spawn at different distances from the player depending on the AIP. Lower AIP means closer instigator base spawns.
  • Ships that self-damage themselves to death can now leave remains like anything else. Aka minefields.
  • When a wave is cancelled, allow some of the strength of that wave to also go to the next Wormhole Invasion as well as to benefit the next wave.
    • Currently it allocates very little strength to the next Wormhole Invasion, and this is added mostly as a balance lever in case we need it moving forward.
    • Thanks to HeartHunter for figuring out how to very efficiently exploit the Wave Cancellation mechanic
  • Fix a bug with the tutorial where you could get stuck in the Scouting phase.
    • Thanks to Ovalcircle and Unicursor on Steam for reporting
  • Command Stations now take longer to build (45 seconds w/o engineers).
    • Thanks to HeartHunter for this
  • Recalculate planet ownerships immediately after the Usurper captures it. This way if the AI has multiple usurpers on a planet eligible for capture, only the first one will actually do anything.
    • Thanks to HeartHunter for the bug report
  • AI Budgets can now be spent either on a strict time interval or "whenever they accumulate enough budget". This distinction is set in the XML. Player facing things operate on a time interval (Wave, CPA, etc), and AI internals (Reinforcements, Special Forces, etc) are done on a budget basis. Note that Reconquest is done on a budget basis because that's primarily gated by finding a suitable planet to attack.
    • Events on a Time Basis will now sometimes delay themselves a little bit, just to make things a bit less predictable. 10% of the time, an event will delay itself by 10%. So if your waves are on a 10 minute timer, a wave might come at 11 minutes, or a CPA on a 2 hour timer might come at 2 hours and 12 minutes (and these will be a bit stronger as a result).
    • This fixes a problem where some events were happening much more frequently than desired.

New AI "Verb": Wormhole Invasions

  • Add support for Wormhole Invasions. These are sudden Behind-Your-Lines assaults by the AI through Exogalactic Wormholes. They are intended to be scary, unpredictable and hard to defend against. They are also infrequent, and will not happen more often than once per hour.
    • The AI has a new budget type for Wormhole Invasions (to go with Waves, Reinforcements, etc). To spend that budget, it will spawn an indestructible Exogalactic Wormhole will appear on a player's planet. This wormhole is unstable and will disappear in a few minutes. The AI will launch a number of attacks through it. Sometimes it will launch lots of weaker attacks, other times fewer but larger attacks.
    • You will get a Notification while the Wormhole Invasion is active, but a minimal time warning when the attacks are actually coming (30 seconds currently).
    • The Wormhole Invasion will prefer weakly defended planets behind your front lines
    • Exogalactic Wormholes can also be used to spawn regular waves.
    • Wormhole Invasions are only available to the AI at Difficulty > 4, and it's gated behind AIP then (right now Difficulty 7 requires 160 AIP for the Invasions to start).

More Multithreading Work

  • Some of the nesting of background threads has been removed, at least for now, and this seems to result in more consistent usage of more cores on the CPU.
  • The "long term planning" threads have been split up into "intermittent" ones (like we have had for a long time) and new "continuous" ones (now used for decollisions and targeting logic.
    • This split of the logic allows us to control the timing better, and to have targeting run in about 4s instead of 25s (in our test case), still without unduly blocking anything.
  • Since it's possible that some of the background threads were getting stuck (or something) for players that were seeing unusual AI behavior, we now have a variety of extra readouts on the escape menu's performance section relating to periodic activities. If any of those numbers is stuck and the game is unpaused, then something is probably wrong.
  • The game now supports having non-faction-based "long-term planning" threads, which are basically "thinking threads" that run only on the host in a multiplayer game (or the sole player in single player), and which do some calculations that are too slow to do in realtime lock-step of the simulation.

Epic Decollision

  • The decollision logic has now been moved to be a long-term planning thread, and has been improved a bit since now we have some extra processing power. Rather than ships just moving to a random nearby spot, they actually check to see if the spot is empty first and check for another up to 9 spots before giving up and waiting until the next decollision cycle if so.
  • A large number of the GameCommand variables have been condensed and/or stripped, to make for better efficiency in multiplayer and a bit in single-player as well (serialization efficiency only matters in MP, but in SP the memory footprint and instantiation speed matters).
    • One thing that is new is that it can take an array of points, rather than just one point. This in turn allows us to have two move commands: one that is sending a bunch of entities to one spot, and another that is sending a bunch of entities to different spots. Very efficient, and incidentally used for decollisions.
    • Another improvement is that all of the lists on this start out as null unless they are used, which is purely an improvement in memory footprint and instantiation speed. All of the existing places that used those lists should be properly updated, but if we run into any nullrefs we'll know we missed a spot.
  • Now that our decollision logic is on a non-sim-coupled thread, we can do all sorts of crazy logic in there that is CPU-intensive (and then it's simply spread across cycles/time, versus slowing down the simulation). With this fresh power, the game now makes a lot of effort to offset ships that are overlapping and heading to a similar destination.
    • This should, for example, get them to not travel inside large ships that are heading the same way except in some corner cases where they start near the same place but one is heading further than the other in the same direction.
    • This also spreads out the ship graphics and the icons substantially more, making it so that's a lot easier to tell how many ships there are in a given area.
    • For some ships that are slower and have a fairly small radius, if they are in a big clump as they try to navigate a long string of queued movement commands that a player defined, you'll find that they wind up having trouble getting around various corners because of the desire to spread out. This is again a very corner case, and probably isn't worth throwing more CPU power at.
    • Please let us know if you experience any issues from this, or if it doesn't hit all the main cases that folks were reporting of ships stacking up too much.
    • Thanks to Badger, and folks on Discord, for bringing this up.

Targeting Overhaul

  • Put in a small targeting change that should make it so that multi-shot units with direct attack orders will fire at more than their direct target (since there is a limit of one shot per target). Needs testing to be sure it works.
  • Adjusted the GameCommand object to allow for a couple of new arrays of integers, which we'll be using in some upcoming more-complex internal commands.
  • Also updated the GameCommand object so that the central list of related entities now starts off as null, which lets us initialize it to the size we need, or not initialize it at all.
    • This may lead to some breakages somewhere unexpected in the code, but they'll be quick fixes if they do happen. (Knock on wood).
  • On the client side (or execution side on server/solo player), the game is now far more efficient at initializing the sizes of the lists of things on its GameCommands that it is deserializing. On the server/solo side, in places where the list size is such that size matters, we can also initialize those more efficiently.
  • On entity systems, we now calculate a TheoreticalMaxDamage, and also a MaxDamageMultiplier.
    • For ion systems, TheoreticalMaxDamage is fairly nonliteral.
  • We now have a way of checking for the amount of damage a system will do to a target, ignoring all outside global factors, so that we can normalize it against the TheoreticalMaxDamage.
    • This will be used in the new target sorting logic.
  • Targeting logic has been completely rewritten from scratch, and is now based on a combined "weighted factor" ranking of potential targets, rather than just various sorting algorithms.
    • This ranking is also now done on a non-sim-bound background thread, so it doesn't hold up the execution of the simulation while it is happening (thus freeing up the simulation to run faster). In multiplayer, this thread runs only on the host.
  • As part of the targeting overhaul, all the old target_sorter options are now gone. There's a new, optional, added_target_evaluator instead.
    • Normally this can be skipped if you just want ships to do their best general targeting to maximize damage, hit the most important targets, the targets closest to them, etc.
      • There is also specialized logic in here that should make it so that things that shoot beam weapons that intersect all targets will prefer things that are in-range but farther away.
      • And in general we will be able to expand on the general "standard target scoring" without too much trouble. This sort of thing won't need a custom evaluator for every possible ship case or anything like that.
    • That said, in some cases we want to focus on something else other than the usual weightings... at least partially. In these cases, the added_target_evaluator can add either a major or minor extra bit of weight to some other factors that ships don't normally consider. This is almost universally about special abilities, or in some cases some kind of handicap that the ship itself has. The ones so far:
      • EngineDamageAsMinorPart: Used for things like V-Wings that partially stun engines of ships they hit. They'll prefer to spread their stun around, all else being equal. Assuming the targets are weak to their stun. If not, then they focus like normal on damage dealing.
      • EngineDamageAsMajorPrimary: Used for spiders and the that are hugely about stunning and stopping target engines. These try very hard to actively murder the engines of targets, and spread it around, with damage becoming a secondary concern to these folks.
      • ParalyzerAsPrimary: Same as the engine damage as major priority, but this time dealing with paralysis. Paralyze as much of the enemy as possible!
      • Melee: Adds in a preference for ships that are slower than us. The slower the better, although it's a minor addition. This way if we're chasing things, we can actually catch them and hurt them. Of course things that are closer and that we can hurt more get a general priority from the central logic, anyway.
  • The logic for "Attackers" on the AI side, or "free roaming defenders" on the human side, is now wholly contained within the vastly-smarter external targeting logic that is also used for auto-targeting in general now.
    • This makes all of the ships act far smarter, and the entire flow of the battle just feels instantly different from what it did before. It's also higher-performing than before, funnily enough.
    • Additionally, now the ships hang onto a target of this fashion only for 30 seconds, and then after that they think about whether there might be a better target or not. Previously it was keeping them on the existing target until it died or became invalid in some fashion.
    • Additionally, if they have a sniper-style weapon, then ONLY the sniper-style weapon can do any auto-targeting now.
  • When player ships switch planets, they now get fast-tracked for targeting updates. The AI and other factions get no such advantage...
  • Player ships now keep track of their favorite FRD target even when not in FRD mode, so that if the player puts them into that mode their response is instant.
  • Cloaked mobile ships (of the human and other factions) will no longer open fire on random targets they happen to be near unless they lose cloaking. They will instead hold their fire until they are within range of their assigned target (either chosen via FRD mode or by direct player order), or until their cloaking is blown by some other mechanism.
    • This basically makes it so that cloaking is way more useful in an automated fashion. If you want them to engage at will, just put them into FRD mode -- but they'll still make sure to go to their preferred target before they fire, so as to not waste any of their health to attrition.
  • Spiders now do a better job of targeting enemies that they can engine-stun, and snipers now do a better job of not giving a flip about what their range to target is.
    • This could potentially still use some work, but it's not bad. Spiders and paralyzers and so forth try to spread their damage around a bit better now, too.
  • Newly created drones should now default into attacker (FRD) mode, but existing ones won't be upgraded.

Other Performance Improvements

  • Some of the central lists of entities have been removed since they were redundant at this point. This will make the addition and removal of entities to the game a bit faster.
  • Previously it was possible to accumulate a cruft of abandoned shots that were in the world object but not actually part of the game. This was only during deserialization, so it probably wasn't the cause of the slowdown over time, but it's good to have fixed anyhow.
  • Fixed an issue where our internal "loopback buffer" that is used in single player and on multiplayer hosts was causing some substantial garbage to be thrown onto the memory heap, leading to more frequent GC collections particularly when a lot of commands are being issued.
  • The game now pools GameCommands for reuse by type, which is vaaaastly more efficient than what we were doing before. It wasn't such a big deal in the past when we had much smaller commands on average, but now that some of the commands are quite large this was causing a major GC spike very frequently.
    • This also makes the instantiation of individual commands, faster, as a side bonus. So this both makes GC collections less severe and much less frequent, it also makes sim steps a bit faster.
  • We've added in leak-detection for the GameCommands, where we can see any that are being eaten by the garbage collector instead of pooled. These show up in your log during garbage collections if any are set up wrong.
  • Shots are now pooled (with a 5 second delay before they can re-enter so that anything that was referencing them has time to be cleared out before the shot is used again to mean something new).
    • During battle, this is the single greatest performance improvement we could make, it turns out. It brings a battle that was running at 70% speed up to 100%, and one that was running at 40% up to the 70-100% range (depending on the moment-to-moment).
    • This is of course after all the other performance improvements already done this release.
    • This also makes the garbage collection calls extremely infrequent and extremely tame. They give the tiniest little bump every so often, but it's extremely lightweight.
  • Except for some things in the long-term threading section, the only thing using spatial partitioning was direct placement of units and the deployment of drones. Both of those are incredibly infrequent, and not worth the overhead of having ships go through all the partitioning lists and so forth.
    • Okay, actually the insta-fire beam weapons and aggroing some specific ships were also a thing, but frankly there were simpler ways we could get equal-or-superior performance, by limiting on other factors prior to distance.
    • Shots and ships moving really fast were being slowed down on the main thread by having to be put into spatial partitioning, and at this point that was the far-more-salient issue.
    • Additionally, we discovered that there was some form of memory leak in the spatial partitions themselves, that was causing old references to hang around for shots in particular. This was likely what was causing the "slowdown that happens over time, but is fixed by an exit to the main menu and reload of the savegame."
    • Overall this change has led to a 10-20% increase in performance during battle-heavy periods. On Chris's machine, there are some periods where he had 15k shots moving around on the screen with some 3k ships, and it was running between 80% sim speed and 100% sim speed while staying at over 100fps and no noticeable GC collection spikes. This is ridiculously improved from the prior build.
  • Wormholes are now also pooled, because why not -- we're going to be pooling most things starting in this release, which will also make mapgen a lot more responsive in the lobby (this was a big gripe of Chris's in particular).
  • Spent the morning investigating our mysterious ArcenMob collection class, which has the ominous note on it "If you use this for something it's not specifically designed for, it will break your legs." Chris considers his legs well and truly broken. ;)
    • After trying and failing to create a faster collection class than this one, and after noting just how slow the List<> class is (that's built into C#) compared to this, attention was then turned to trying to figure out what was going on with this in terms of why it was suddenly having issues in a memory-leaky fashion.
    • It ultimately turns out that there is... mostly... NOT a memory leak here. Kinda. The behavior that Chris was observing that seemed like an obvious leak was partly caused by the way that this class uses the PrimaryKeyID of the entities as a hashcode to find them, which was leading to them not being removable after having their PrimaryKeyID reset. Therefore, regarding pooling: the PrimaryKeyID is now just left in an intedeterminate state along with a few other fields until the object is re-activated from the pool with a new identity. This solves some thread race condition issues elsewhere in the code, too.
    • That said, there MAY still be some sort of leak in here, in that UsedCapacity seems to increase on these arrays over time, never getting compacted. After a while, this would lead to truly terrible performance, but exiting to the main menu and entering the game again would restart that process.
      • Chris has spent a goodly while trying to figure this one out, but is going to punt it to Keith instead and focus elsewhere, since that issue is not new in this build, and probably only comes up fully after a few hours of play.
  • Now that GameCommands are pooled, it was possible to make them even more efficient by not creating arrays all over the place and instead reusing their lists over and over. This almost entirely eliminates GC allocations, making things even faster and smoother than ever. There's still some more stuff that we can pool, but it's no longer critical to do.
  • EntityBeamWeaponLineSets and EntityOrders and MetalFlowPurpose are now pooled, as are Squads themselves.
    • This wasn't strictly needed in the short term for performance, but it does actually help performance -- and most importantly, in the very short term we remember how to do this very easily, and have a window in which to fix the inevitable bugs that result from it. So we went ahead and did it now.
  • All of the memory pooling stuff has now been moved out into its own section of the escape menu, not just being slapped under the performance section anymore.
    • One interesting discovery here is that the MetalFlowPurpose pooling was actually vastly more useful than suspected initially, as it gets hit harder than any other pool in the whole set!
  • Fixed a longstanding bug where "Invalid AABB" could occasionally show up when shots tried to render. The recent pooling changes made this a lot more common. It was basically shots having an invalid position and trying to draw in a crazy location.
  • PlanetFactions are now pooled, which makes mapgen a bit faster.

New Units

  • Adds the Stingray to the game - a swarmer type fleetship that gains a damage bonus against bubble forcefields.
    • Thanks to zeusalmighty for the suggestion, and the name.
  • Adds the Fortress to the game - a large, expensive defense structure sporting two large MLRS weapons and a plasma cannon. The AI can get these too.
    • First pass, so likely need adjusting later.
  • Design Template Servers are back! Whenever the AI unlocks a new fleetship type (which it does at certain AIP gain intervals) then it will also seed a Design Template Server for that fleetship type on the map. Hack it to get that type for yourself, or to prevent the AI from using it. I would love some testing on the Hacks to make sure that it works properly.
  • Adds Carrier, Heavy Beam, Vampire, Gravity, Shield, Plasma, and Pike Guardians back into the game with their existing models and new stats. Also turns the AIs fleetship triangle into possible drone variants with the same swarmer weakness as Carrier Starship drones.
  • Adds Minefields, Area Minefields and Widow Minefields back into the game.
    • More adjustment required!
  • Orbital Mass Drivers return, with extremely high damage...but a crippling penalty to small ships, making them pretty safe against it. A certain Trader stocks these toys...
  • Bunch of Dire Guardians return! These spawn on the AI "Core Worlds", and are fairly nasty...Tethuida is invited too!
    • Lightning, Missile, Plasma, Shield, Heavy Beam, Widow, Shredder, and Tethuida.
  • Etherjets are back. Currently they don't seem to work too well, but they're there.
  • Adds a bunch of Dire Guard Posts back.
    • Arachnid, Electric, Heavy Beam, Leech, Missile, Spider, Laser, Tethuida, Shredder, and Gravwell.

Balance Tweaks

  • AI Overlord Phase 2 and Armored Golems have lost their multishot weapons in favour of rather...large, plasma cannons.
    • There were problems with the multishots, with overkilling, etc. They really weren't impressive on super units.
  • Lost Spire Frigate now has a beam weapon, just how they did in Classic.
    • Thanks to x4000 for fixing those and making it possible!
  • Artillery Golem and Cursed Golem have had some tweaks - higher damage on both, Cursed takes slightly less self damage.
  • Ambush Turrets now fire twice as fast - so they'll get more bonus shots in, and generally higher dps too.
    • Thanks to zeusalmighty for suggesting increasing the bonus shot count.
  • Macrophage Harvesters (and Enraged too) now have 5 Mass Tx instead of 4 - makes them immune to Widow paralysis.
    • Thanks to zeusalmighty for suggesting.
  • Riot Control Starships have their shield strength reduced from 900k at Mark 1 to 200k at Mark 1, and their Strength is doubled, so the AI gets less of them.
    • There have been numerous complaints about this, and with Fusion Bombers not working against these...
  • Golems and the Spire Frigate have very large health boosts, usually around 300% what they were before.
    • Further personal testing had these dying way too quickly for a super unit.
  • Increases the shield radius of the Starting Shield Generator to cover all the Cryopods, and gives it the display name of "Home Shield Generator" to distinguish it from normal Generators.
  • Added a new MaxBubbleForcefield based_on value to damage modifiers.
  • Siege Starships and Usurpers now have a wicked strong damage bonus against bubble forcefields, making them essentially shieldbreakers.
  • AI Overlord health has been vastly reduced, and armour thickness up to 300mm on both phases.
    • Thanks to zeusalmighty for both suggestions.
  • Automated Shredders mercenary group has the Cutlass no longer self damage, and no longer states this. The Vampire Claw has vastly reduced health gain in line with the normal variant.
    • Thanks to zeusalmighty for the Cutlass suggestion.
  • Vampire Claws health gain per point of damage down from 100 to 3.
    • These were kind of invincible...
  • Agravic Pods damage increased from 54 to 80.
    • These seemed utterly useless against anything they weren't getting a bonus against, and even with the bonus were falling a little short in something so specific.
  • Marauder Raiders engine Gx up to 18, mass Tx up to 5, and hull + shield amount doubled. This makes them immune to Spiders, Widows, and lets them survive to do their pillaging.
    • Thanks to zeusalmighty for the suggestions.
  • AI Guard Posts have had a fairly large overhaul - all of them gaining more damage, health, with Needlers becoming Pikes, Arachnids doing tremendous damage to higher mass targets, and lasers really laying the hurt on bubble forcefields.
    • As with the Fortress and Stingrays, this is a first pass. Feedback is appreciated!
  • Dire Guard Posts are now seeded on the AI homeworld(s), but presently on no other planets.
  • Dire Guardians are now actually seeded from the game start, primarily on AI homeworlds but also on other higher-mark planets in decreasing numbers as the mark level goes down.
    • In general, planets now have guardians all over the place from the start, except mark 1 planets (and very few on mark 2 and not too many on mark 3). It should make the higher-level planets feel a lot more alive and threatening right from the start, which is the goal.
  • Forcefield generators now have increased mass of 5 Tx, which makes them immune to Widow Paralysis.
  • Pike Corvettes damage reduced from 80 to 60.
  • Space Tanks damage down from 194 to 170, but in return they gain the Augmented Cannon - a secondary weapon that deals higher damage at a very slow rate, at longer range.

Version 0.768 Golem Rebirth

(Released September 7th, 2018)

  • Add notification for Enraged Macrophages attacking
    • Thanks to zeusalmighty
  • Decrease the strength of the Antagonized Dyson
    • Thanks to HeartHunter
  • Remove some no longer needed unit tags for the Dyson Sphere
  • Fix a bug where the player could no longer build command stations on any new worlds
    • Big props to malkiel for finding a fix to this one
  • Prevent the player from having multiple hacks simultaneously on a planet
  • A large amount of defensive code, as well as some better logging that doesn't gum up the entire system as it runs, has been added to the DoOnAnyDeathLogic section of the code.
    • Thanks to malkiel for reporting.
  • Fixed an issue where higher-mark docks were building higher-mark versions of their ships for players (oops!)
    • Thanks to RocketAssistedPuffin for reporting.
  • Fixed the logic where ships in FRD mode, and AI ships, were trying to hug their enemies.
    • Thanks to HeartHunter7, RocketAssistedPuffin, Ovalcircle, and malkiel for reporting.
  • Added a new Zenith Shield Generator, which is mark 4 and very expensive and can be bought from the Zenith Trader.
    • Thanks to zeusalmighty for suggesting.
  • The metal tooltip now spells out exactly how much metal you have, versus the abbreviated version.
  • Fixed a couple of rather severe display bugs that would show when you had numbers in the millions, with things like 2.08m being written as 2.8m instead.
    • Thanks to malkiel for figuring this out!
  • Rather than processing every ship's re-evaluation of orders and targeting logic every sim frame, it now only checks them every 4 sim frames, divided up randomly by the modulus of the ship's primary key.
    • This has the side effect of making ships shoot not all in such big burst batches constantly, but in a much more attractive set of bursts that are ongoing. It looks far more like a battle now!
    • But the really big effect of this is that it almost doubles the performance of some hefty sections of the code. Woo!
  • Also put in a gate to only process the long-range-planning logic of the special faction logic every other sim frame rather than every frame. Doesn't seem to make any difference performance-wise right now, but you never know in the future.
  • Fixed the issue where when the AIP was > 999 it would go up off the top bar.
    • Thanks to Ovalcircle for reporting.
  • Completely redid a lot of the FRD logic, which also handles a lot of the AI logic. It could still use some work, for sure, but it's no longer quite so bafflingly moronic as before. ;)
    • Thanks to HeartHunter7 for an awesome savegame and continuous reports!
  • If a unit does not properly have itself set up for self-building, but it's set up to be buildable in the Build sidebar (not docks), then it now complains about that rather than failing silently.
  • Fixed the fact that you could not actually buy the Zenith Trader's wares since they were not set up to be self-buildable.
    • Thanks to HeartHunter7 for reporting.
  • The metal policies and quick build sections have been removed from the Build sidebar for now. They were non-functional and for now are just clutter. Hopefully for bringing back later!
  • Probably fixed a bug with all multi-shot ships, who were likely not firing nearly enough shots. Will require more testing to be sure, but it looks good at a first bit of testing.
    • As a bonus, their targets are now chosen more intelligently than they previously were.
    • Thanks to RocketAssistedPuffin for reporting.

Beam Weapon Upgrades!

  • The visuals for the various types of beams (tractor, tachyon, repair, claim) have all been redone to look nicer, and the beam weapon effects for conical and individual beam weapons are also now in place. Finally, you can actually see your beam weapons! And it looks cool!
  • The calculations for beam weapons, and the stats that they use, have been reworked substantially. The targeting turned out to be quite offset from what was advertised, because we don't have enough precision in our fixed-int math to get the angular positions well. This is unfortunate, but for now we're just switching to making it so that you just fire one powerful beam per weapon. It looks cool enough as it stands, it actually hits what it aims at, and we can deal with the added beam-fans later on if need be.
    • Thanks to malkiel for reporting the various woes that beam cannons had.

AI Tomfoolery

  • Made AI targeting more likely to actually kill remains rebuilders so that a sufficiently big turret/etc ball doesn't distract it indefinitely.
  • Now if a chunk of threat sees a hostile king unit in its list of potential target planets, it has a 80% chance of ignoring any potential target planet without a hostile king unit.
    • Translation: if it thinks it can get to your home command station, it will probably try.
    • It's not a 100% chance to avoid things being too predictable.

Balance Tweaks

  • Gryn, The Void Home can now build units starting at Mark 1, instead of Mark 3.
  • Grenade Launchers, Flak Turrets and Flak Guardians now do far less damage, but hit triple the targets per shot, and gain a damage bonus against anything with at most 30mm armour. This makes them into anti swarmers.
  • Autocannon Minipods are now cap 180, and have armour thickness of 30mm to become a swarmer type.
  • Ablative Gatlings now have armour of 30mm to finish becoming a Swarmer type.
  • Space Planes have had their armour reduced to 30mm - but retain their cap.
  • (Re)Birth of the Golems! Armoured and Artillery have had massive weapon boosts, the Regenerator now has limited vampirism, and the Cursed has a slight damage increase, much higher range, and the AI version is now properly weaker than the players.
  • Drones produced by the Carrier Starship now have armour thickness of 30mm, to make them weak to anti-swarmer weaponry.
    • Thanks to zeusalmighty for suggesting.
  • Tractor Arrays previously had ludicrous health and shields. More than halved the health, and fifth the shields. Enemies should actually have a hope in hades of breaking through, now.

Version 0.767 Newly In Stock, By Zenith

(Released September 6th, 2018)

  • Update the Macrophage Telium description to say "Be careful about killing this, it will enrage all the Macrophages"
    • Thanks to zeusalmighty for suggesting
  • The infrastructure menu can now be seen properly on enemy planets. Additionally, items within it that are not buildable on enemy planets -- like energy collectors -- should no longer show up. Now mobile builders are actually more useful!
    • Thanks to RocketAssistedPuffin for reporting.
  • The "Start with units Queued" option now works again. Turns out it was easier to fix than remove.
    • Thanks to RabidSanity for reporting.
  • Extremely long-ranged units will now have a reasonable kiting distance.
    • Units with extremely long-ranged weapons (sniper guns, etc) will no longer approach targets if they also have a shorter-ranged gun. This prevents the sniper starship from running up against enemies like it used to.
    • Thanks to HeartHunter7 for reporting.
  • It should now be impossible to have your stored metal go over your metal storage cap.
    • Thanks to malkiel for reporting.
  • When you can't afford mercenaries right now, it now shows that as the proper message rather than saying they can't be hired at the current planet. The incorrect message was super confusing!
    • Thanks to RocketAssistedPuffin for reporting.
  • The Rorqual Hegira now also has the Norris Effect, same as Gyrn does.

More Targeting Work

  • Fixed a bug in the prior release that made it continue to use the old AI-style target priorities on ships in FRD mode.
    • Thanks to HeartHunter7 for reporting.
  • Updated the general targeting logic in TargetPlanning so that it now also makes use of the target priorities and pays attention to ranges, which should lead to more consistent behavior between that sort of targeting and the targeting from FRD mode. It also takes into account overkill, etc.
    • Thanks to HeartHunter7 for reporting.
  • Added some logic that prevents some thrashing when ships are chasing targets out of their current firing range. This leads to better ship behavior, plus a nontrivial CPU performance bump.

Zenith Trader: New Wares In Stock

  • The Zenith Trader should now have some interesting wares to sell. They aren't tested yet, so may have some bugs.
    • Scrubbed Aberration
    • Scrubbed Abomination
    • Tamed Macrophage
    • Chained Dark Spire Eidolon
    • You don't have to have any of those factions enabled for these to be available.
    • Thanks to Ovalcircle for reminding us to give the Trader something to sell.

Reinvented Units

  • Vorticular Cutlass has been adapted into the new Metabolizing Gangsaw.
    • Melee ships that damage themselves when they do damage, but also carves metal off their target to add to your income.
  • Needler Turret has become Pike Turret.
    • Exceptional against highly-armored ships, particularly those with high remaining hull health.
  • Multi-Needler Corvette has become Pike Corvette.
    • Exceptional against highly-armored ships, particularly those with high remaining hull health.

New Units

  • New player-only turret: Ambush Turret
    • Specializes in destroying enemies new to the planet.
  • New AI-only Guardian: Widow Guardian
    • Scary, causes paralysis to victims with low mass.

Balance Tweaks

  • AI Overlords have reduced health - bit more than half. Phase 2 now has 2 Archon Cannons, dealing 8000 damage every 2s, and Archon Missiles, firing 32 missiles at once, every 2s, with 200 damage each. Also has the Norris effect, so no more cheesing this by trapping it.
    • Thanks to Ovalcircle for suggesting the idea and the general weapons, and x4000 for the Norris Effect.
  • Macrophage Harvesters now have 90mm thick armour, to make them a bit easier to actually fight now.
    • Thanks to zeusalmighty for reporting, and Badger for the 90mm figure.
  • Sentinel Frigates and Sentry Starships now give sensor data for neighbouring planets.
  • Space Planes now take half damage from anything shooting them beyond their own weapon range.
  • AI Hunter Fleet starting budget is vastly reduced. This should hopefully stop it attacking you even in the first minute, and make the initial planet grab a bit easier.
    • An example of this is building the initial triangle of fleetships wasn't enough to deter the Hunter from attacking at difficulty 7, two minutes into the game.
  • Starting metal increased from 360k to 540k. This should mean you don't go into "Starving" just building initial fleetships, and will help the initial planet grab as well.
    • This is currently the exact amount required to build the initial triangle.

Version 0.766 Target Equilibrium

(Released September 5th, 2018)

  • Hopefully fix null reference in Hacking Notifications
    • Thanks to Ovalcircle for reporting
  • Hopefully fix game load problem due to Dyson Shpere
    • Thanks to HeartHunter for reporting
  • Improvements to the Nanocaust:
    • Improve detection of when a planet is capturable
    • Improve detection of fleet state (this was causing huge numbers of notifications to pile up)
    • Lots of improvement to nanocaust tracing
    • Some overall nerfs to the Nanocaust strength (HeartHunter's suggestion)
    • Make the Hack cost more hacking points
    • Hacked Nanobot Hives now show in the galaxy map
  • Improved the wording of a few things in the Tutorial.
    • Thanks to Ovalcircle for the critique
  • Fixed a bug introduced during the GameEntity split where defenses were never seeded at wormholes anymore. This was because one of the search flags for wormholes was only looking at Squads (which are, of course, never wormholes!), and not looking at Other. Now a new flag has been made for Other, where wormholes are, and it searches on that. It's not possible to make this error in the future, since the flags are not cross-compatible, which is good.
    • Thanks to zeusalmighty and Ovalcircle for reporting.
  • Fix a bug where Tertiary mercenary units were spawning secondary units instead
    • Thanks to RocketAssistedPuffin for reporting
  • Previously, things that said "less than" as a requirement really meant "less than or equal to." They now really mean "less than." Affects:
    • Engine stun gx, paralysis tx, reload slowing mm, gravity gx, tachyon albedo, tractor gx and albedo, and ion albedo.
    • Thanks to RocketAssistedPuffin for reporting.
  • Fixed our internal batch files to finally properly be able to compile with Unity 2018.2+.
    • It turns out that on Chris's machine, he was unintentionally still compiling with 2017.3p1 instead. After updating his path to properly point the right place, trying to debug this with Puffin, he was able to get the same error that Keith and then later Puffin were having.
    • The error in question was because something changed with the mcs.exe compilter used by Unity in their new version of .NET. What exactly was happening is still unclear, but simply switching to use %unityPath%Editor\Data\MonoBleedingEdge\bin\mcs.bat as the path fixes the issue.
  • Okay, a REAL fix to the compilation issue. We're simply now using the older compiler from 2017.3p1, same as has been done on Chris's machine for quite a long time. The newer compiler seems to have some sort of issue or requires some new arguments.
    • With this in place, we actually now don't even need unity installed on the developer machine at all in order to compile, most likely.
  • Fixed a typo when hiring mercenaries where it said things like "Cost: 2 of your 20 metal" instead of "Cost: 2 of your 20 hacking points"
    • Thanks to Ovalcircle for reporting.
  • Fixed a nullref in pathfinding between planets when the target or source was null or identical.
    • Thanks to Ovalcircle for reporting.
  • Mobile Space Docks now properly say V-Wing, Fusion Bomber and Concussion Corvette - this was missed when those ships were revamped.
  • Added a new DoOnSpawnsOnDeath method on the scenario and on the special faction implementations. This allows us to have central logic, or per-faction logic, for when an entity is spawned via another entity dying.
    • We're now using this on when a mercenary does this in order to copy to mercenary group affiliation from the parent to the child, thus preventing errors that otherwise happened.
    • Thanks to RocketAssistedPuffin and Ovalcircle for reporting.
  • Fixed an xml bug with tractor guardians where they had some tractor fields set up on their main weapon, leading to the interface not showing their tractor stats properly.
    • Thanks to malkiel for reporting.
  • Fixed a bug where if you were spending zero metal per second at the moment, it would not show your metal data properly in the tooltip over the metal field.
    • Thanks to Ovalcircle for reporting.
  • Prevent OnDeath effects from firing when a unit is Despawning. This prevents some crashes when the Nanocaust is trying to take over HRF ships that are warping out
    • Thanks to ZeusAlmighty and the Puffin for reporting
  • Fix a bug where Dyson Hacking wasn't costing hacking points
    • Thanks to Ovalcircle for reporting

Ship Targeting

  • Logic has been added to the game that should make the human forces always target enemies as if they are in FRD-mode, versus spreading damage around evenly. This requires further testing to make sure that we actually got the issue, though.
    • Thanks to HeartHunter7 for bringing up the various targeting issues.
  • Targeting weights for FRD units (on the player side) is now completely different from the targeting weights used by the non-player factions.
    • The AIs and humans simply have very different goals in how they fight, so letting them weight things differently makes a lot of sense.
    • Thanks to HeartHunter7 for bringing this up.
  • For every forcefield that a ship is protected by, it now gets its priority divided by 3 if it's a player doing the targeting, or by 5 if it's an AI doing the attacking.
    • This makes the AI in particular a lot less cheesable by sticking key ships under forcefields, and it makes your FRD units also behave more intelligently.
    • Thanks to RocketAssistedPuffin for suggesting.
  • AI Overlord Phase 1 now has very low priority instead of requiring manual target. This allows factions that don't take over planets to actually attack it, such as Enraged Harvesters from the Macrophage.
    • Thanks to Ovalcircle for reporting.

Balance Tweaks

  • Macrophage Harvesters now have an engine GX of 19, to prevent them from being engine stunned forever by Spider units, including Guardians. This should let them do their thing...and not be immediately cheesed by a player with one spider turret.
    • Thanks to Ovalcircle for reporting this sad situation.
  • Command stations now SHOULD automatically capture harvesters and other neutral entities without you needing to have your engineers go running around manually. Requires testing, though.
    • Thanks to HeartHunter7 for reporting.
  • The Orchid Ark now has lost the ability to assist construction on other ships, but it's repair speed has gone up by 10x. This isn't a multi-repair ability, but it's such a superfast repair process that it should act very similarly to what is imagined. Let's see how that feels, anyhow.
    • Thanks to Malkiel for suggesting.
  • Carrier, Riot Starship and Tritium Sniper Starships are all bonus ships now. Siege Starships can now be built by default - so you'll have some pretty explosions.
    • Thanks to Malkiel for suggesting.
  • Siege Starships no longer spread their damage out, and instead deal full damage to at most 10 targets.
  • V-Wings gained 100 Hull, to 2000, and 200 Shields, to 2000. This is to help make it a Human counterpart to the Armor Ship of the AI. (Armors being tougher tanks, while V-Wings trade off for a slow debuff).
  • Armor Ship damage down from 206 to 120. This is so it isn't utterly wrecking everything while being more durable. These should now have the same DPS as V-Wings.
  • MLRS Corvettes now have the same hull and shields of Concussion Corvettes - these can now be demolished by Fusion Bombers.
  • Concussion Corvettes gained even more damage - from 60 to 80.
  • Sentinel Frigate cap halved and strength doubled for AI budgeting - they'll get less of these now.
  • Inhibiting Tesla Corvette cap halved and strength doubled for AI budgeting - they'll get less of these now.
  • Assault Starship now fires every 3s, down from 4. This is to help against Armor Ship masses.
  • Space Tanks now get a similar bonus against 90mm or greater thickness, like Assault Starships. This is to give a possible counter against Armor Ship masses.
  • Needler turrets now get a similar bonus against 90mm or greater thickness, like Assault Starships. This is to give a possible counter against Armor Ship masses.
  • Ablative Gatling cap increased from 120 to 180 - fear the swarm!
  • Lowered Scout tech costs drastically - should cost 600 for Mark 2, then 1200 for Mark 3.
    • Thanks to zeusalmighty for the suggestion.
  • Raiders now have an Engine GX of 18 - this makes them immune to almost all speed penalties - hope you have V-Wings in position.
  • Orchid Ark now has Vampirism in order to heal itself - 5 health for every 1 damage.

Version 0.765 Game Entity Split

(Released September 4th, 2018)

  • Fix a bug in the mapgen code that could get in an infinite loop
  • Fix a few typos in Mercenary Descriptions
    • Thanks to Ovalcircle for reporting
  • Add a popup notification when the Risk Analyzers are close to firing
  • Add a 'primary_unit_must_survive_to_rehire' xml tag for Mercenaries. Setting this to false will mean that you can always rehire a mercenary group even if all its units die.
  • Don't allow the mercenary budget to go into debt when purchasing units; this will confuse modders.
  • Add a missing word in the description for Instigators
    • Thanks to OvalCircle for reporting
  • Fix a bug with self-attrition for drones. They now actually die at .1% per second, instead of 10% per second.
    • Thanks to Ovalcircle for reporting
  • Add in Science hacking
  • Fix null reference exception in Marauder code.
    • Thanks to Ovalcircle for reporting
  • Fix a typo on Cloaking hovertext
    • Thanks to malkiel
  • Mark 1 space dock cap increased from 2 to 4.
    • Thanks to Badger and RocketAssistedPuffin for suggesting.
  • The wormholes on player home planets will always now be extremely far out on the gravity well, so that there is plenty of room for the human home command station to be far from those wormholes.
    • Thanks to RocketAssistedPuffin for reporting.
  • The Ark "Gyrn, the Voidhome" now also has the ability "Norris Effect":
    • Displaces enemy bubble-forcefield generators when moving into them.
  • Fixed a bug in the most recent version of the game where the map gen special seeding logic was even _worse_ than before, because we forgot one line of code.
    • Thanks to Badger for reporting.
  • Fixed an issue where ships would be able to repair other ships that just died, so long as they go to them in the exact frame that the ship died.
    • This made things like scrapping a unit go into infinite loops if engineers were around.
    • Thanks to Ovalcircle for reporting.
  • Also fixed a bug where engineers could be set to assist space docks or similar that were blown to remains.
  • Fixed a bug where things that died to remains (or neutral) would still repeatedly explode even though engineers were not involved.
    • Thanks to Ovalcircle and crowebird for reporting.
  • Fixed a bug where after a ship was claimed, it would not switch to its proper claimed graphics until you tabbed out to the galaxy and back in.
  • There is now a new "ShotHitLogic" tracing option that will dump the data for all the ships that are hitting one another so that you can check for inaccuracies in math.
    • Thanks to RocketAssistedPuffin for reporting the lack of this.
  • When there is only a single unit in a stack that you are hovering over in the ships tab of the sidebar, it now acts as if you are directly hovering over that unit, thus showing a lot more specific info like its individual health, etc.
    • Thanks to Ovalcircle for suggesting.
  • Reorganized the campaign stats section a bit, and broadened the game performance section (as well as moving it down).
    • It now says if the game is paused or running, it says what the current frame is, the current entity count, the number of garbage collector calls, the total entities created, and the current command count (that last one is a rough estimate).
    • This helps even non-developers tell at a glance what might be going on if the performance is low (tons of commands, tons of entities created or present, it lags every time the garbage collector runs, etc).
  • The AI is now limited to at most 3 shield generators per planet (for now, anyhow).
    • Thanks to HeartHunter7 for reporting the crazy numbers of shields that were otherwise present.
  • Tutorial enhancements. The third planet is now just a Mark 2 planet. The player is told to use Scouts to explore it, then build Starships and upgraded Fleetships to capture it.
  • The Tutorial's AI has been significantly nerfed to make it much harder to lose to.
  • Fix a potential null reference in the Science Objectives
  • Weapon Renames for Macrophage and Nanocaust factions.
  • Fixed Anvil Securities mercenary group being called War Siegers.

Splitting Our GameEntity For Major Performance Gains

  • Major internal refactor: GameEntity has been split into four classes:
    • GameEntity_Base provides the new abstract class that is underneath the other three.
    • GameEntity_Squad is for all of the ships.
    • GameEntity_Shot is for all of the shots, and is now vastly more lightweight than it used to be.
    • GameEntity_Other is for basically just wormholes, and is incredibly more lightweight than it used to be.
    • Despite all of these changes, old savegames still work.
    • The new data for shots is now faster to load into RAM when creating a firing shot, as well as much more lightweight when saving a game with a lot of shots in it.
      • A savegame that has 14k squads and 29k shots previously took 9.61MB, but now only takes 6.66MB.
    • There are a few cases where code is now slightly more verbose, but overall the memory footprint is down notably, and the CPU footprint is down somewhat.
  • The changes to splitting out the shot data, and thus making it not remotely so heavy to initialize, makes it so that when there are thousands of shots being spawned in a second, it no longer causes lag spikes like it previously did. It was actively causing huge amounts of hitching before, simply as a part of creating all those new objects in memory, it turns out.
    • In our test case, with the prior version of the game it was hanging for about 3 seconds every 3-5 seconds, and it was running at something like 35% speed when not hanging. It now has no hitches in that same savegame, and runs at a solid 45% of full speed. This is even true as it progresses into having more than 45k active shots in the game at once, pretty much all of which are all on one planet (nightmare performance scenario).
    • Thanks to HeartHunter7 for reporting.
  • When saving to disk, some of the fairly-temporary data having to do with the plan for the next frame (that has not happened yet) is no longer saved. It simply isn't needed on disk, but it is needed for sync between clients in multiplayer.
    • This brings the on-disk size of the large savegame that has 14k squads and 29k shots further down from 6.66MB to 5.29MB.
  • A new function has been put into our serializer, where it "compacts" down the Int64 variables that are used for GameEntityIDs, by simply renumbering them 1-x as they are added into it. This only happens when saving it to disk, but it has the effect of majorly reducing the filesize of long-running games (or those with a lot of shots in them over time).
    • This brings the on-disk size of the large savegame that has 14k squads and 29k shots -- which had had over 10 million entities in it since starting -- further down from 5.29MB to 2.68MB.

Nanocaust Tweaks

  • Make Nanocaust hacking a bit tougher.
    • Thanks to zeusalmighty for the bug report
  • Fix a variety of issues with the Nanocaust
    • Thanks to Ovalcircle for reporting. Note that these changes may well make the Nanocaust more aggressive toward the player. This seems like a good thing
  • Improve the Nanocaust notification and objective messages
    • Thanks to Puffin for reporting

Dyson Sphere Tweaks

  • The Dyson Sphere now uses tracing to log events, which can be enabled or disabled during the game via the Debug menu.
  • Fix a bug where Antagonized Dyson Spheres weren't producing units, and also the Description on the Antagonized Dyson Sphere will tell you what is causing the Antagonization.
  • Allow Three hacks for the Dyson Sphere
    • One steals a Dyson Sphere ship design
    • One increases the Dyson Sphere's unit production
    • One decreases the Dyson Sphere's unit production

Balance Tweaks

  • This whole section is thanks to RocketAssistedPuffin.
  • Anvil Securities Riot Ship made MK4, now get half as many.
  • War Sieger has been rebalanced - used to spread damage among targets, now it deals full damage to at most 10 in the blast radius. Weapon damage and firerate reduced to compensate.
  • Anvil Securities can be hired twice, if the Riot Starships survive. All others only hireable once.
  • Fixed Regenerator and Botnet Golems having half the range of their counterparts.
    • Thanks to Mckloshiv for reporting.
  • ShieldGenerator Priority 750 > 75, Shield Guard Posts given same priority (they have a gun, but their main purpose is to shield so gave them same).
    • Thanks to Ovalcircle for reporting.
  • Guardian Health change to 1/4th what it was, and AI Guard Post Health 5x what it was.
    • Thanks to Badger for suggesting.
  • AI Overlord Phase 1 now requires manual targeting to attack - this avoids ships attacking it above hostiles that actually fight back.
    • Thanks to Ovalcircle for suggesting.
  • Ion Cannons health reduced to a third of what it was before.
    • Thanks to Badger for suggesting.
  • Assault Starship now gains damage multiplier vs targets with at least 90mm thickness, down from 100. This is to give the players something to fight Guardians and sometimes other starships with early on.
  • Fusion Bomber damage increased from 150 to 225 at Mark 1.
  • Concussion Corvette damage increased from 50 to 60 at Mark 1.
  • Scouts now have double the cloaking points at MK1, and only gain 1000 per Mark.
    • Thanks to Kesseleth and Badger for mentioning these.
  • Engine GX of Assault, Shield, Star and Carrier Starships increased to 16. This now makes them immune to Spider fleetships and Spider Turrets, but not Guardians. This was apparently *really* annoying.
    • Thanks to Badger for reporting this nuisance.
  • Spider Fleetships, Turrets, and Guardians now have a maximum stun of 10 seconds. This is to stop ships being stuck for a full minute and just being annoying, while being high enough to still be decent in combat.
  • Lost Spire Frigate has a much improved weapon on it, firing every 2s and dealing 20,000 damage. Shields improved from 100,000 to 150,000 to better represent their shielding technology.
  • The original Mercenary groups have received a general improvement - to cost, hire count, strength, etc. Descriptions also list how long they last.
  • MLRS Corvettes, Turrets and Guardposts now have a reload time of 6s, up from 2s. This is both a balance nerf and a minor performance increase - they were simply firing way too many shots per unit.

Version 0.764 Mercenary Surge

(Released August 30th, 2018)

  • Fixed a nullref that could happen in the nanocaust notification display.
    • Thanks to HeartHunter7 for reporting.
  • Put in better protection and notification for a nullref that could happen in GenerateDysonSphereObjectives.
    • Thanks to HeartHunter7 for reporting.
  • There is now a better check in findAIKing in the nanocaust function where it will throw a visible error if it can't find an AI king and the game is still going on. If the game is already won, then it just says nothing because that's A-OK.
    • Similar logic is now in place for dead humans.
    • Thanks to HeartHunter7 for reporting.
  • If the player has lost and there is no human king planet, the nanocaust now properly routes randomly.
    • Thanks to HeartHunter7 for reporting.
  • The "BUG: nanocaustInfectedPlanet, the planet passed in is null somehow" now will give line numbers if it gets triggered, since it is potentially a problem.
    • That said, several cases that could lead to that branch have now been fixed, as they mostly revolved around valid missing targets and needing to find a random target.
    • Thanks to HeartHunter7 for reporting.
  • It appears that the warning "Could not unlock ship line: [whatever] because it was already unlocked!" was being triggered because of duplicate claim calls to ARS units. That should now be fixed so that it doesn't throw the spurious error.
    • Thanks to HeartHunter7 for reporting.
  • A protection has been put in place to prevent ShipsDying from getting the same ship in it twice in the vis layer. This may not have even been a concern, but because of "MINOR BUG: ship killed is already on Dying list" popping up, it was worth looking at.
    • "BUG: ship killed is not part of target squad." is still on the loose, though, but quite rare.
    • Thanks to HeartHunter7 for reporting.
  • The big scary message of "During placement: Command station already here and placing command station!" is now replaced by a log-style message on the side, instead, like other non-bug-based error messages during placement.
    • Thanks to RocketAssistedPuffin and HeartHunter7 for reporting.
  • The big scary message of "During placement: entityDoingThePlacing == null!" is now replaced by something much better.
    • The new message is: "Construction source died prior to construction start -- cannot build this now."
    • Thanks to Badger for reporting.
  • Put in better logic that will show us what is really going on when you try to hover over a macrophage harvester whose special faction doesn't have the proper implementation type: it will say what the faction and implementation type actually is as an error in the tooltip, now.
    • This was the "System.InvalidCastException: Specified cast is not valid" in Arcen.AIW2.External.HarvesterDescriptionAppender.
    • Thanks to HeartHunter7 for reporting.
  • Fixed the "data.PerPlanet[X] is null" error from the Dark Spire, which was essentially a race condition and something that we could work around easily once we knew it was there.
    • This may have been something that interfered with background thread execution, but it's hard to be sure. Most likely it was not.
    • Thanks to HeartHunter7 for reporting.
  • Fixed the "BUG: Harvester on [X] has null hdata" issue, which has a less-clear cause but probably was also a race condition of some sort.
    • At any rate, simply lazy-initializing this data is harmless and solves the problem, since there is no important data in MacrophagePerHarvesterData that can't be initialized at the time it is needed.
    • Thanks to HeartHunter7 for reporting.
  • Under the hood, the map generator now logs to your debug log anytime it generates a new map. It logs the type and the seed, but not all the other settings. It also logs when it's complete. So we can see from a log how long something takes if it is slow, which is useful, and if something doesn't complete because of a deadlock or similar. In those instances we'll have the map seed and such so that we should be able to duplicate your settings and remove whatever the deadlock is. It won't cause the map thread to come back from a deadlock, but since those are hopefully going to be incredibly rare that shouldn't be an issue. Main thing is that this will let us test and fix them quickly.
  • The internal variable GalaxyCenter has been renamed to GalaxyMapOnly_GalaxyCenter, to make it super clear that this is only for galaxy map generation.
    • This was erroneously being used in mercenary code that is planet-based, and thus was putting mercenaries outside the grav well.
    • This should have been using Engine_AIW2.Instance.CombatCenter, which is the center for planets.
    • However, this didn't actually cause any issues, since it was being overriden anyway.
  • Mercenaries that spawn in now do so at 90% of the grav well radius instead of all the way on the border (being all the way on the border causes them to sometimes get stuck on the border).
    • Thanks to RocketAssistedPuffin for reporting.
  • Fixed an issue with the mercenaries data table where it had a MercGroupName that was being pulled in instead of using the underlying InternalName and DisplayName.
    • Related to this, all the display_name fields were blank, so in places that used DisplayName instead of MercGroupName, the mercenary name showed as blank.
    • Now everything uses the built-in fields, and the xml files have been updated to include the mercenaries fine.
    • Thanks to RocketAssistedPuffin for reporting.
  • Fixed a bug where the savegame metadata file would fail to save if certain setup data was missing (such as the map type). This would then cause the game to stall out and give you the "wrong frame for command" error after autosaves attempted.
  • The term "Cloaking Points" has been shortened to just "Cloak" in order to prevent its text from running into the next item.
    • Thanks to HeartHunter7 for reporting.
  • Fixed an index out of range exception that could happen in GetPlanetForInstigatorBase if there were no valid target planets found for whatever reason.
  • Fix a bug with risk analyzers
  • Fix a bug calculating the strength of secondary units to spawn for Mercenary Groups
    • Thanks to RocketAssistedPuffin for the bug report
  • Mercenaries were never actually set up to charge the player for their services, heh.
    • They now not only charge you, but they give a message when you try to hire them but can't afford them.
    • They also show what their costs are in their tooltips, which they previously did not do.
    • When they are hired, all players also now get a message saying who was hired, for where, and for how much.
    • Mercenary names now show up as red if you can't afford them.
    • Thanks to RocketAssistedPuffin for reporting.
  • Mercenaries are now only marked as summoned if they actually were successfully summoned.
  • If the Hunter Fleet has obtained a usurper (for example, player defends from a reconquest wave but the usurper gets away. Then the usurper joins the hunter fleet), make sure that it claims any planet in the name of an AI faction, not the Hunter Fleet. Also prevent the Nanocaust from claiming usurpers, since otherwise it would wind up claiming Nanocaust planets for the AI.
    • Thanks to OvalCircle for bringing this to my attention
  • The tooltips for mercenaries now specify what kind of planets they are willing to work on, and if they're willing to be hired on the current planet or not.
  • The mercenary hiring header now includes a count, has a better tooltip, and is more clear when there are no mercenaries around.
  • Fixed the bug where all the mercenary options were displayed stacked on top of one another.
  • The list of mercenary groups that can be hired now only includes a single copy of each mercenary outfit, rather than a copy for each discovered communicator that can hire them.
  • Add the ability to have mercenaries controlled directly by the player. To use this, add the field 'donate_to_player=true' to the mercenary XML.
    • Currently untested. Let me know if it works
  • Added a new SingleMercenaryGroupState that is now serialized on the central MercenaryGlobalData, replacing the old data strucutre that was previously serialized per-communicator.
    • Now mercenaries have a properly-global status instead of it being per-communicator.
  • The Mercenary data structures in general have been majorly rewritten in order to be fully mod-compatible (using InternalName instead of a manual groupID that is more likely to have conflicts), among other improvements such as making the mercenary status global for each mercenary group instead of tied into the communicator that is able to call them.
  • Fixed the bug where in the tooltips the cap of ships was being shown wrong.
    • Thanks to Ovalcircle, RocketAssistedPuffin, and zeusalmighty for reporting, and Badger to finding the fix.
  • The cap for space docks is now per-planet instead of galaxy wide, and it's now 2 instead of 30.
    • Space Docks can now be upgraded for tech cost to get more dock ship cap, make them build faster, have more health, etc.
    • It's not a particularly good investment, but it's something that in certain circumstances could be really useful, so this is technically "candy tech."
    • The metal cost for Space Docks has also increased from 600 (!?!?) to 35000, which is more in line with other similar ships.
  • The shield generator per-planet cap has been dropped to 1 from 2, which makes it so that when you get to high-level versions of these you can't have so very many of them per planet. These are really meant to be scarce. Their max mark level is also now 3 instead of 7, for players only.
    • In existing savegames, the AI shield generators will wind up being capped at mark 3 retroactively, as well, but in new savegames that won't be the case.
    • Thanks to zeusalmighty for reporting the imbalance here.
  • Fixed a bug where mark 2 of ships that have a cap of 1 at mark 1 would still have a cap of 1, but then it would jump to 3 at mark 3. Now it properly goes to 2 on mark 2.
  • The game now properly limits what kind of planets mercenaries are willing to spawn on.
  • The "modder game command" is a lot more powerful now, with a faction and context being passed in so that you can create ships directly during it.
    • Mercenary ships are thus now directly created when you request them, which means that requests can work while you are paused.
  • Finished replacing all references to merc communicators instead now being merc beacons.
  • 5 beacons now seed per galaxy, instead of 3.
  • Fixed an issue where immobile ships could become mobile under certain circumstances since two versions back.
    • Thanks to zeusalmighty, Badger, and RocketAssistedPuffin for reporting.
  • Protections and logging have been put in that should solve the problem of nullref exceptions after a mercenary unit spawns another mercenary unit on death.
    • This hasn't been tested, so if it still breaks in the next version then we'll need a savegame, but that wasn't possible prior to now.
    • Thanks to RocketAssistedPuffin for reporting.
  • The mapgen seeding of special items and faction goodies is vastly improved.
    • Factions that are major (Dyson, nanocaust, etc) should never seed on the same planets as each other anymore.
    • The places that these objects will seed is no longer just in the inner part of each planet system, but is specified in mapgen (most are "anywhere" now). This makes things a lot more varied-feeling.
    • The actual logic for doing the seeding is now much faster, and does not allow for placing duplicates of the same type on one planet (such as 3 mercenary beacons on a single planet).
  • You can now see what mercenary groups a beacon can contact BEFORE you hack it.

New Mercenary Factions By RocketAssistedPuffin

  • New Mercenary factions by RocketAssistedPuffin!
    • War Harvesters
      • Purchase a group of War Harvester bots from a fellow resistance group. These bots harvest metal from their targets and grant it to you. These are put under your command.
    • War Siegers
      • Purchase a group of War Sieger bots from a fellow resistance group. These bots wield dual mini-plasma cannons for long range devestation. These are put under your command.
    • Automated Firesupport
      • An abandoned drone factory will supply you with a temporary force of sniper units, if given construction material. These will fight to the death. Lasts 10 minutes.
    • Automated Shredders
      • An abandoned drone factory will supply you with a temporary force of Cutlass and Vampire units, if given construction material. These will fight to the death. Lasts 10 minutes.
    • Automated Construction Swarm
      • An abandoned drone factory will supply you with a temporary force of modified construction bots, that spawn smaller copies on death, if given construction material. These will fight to the death. Lasts 10 minutes.
    • Anvil Securities
      • Before the current war, they used to be a defense contractor. Now, for a price they'll help defend nearby friendly and neutral planets with their Riot Starships and Spiders. Leaves after 10 minutes.
    • These came with the following new units:
      • War Harvester, War Sieger, Automated Sentinel Frigate Drone, Automated Sniper Drone, Automated Vorticular Cutlass, Automated Vampire Claw, Automated Construction Bot, Mini Automated Construction Bot, Anvil Securities Spider.
    • Obviously huge thanks and kudos to RocketAssistedPuffin!

Version 0.763 Supersized Ship Caps

(Released August 29th, 2018)

  • Fix a bug with the Devourer notifications, a bug with astro train hovertext and a type in Fleetships xml.
  • The Sniper fleetship now gets its damage bonus against ships with 1350 speed and up rather than 1800 and up.
    • Thanks to RocketAssistedPuffin for suggesting.
  • The in-game tooltips now clarify that you have to have no cloak points before any cloaking regen will happen.
    • Thanks to RocketAssistedPuffin for suggesting.
  • The cloaking points lost by ships should now properly round up instead of down, which should make it 5 shots to decloak instead of 6. Needs to be re-tested, though.
    • Thanks to RocketAssistedPuffin for reporting.
  • Tractor fields can no longer grab cloaked units. They're considered more of an active ability, whereas gravity fields still slow anything in range.
    • If something is already tractored and then cloaks, it will probably stay tractored.
    • Thanks to RocketAssistedPuffin for suggesting.
  • Fixed a bug where drones would likely sometimes not get created inside their parents. Wasn't likely happening yet, but could have bit us in the future.
  • Put in a change that should make it so that drones spawn out of their parent with the same mark level as the parent, OR with the max mark of the drone if that is lower than the mark level of the parent. It was supposed to already be doing that, but apparently was not; it now definitely works.
    • Thanks to Badger for reporting.
  • Fixed the display of the strength units on the astro train descriptions so that they are of the right visual magnitude. Will need to be tested to be sure it's right, though.
    • Thanks to RocketAssistedPuffin for reporting.
  • Fixed a bug where the gravity multipliers from turrets were being applied twice, plus having another clamp that was inappropriately lowering things.
    • Also made it so that there is now a cap on how slow ships can be knocked from gravity sources that is speed 80 (can be tweaked in external constants with min_move_speed_for_mobile). Engine stun can of course make them slower than that.
    • Thanks to Badger for reporting.
  • FINALLY and definitively fixed the screen flashing bug, which was an issue with the scale of gimbals getting massive on death when their squad would zoom off to ArcenPoint.OutOfRange.
    • This is now capped so that the icons can't ever get that huge, and you should just see the icon flash big in the center of your screen if it were to have the issue now (from some other source of the squad zooming off inappropriately).
    • But more importantly, we also fixed the underlying issue with the squads zooming off out of range. This was probably the culprit in some other cases, too.
    • Thanks to Badger for a savegame where we could recreate this 100% of the time, and thus were able to hunt it down. And thanks to Ovalcircle, HeartHunter7, RocketAssistedPuffin, and others for reporting the issue.
  • Fixed an exception that could happen on astro train notifications.
    • Thanks to Ovalcircle for the save.
  • Fixed some exceptions that could happen in the ships sidebar.
    • Thanks to Ovalcircle for the save.
  • Fixed some exceptions that could happen in the escape menu, thus preventing saving.
    • Also fixed it so that any future exceptions there can't absolutely halt the game, and will give us better debugging info.
    • Thanks to Ovalcircle for the save.
  • When ships cloak, no longer show an Explosion. The ships weren't blowing up, it was just playing the explosion animation
    • Thanks to RocketAssistedPuffin for the bug report
  • Don't show galaxy map link colours during the game lobby
    • Thanks to RocketAssistedPuffin for reporting
  • Put in some protection logic for preventing nullrefs in UpdateSquadStatusFromEntity, and code that will give us a better idea where the nullrefs are if we didn't get them.
    • Same for UpdateEntitiesShownAtPlanetInternal on galaxy map planets.
    • Thanks to Badger for reporting.
  • Carrier starships can now build far more drones, and build them faster at each mark level the carrier goes up.
    • The astro train carrier also builds more drones now, and the non-carrier-style astro train no longer tries to build drones.
    • The marauder outposts also now build drones faster at higher mark levels.
  • Allow the Nanocaust to still find targets after the AI king is dead
    • Bug report by HeartHunter
  • Fixed it so that now the human home command stations in the REAL GAME actually spawn away from wormholes. In the prior release's update, we only corrected that for the tutorial map generation!
    • Thanks to RocketAssistedPuffin for reporting and providing detailed saves.
  • Fixed a bug where cloaking points would actually regenerate even while the ship was not fully decloaked yet.
    • Thanks to RocketAssistedPuffin for reporting.
  • The wording on the Raptor special spawn-camping ability is now more clear.
    • Thanks to HeartHunter7 for suggesting.
  • Wormholes can now spawn between 25% and 75% of the way to the outside of the gravity well, rather than 30% to 90% of the way to the outside.
    • This prevents issues with scouts that want to run to the outside of the gravity well upon entering a planet not being able to get very far, and it also makes travel distances between planets slightly smaller on average.
    • Thanks to RabidSanity for reporting.
  • When entities have attack orders, hovering over them will now show what they are set to attack in the tooltip. If they are just auto-firing, it won't show anything, though.
  • If a ship is autotargeting other ships, you can now see what it's doing in the tooltip hovering over it. Up to two of the ships it is targeting.
  • Add some new optional XML fields for Mercenary groups: primary_strength_aip_multiplier, secondary_strength_aip_multiplier and tertiary_strength_aip_multiplier. So if you define (say) a group to summon 500 primary strength with a 10 AIP multiplier then you get 500 + currentAIP * 10. This allows summoned mercenaries to be scale as the game goes on. Otherwise it's very hard to make Mercenaries useful in the late game but not ridiculously strong in the early/mid game. If you are balancing your own Mercenary company, I would suggest putting more of the strength budget into the AIP multiplier.
    • Added in particular for the fastest puffin in the west, since noone else has assumed the mantle of Mercenary Maker
  • As sometimes happens with multithreading issues, we're not really sure WHY this was happening, but we know that it was and we're pretty positive we fixed it.
    • Basically, ships could wind up being told to autotarget ships that were on the wrong planet, and then would shoot at them. This led to many odd behaviors, as well as a lot of wasted CPU.
    • This may have mostly been from ships moving between planets, it's hard to say; in those instances, it now recognizes the disconnect and simply stops targeting the ship that's now on another planet. This is a valid case that gets done away with.
    • The other issues may have been some cross-thread mixing of array data somehow, and we've simply rearranged the code some to try to prevent that sort of thing. That seems to have worked, although we weren't super successful actually catching it in the act anyway. At least it's easier to read, now, either way.
    • We're also no longer persisting ship autotargeting data to disk, although we are still persisting it across network syncs (of course). This should make savegames a slight bit smaller in some cases.
    • Anyhow, this may have been one performance issue in certain long-running savegames, we're not sure. It's an improvement, either way.
    • Thanks to Ovalcircle for reporting and for the super useful savegame that let us constantly repro this.

Balance

  • A TON of balance work has been done, making ships in general do about 10x less damage than they did before... except for a lot of the fleetships, which were already a lot lower than the larger ships. These now do something like half or two thirds of what they did before, or in a few cases very close to what they did before.
    • Overall the idea is that battles should actually last more than an instant now, and in particular the Tesla Turrets have been heavily nerfed so that they don't eat everything.
    • This is probably an appropriate range for ships in terms of how fast they kill fleetships, but it may be that starships and other large structures now last too long. Not really sure, we'll see. Hopefully the game doesn't become too slow-feeling from this, but rather just slow-feeling in spots that we can correct.
    • This may have even further marginalized snipers, it's hard to say. If anyone wants to fiddle with their balance, please feel free to tell us what you find.
    • Thanks to Badger, HeartHunter7, and RocketAssistedPuffin for various reports leading to these changes.
  • The squad caps for all of the player fleetships have been tripled.
    • This doesn't affect the AI at all, or other factions, but it gives the player a LOT more to work with in terms of churning out lots of ships that cost metal and can do damage, etc. It should make progress far easier to make than before, even with the lowered damage amounts on ships. Players just had too few ships, period, before.
  • Player ships will no longer downgrade themselves to the "current" mark level of the player's ships if somehow the player has a higher-mark version of them.
    • This is particularly relevant for drones that are spawned, but also for zombies, etc. This changes a lot in terms of power on the player side (doesn't affect AIs or other factions, since they don't use this logic anyway).
    • Thanks to Badger for reporting and for the save.

No More Savegame Breaking For Now

  • When deserializing a world fails, it now gives a better error message, and also makes sure to clean out WorldDeserializingErrors.txt before writing to it.
  • Added a new LookupSwap feature to our core engine, which lets us change the names of game entities without breaking old worlds... so long as an entry is made in the LookupSwaps folder for them.
    • The xml files are stored in GameData\Configuration\LookupSwaps.
    • An entry for renaming a GameEntity might look like this:
      • <swap name="Fortified TeslaTurret" new_name="FortifiedTeslaTurret" />
    • If you rename an entity, then all its systems also need to have swap entries that rename the entity-based parts of their name, like so:
      • <swap name="Fortified TeslaTurret_TeslaCoil" new_name="FortifiedTeslaTurret_TeslaCoil" />
    • And hooray, now we're no longer locked into specific xml entry names if we have typos or in general want to rename ships!
    • Because of this addition, at this point we are probably not going to break savegames anymore after all. Certainly not casually. Too many good savegames for testing and bug repros have been coming in, anyway!

Version 0.762 Spreadshot

(Released August 28th, 2018)

  • Savegames should be okay in this one, actually. We just were working on bugs and balance.
  • Fix a null reference when enabling auto-kite.
    • Thanks to HeartHunter and rocket assisted puffin for the bug reports.
  • Finally give the user some feedback when they win the game. It's not great feedback, but it's something, and the game now plays the Victory music. There are still some issues with this, for example the "You Won the Game" text in the resource bar scrolls off the edge of the screen.
    • A lot of people have complained about this one
  • The game now properly takes into consideration damage reductions based on ships being further away from their targets when there is an incoming damage modifier of that (such as the fortified tesla turrets, etc).
    • Previously, ships would just sit outside the range and not actually shoot at them, but that should no longer happen.
    • Thanks to Zharmad for reporting.
  • Now the game will complain about various types of AttackDistance based damage modifiers if they are set up in a way that will bork the AI or make for targeting paradoxes. Nothing was actually set up that way, previously, but it's just future-proofing for modders (and ourselves if we forget).
  • Fixed a bug with incorrect overkill detection against squad-based ships since the start of the era of discovery.
  • Fixed some lack of clarity with a few variable names that are shot-specific but could be confused as being more generalized. Target is now Target_IfIAmAShot and so on.
  • Added post-deserialization logic tree that drives all the way down to entity orders, thus letting us belatedly link up some things.
  • The game now keeps track of the amount of attacker damage incoming for a given entity, rather than the count of attackers.
    • This is now used in order to prevent massively overkilling targets, and is now used in place of the "even out attackers" logic to make it so that it's "even out damage" instead. Or in the case of priorities, evening out the damage after choosing not to overkill.
    • It does this in a rolling fashion that won't let stale data in there.
    • Thanks to RocketAssistedPuffin for reporting.
  • AI update: the AI ships will no longer retreat if there's a king unit present on the planet they are attacking unless they are outnumbered like 20:1. This makes them much more persistent at winning the game if they're not after you with overwhelming force at the time.
  • Show current Hull/Shield values in the tooltip, not always the max hull/shields. Otherwise you had to try to calculate what (say) 35% of 40K is in your head quickly, which isn't much fun.
  • Fixed a bug where it would throw an xml exception on load anytime we adjusted the default_should_override_saved_if_older_than_version on keybindings.
    • Thanks to Ovalcircle, Badger, RocketAssistedPuffin, and windgen for reporting.
  • Altered the game to use Ctrl+Num instead of Shift+Num for setting control groups. Aka to be like every other RTS, including AIWC.
    • Thanks to chemical_art, Draco18s, Badger, and zeusalmighty for suggesting.
  • Fixed up the tooltip for the control groups button in the dock so that it tells you the correct keybinding to use even if you've rebound the keys.
    • Thanks to RocketAssistedPuffin for reporting.
  • Fixed a bug where queue-based ship production was being limited by whether or not the planet of the dock/constructor was hostile or not. It would prevent mobile docks from building stuff on enemy planets, for instance.
    • Thanks to zharmad for reporting.
  • Selecting a hacker will now open the Hacking Menu instead of the Science menu
  • Fixed a bug where all ships (yours and the AIs) were mistakenly able to target each other even when they were cloaked, thus leading to ships chasing cloaked ships. Now they can't target them, and lose target on them if they already had targeting on them.
    • Thanks to RocketAssistedPuffin for reporting.
  • Fixed the selection ring scale for all the various Arks to be what they were pre-pivot. It was woefully undersized in the current version, leading to them being very hard to select.
    • That is what the size_scale attribute does, if anyone else is seeing ones they want to tweak further.
  • Added a constructor name and description for Gyrn.
    • Also made the constructor names for the other constructors more brief.
  • Any ships that have the ability to build via build menus now show up as constructors that will make them appear on the sidebar.
    • Thanks to RocketAssistedPuffin for reporting the need for this.
  • Fixed the BuildingShipsInternally metal_flow to be properly on the actual entity definition for Gyrn, rather than accidentally under its weapon system. This had been preventing it from working properly, previously, as well.
    • Thanks to RocketAssistedPuffin for reporting.
  • When hovering over a constructor in the docks menu, it now shows you the BuildingShipsInternally speed in metal per second there, too.
  • When the throughput of BuildingShipsInternally is missing or less than 0, the sidebar now skips showing you what would otherwise be a builder (useful for those things that become builders at higher marks, like Gyrn).
  • Fixed a bug where pausing construction queues gave a message saying it was re-enabling the queue.
  • Fixed the spacing of the second column in the tooltips so that shields values larger than 9 million can show without overlapping Armor. Also gave a bit of extra room for the hull column.
  • Fixed a bug where you could drive yourself into negative metal using matter converters.
    • Thanks to RocketAssistedPuffin for inadvertently showing us his sneakiness on this. ;)
  • Matter converters now stop producing energy while your stored metal is zero.
    • This is true for any ships that have a negative metal production.
    • It also now shows the icon background for it having a problem on its gimbal when this is the case.
  • When a ship is disabled, the reason for that is now shown in red at the bottom of its tooltip; before it wasn't always clear why it was disabled.
  • Put in better debugging for any sort of modder command errors that might pop up, and also made it so that they won't execute over and over.
    • Note that this hasn't actually solved the core issue yet, but it will help us find it next release.
    • Thanks to HeartHunter7 for reporting.
  • Raid Starships (human and AI) now use Fusion Bolts instead of Plasma Bolts for their weapon. This is giving them a bomber-like ability to bypass the personal shields of enemies, making them actually good at what their name states they are for.
    • There are still more changes needed for the raid starships and many other ships; those are a work in progress. But this is a step in the right direction.
    • Thanks to zeusalmighty for reporting.
  • Tachyon Sentinels now have vastly less hull health and a bit less personal shielding. Bombers and raid starships and similar will take them out quite fast now, but other ships will still take a while (not SO long, though).
    • Thanks to zeusalmighty for suggesting.
  • Wormhole Sentinel range cut from 12000 to 3200 to better match what its description says.
    • Thanks to RabidSanity for reporting.
  • MLRS Turrets, Corvettes, and Guard Posts have all had their base damage reduced quite a bit, to make them not so overwhelming.
    • The descriptions on the turret and guard post now match that of the corvette, and they also now have the picking-off-stragglers bonus ability.
    • Thanks to RocketAssistedPuffin for reporting the balance issue with corvettes.

Version 0.761 A Badger And A Puffin

(Released August 27th, 2018)

  • All savegames are going to be broken in this one, too, just a warning!
    • We're just going through a very change-heavy period in the short term. Thanks for bearing with us!
  • Turn the Control Group Rally green when active
  • Some minor tweaks to the tutorial
    • Thanks to RocketAssistedPuffin and RustyBucket for the suggestions
  • Enable auto-kite, or something like it. This is available as a Setting
    • Add new "Kite Master" fleet type to both Hunter and Warden fleet. Their units will auto-kite against you
  • Using the "select build tab" (B key) no longer selects all the builders, since there's no reason to do that. Same with the tech and hacking tabs.
  • Units that cannot move can no longer be engine-stunned, and units that have no weapons can no longer be reload-slowed. These cluttered up the UI as well as making for useless work on the CPU (though a trivial amount).

Bugfixes

  • Don't allow Hacking Points to be obtained from an AI planet
    • Thanks to RocketAssistedPuffin for reporting
  • Fix a bug with Dark Spire Vengeance Strike notifications
    • I think Puffin mentioned it?
  • Human Command Station Home Cores no longer spawn automatically, to avoid confusion. We'll later make a "do you want to continue" dialog that lets you spawn one on a planet of your choice that is player-controlled or neutral, or formerly your planet.
  • Shield Generators are now buildable
    • Thanks to RocketAsssistedPuffin for contributing this fix
  • Fix a bug where units could heal to > 100% health
    • Thanks to RabidSanity for reporting
  • Fix a bug where endless reconquest waves were spawning.
    • Thanks to Ovalcircle (and possibly others) for reporting
  • Hacking points used against this faction is now tracked in the Faction object, since minor factions can also be hacked
  • Fix a number of bugs in the reconquest wave code.
    • Prevent truly enormous reconquest waves from spawning, due to a bug where each reconquest wave was never clearing the previous budget
    • Fix an exploit where the player could deliberately leave a low-mark planet undefended, let the AI reconquer it, then clear out the planet again. When done repeatedly this could deplete the AI's reconquest budget. Now put a cap on how frequently the AI will try to recapture a given planet (no more than once every 10 minutes).
      • Thanks to a number of people for reporting this.
  • Make nannocaust hacking cost hacking points
    • Thanks to RocketAssistedPuffin for observing
  • Don't show two raid starships in the Tech menu anymore
    • Thanks to RocketAssistedPuffin for reporting
  • The Ark can now be upgraded, as can your metal generators.
    • Thanks to RocketAssistedPuffin for doing all the work/sleuthing for Ark upgrades
  • The AI can now actually build its Raid Starships. Previously it had a built_by of the human starships bag, but it needs to be in a built_by that the AI uses (in this case BasicGuardianDrawBag). Not all AI ships have to be in a built_by category, but if they aren't directly pulled by either that or by "tags," then they won't ever appear.
  • Adjusted the ModderCommand game code to take a string instead of an integer/enum, because that's the only way that modders can add things to the game truly obliviously of one another. Before the system was going to make them share a central enum, but that would have led to an inability to compile when there are multiple complex mods, and them having to use our same central DLLs. The strings approach is great so long as something that is suitably unique is used, and so long as modders don't make any frequent commands have absurdly long strings.
  • If the assistance range is blank on an entity that has a metal flow set up that needs an assistance range, it now throws an error on startup so that the modder or developer knows they forgot that bit.
  • The visuals for AOE effects like lightning attacks should now scale up properly to actually match the scale that is being used in-game. Been meaning to do this for a long time.
    • Have not been able to test this yet, though, so if it's wonky please let us know.
  • If the AOE size of something that detonates immediately is smaller than the firing range of the same unit, then it will now complain on startup so that you know to fix this, because it leads to strange results.
    • Thanks to RocketAssistedPuffin and Ovalcircle how useless the Lightning units were when those values were incorrect.
  • Fixed some ships that were supposedly able to claim neutrals but really were not; now they don't even pretend they can.
  • Fixed a bug where only things that were specified as NOT being able to be built on enemy planets could be built there; whoops.
    • Thanks to RocketAssistedPuffin, Ovalcircle, and HeartHunter7 for reporting.
  • Put in a fix that definitely prevents the sudden migration of wormholes when you swap between planets, and which might prevent the same with turrets and similar immobile ships.
    • However, if you still see ship icons moving unexpectedly around, a savegame and repro case would be very welcome.
    • Thanks to HeartHunter7, Badger, Ovalcircle, and RocketAssistedPuffin for reports.
  • Give Carrier Starships drones to spawn again. Currently they get V-Wings and Fusion Bomber drones
  • Previously, the cloaking system was not explained on ships! Now it explains it like any other system, and shows how many cloaking points it has, etc.
    • Thanks to TheVampire100 for reporting.

Balance

  • Balance pass: Nerf fleetship damage to give turrets/Starships a stronger differentiation. Significant nerfs to MLRSs. Buffs to Starship damage.
    • Thanks to a number of people for tipping me off about various OP units, including (but not limited to) RocketAssistedPuffin, Zeusalmighty, ovalcircle, zharmad, TheVampire100, and others whose names have doubtless escaped me
  • Nerf the armor penetration of Concussion Corvetters to be more effective against fleetships than guardians. May need further nerfs
    • Thanks to Zharmad for pointing this out
  • Make more Dark Spire ships spawn on an attack
    • Thanks to someone on Discord for pointing out that Dark Spire was boring.
  • The human home command station now gives 50k energy instead of 30k, to make energy less tight at the start of the game. Please let us know if it's still too tight.
    • Thanks to Vinco for suggesting.
  • Give the Dyson Sphere its own unique units, and redo the spawning logic
    • The Dyson Sphere now has 4 units. 2 Fleetships, the Sentinel and Defender (unlocked at all intensities). 1 Medium starship, the Bulwark (intensity > 4), and 1 Large starship, the Bastion (intensity > 7).
    • The spawning logic is more similar to AIWC, where it just will throw units out when it has the resources to do so.
    • Almost certainly needs some balance
  • Give Scout Starships cloaking again
    • Thanks to Mcloshiv for the bug report
  • Give the Rorqual Hegira bubble shields
    • Thanks to RocketAsssitedPuffin for the bug report
  • New logic has been introduced into map generation that now keeps the human home command station much further away from wormholes if at all possible.
    • Thanks to Vinco for suggesting.
  • Engineers now have about 5x as much repair speed as before, and same on construction-speed-boost.
    • Additionally, the range from which they and rebuilders can do their work has increased over 5x.
    • Also, both engineers and rebuilders now have about 1.5x as much move speed.
    • Rebuilders are also now able to increase in mark level, like the engineers do.
    • And lastly, starting at mark 3, engineers and rebuilders now gain cloaking, making them a lot more buff. The question is... is it worth that science cost to you?
    • Thanks to Mckloshiv for all these suggestions.
  • Fixed the Orchid Ark's assistance range being set to 0, and thus it not working at allo for assistance purposes.
    • Also triple the speed at which the orchid does its repairs and whatnot, which makes it the equivalent of a mark 4 engineer now on mark 1 of the orchid.
    • Thanks to RocketAssistedPuffin for suggesting.
  • The assist range of the mobile space dock and merc engineers have been increased.
  • Marauder outposts no longer pretend that they can repair the engines of friendlies (they never could).
  • All of the ships with tesla coils now have a smaller range of 2800, but a much larger AOE range of 2800 instead of the prior 500. Now when they fire, they should actually hit their targets.
    • Thanks to Ovalcircle and RocketAssistedPuffin for reporting.
  • Ships are now allowed to have zero multipliers on their damage modifiers; making them entirely immune to damage under certain conditions, for instance.
  • Dark Spire Eidolon now also has the weapon jammer ability on its tesla coil.
  • Military Command Stations of the player now have missile launchers.
    • Thanks to TheVampire100 for suggesting.

Ships Reinvented

  • Lightning Guardian is now the Fortified Tesla Guardian.
    • Close range brawler that prevents enemies from hitting it if they are out of its range.
    • Basically it has what used to be called Radar Dampening.
  • Lightning Turret is now the Fortified Tesla Turret.
    • Very short range AOE blast, but protected against attacks from outside its range.
    • Exact same thing as the guardian.
  • Lightning Corvette is now the Inhibiting Tesla Corvette.
    • Crowd control meets fire suppression.
    • It has the new Weapon Jammer ability, with 8 seconds at mark 1 and +2 seconds per mark higher, on ships with armor of less than 101mm.
  • Sniper Turrets are now Tritium Sniper Turrets.
    • Designed to obliterate ships with low radiation shielding from any distance.
    • These have a pathetic base damage, but then a major multiplier against anything with an albedo of at most 0.3.
    • Thanks to TheVampire100 for inspiring this change.
  • Sniper Starship has become the Tritium Sniper Starship.
    • Designed to obliterate ships with low radiation shielding from any distance.
    • These have poor base damage, but then a major multiplier against anything with an albedo of at most 0.3.
    • These ALSO now have a secondary ballistic cannon, which is on the weak side for a starship but good for giving it some close-in protection.
    • Thanks to TheVampire100 for inspiring this change.
  • Sniper Guardian has become the Tritium Sniper Guardian.
    • Designed to obliterate ships with low radiation shielding from any distance.
    • These have poor base damage, but then a major multiplier against anything with an albedo of at most 0.3.
    • These ALSO now have a secondary missile launcher, which is on the weak side for a starship but good for giving it some close-in protection.
    • Thanks to TheVampire100 for inspiring this change.
  • Scout Starships are now Sentry Starships.
    • Provides scout-style intel, and plays a massive role in hunting down cloaked enemies.
    • The tachyon fields these generate is now 10x larger than it was before.
    • These also now have a ship cap 3x larger than before.
    • Their speed was a bit on the high side, though, and has been cut down to a bit more than half of what it was before.
    • These have been renamed to reflect the fact that they're really much more than just scouts at this point, and occupy the main decloaking role.
    • Thanks to zharmad for suggesting.

Version 0.760 Only The Start of Discovery

(Released August 24th, 2018)

  • All savegames are unfortunately broken because of the extreme number of changes that have been made to the structure of the game.
    • With a lot of the changes, old savegames would not have made much sense anymore, anyway. Goodness we will stop doing this at some point before Early Access!
  • Exogalactic Strikeforces have been redone to make them closer to AIWC style Exos. The budget for an Exo is now split across Fleetships, Guardians or ExoLeaders (giant scary units).
    • Exos no longer stack all their units on top of eachother
    • Broken Golem Exo Strikeforces now start much weaker
  • Add Shark options for the AI. Shark Options give the AI a bonus when they take one of your command stations (only the AI, not any other faction), so once you start losing the AI is much more able to finish the job.
    • Shark A grants AIP to the AI when they kill a command station
    • Shark B grants the Hunter Fleet reinforcements on command station death.
  • Nerfs to the Dark Spire to prevent the Dark Spire from casually conquering the galaxy under the right (wrong?) circumstances
  • Added 232 new planet names, mostly from older science fiction literature.
    • Removed two planet name duplicates that we had, now leading us to a total of 713 possible planet names.
  • Realistic and Simple map types now have their planets a bit more spread out.
  • Base-Oriented Warden Fleets are now constrained to camp at a Warden Fleet Base and to get reinforcements at a Warden Fleet Base. So if you can destroy nearby Bases then they will have to come from further away to fight you.
  • Marauders that are allied to any particular faction (ie player allied or ai allied) are no longer allowed to build Mark 3 outposts (and thus Raiders) on planets owned by their allies. So for player-allied marauders, if you want to help the Marauders build a fleet then it will require you to take more planets (and thus have higher AIP).
    • Taking a planet with Mark 3 outposts will downgrade those outposts to Mark 2.
  • If you have unit remains on a planet without enemy units, allow them to be repaired immediately.
    • Thanks to HeartHunter7 for the suggestion.
  • A few balance taps for Devourer, Nanocaust, Macrophage, and Dyson Sphere to make them at least marginally usable right now. Nothing disappoints like watching the Devourer die in 40 seconds.
    • Much more work will need to be done, but these aren't obviously broken out of the box now.
  • Reconquest waves only get launched if they are strong enough to capture their target. So if there are lots of weakly/undefended planets, the AI will rapidly launch a series of strikes to take the planets back. If you are turtling and all your planets are heavily defended, the AI will save up until it thinks it can break your defenses.
  • Dark Spire Vengeance Generators can now be hacked to cause a Vengeance Strike (wherein every Vengeance Generator in the galaxy will simultaneously attack). So if you want to cause chaos in the galaxy, this is a good way to do so.

Tutorial

  • The tutorial works again. It's not complete for all features, but it's functional!

Objectives Tab

  • There is finally an objectives display again! Though it's not as complete as it was before, we're going to be adding to that soon.
  • New core data has been added to the game regarding objective categories, and then objective generators.
    • This is all data-driven, and lets us as well as modders add custom objectives into the game that will be seen by players as context dicatates.
    • Essentially this lets us keep our complete freedom of how to define objectives using as complex and arbitrary of code as we like, but then also makes it no longer tightly-coupled to our central codebase.
    • The new setup is a lot like the map types, essentially.
  • The objectives tab now tells you about the following things, in categories:
    • PrimeObjectives
      • Destroy Known AI Kings
      • Find Undiscovered AI Kings
      • Scout unexplored planets
    • Critical Capturables
    • Critical Destructibles
      • Explore Galaxy To Find Instigator Bases
      • Destroy Instigator Base on [planet]
    • Resources
      • Collect Science on [planet with science you can collect]
    • Beginner Tips
      • Capture a few early planets for resources (if you have < 3 planets)
      • Defend [planet] from Waves (for each planet with an adjacent Warp Gate)
      • Instructions on Gate Raiding (if you have >= 3 planets with adjacent Warp Gates)
      • Spend Science (if you have > 8K science)
    • New Fleetships
    • New Starships
    • Golems For Capture
      • Explore Galaxy To Find Broken Golems
      • Repair Broken Golem on [planet]
    • Mercenary Beacons
      • Explore Galaxy To Find Mercenary Bases
      • Contact Mercenary Beacon on [planet]
    • Other Factions
      • Find Nanocaust
      • Destroy Nanocaust Hive on [planet]
      • Fight Nanocaust Invasion
      • Explore Galaxy To Find Lost Spire Frigate
      • Rescue Lost Spire Frigate on [planet]
      • Explore Galaxy To Find Dyson Spheres
      • Free Dyson Sphere on [planet]
    • Other Capturables
      • Explore Galaxy To Find Risk Analyzers
      • Handle Risk Analyzer on [planet]
      • Capture Zenith Power Generator on [planet]
      • Reclaim Ark on [planet]
    • Other Destructibles
      • Explore Galaxy To Find Astro Train Depots
      • Destroy Astro Train Depot on [planet]
      • Sensor Scramblers
    • With every objective, and category, it gives you advice on how to proceed in a generalized fashion as well as potentially some tips for your specific circumstances.

An Entirely New System of Units of Measurement

  • A new system of units of measurement for statistics on every craft has been created: https://wiki.arcengames.com/index.php?title=AI_War_2:_Units_of_Measurement
    • As a player, you don't even need to read that page, nor do you need to understand each unit of measurement.
    • However, as a modder or developer it helps you to come up with appropriate values for each field for each ship so that they will behave as expected in-game.
    • For our more science-minded players, this page also provides a handy reference with real-world numbers behind it that properly addresses any lore questions that would otherwise be glossed over or seem inconsistent if you didn't know that the mass scale was logarithmic, for example.

Revised Mechanics

  • Implemented the new "8 main physical stats" for all ships: https://wiki.arcengames.com/index.php?title=AI_War_2:_Units_of_Measurement
    • Balance on these is preliminary at best, right now.
    • These are not actually utilized super heavily by the game mechanics yet, since a lot of the new game mechanics are not yet in place to take advantage of these.
    • Main new ones all over the place are armor, engine, albedo, and mass.
  • Cloaking and tachyon mechanics have been revised in a new way that is very similar to what was in the game last version, but a little more refined and using the new physical stats.
    • Completely untested, so far.
  • Tractor beam mechanics have been revised in a new way that is very similar to what was in the game last version, but using the new physical stats.
    • Completely untested, so far.
  • Gravity field mechanics have been revised in a new way that is very similar to what was in the game last version, but using the new physical stats.
    • Completely untested, so far.
  • Bubble forcefields has been revised to be basically identical to what was in the game last version, but using the new physical stats.
    • That said, all forcefields now have regen on them.
    • Completely untested, so far.
  • Personal shields have been implemented as a major new mechanic, based on the same underlying logic as the bubble forcefields for the most part.
    • These have even faster regen on them, making them kind of like shields in The Last Federation.
    • Completely untested, so far.
  • Engine stun has been implemented as a completely overhauled concept of what engine damage/health used to be last version and in AIWC.
    • The new version uses the physical stats, and is designed to give a more nuanced range of results from engine damage without the game-breaking nature of engine effects that caused so many ships to have infinite engine health in the first game.
    • Completely untested, so far.
  • Paralysis has been revised almost completely, as well, with much the same goals and moving it into using the physical attributes, too.
    • Completely untested, so far.
  • Ion damage has been absolutely re-concepted from the ground up. The same mechanics can be created, more or less, based on how you set up the xml values for this system. But it's a lot more flexible than before, and less on/off. A lot more weapons other than just the big bad ion cannons might actually want to use this in a different fashion at some point in the future. Mainly secondary weapons, probably.
    • Completely untested, so far.
  • The underlying nature of hull health and how it relates to multiple subsquads has been revised.
    • This also affects vampirism, self-damage, and repairs to ships to some extent, though fairly mildly on each.
    • Mostly untested, thus far.
  • All of the immunity-to-this-and-that attributes have been removed from the game and from all ships, except for one: immune_to_all_damage.
    • That one isn't used at the moment, but is useful if we want to create an immortal object for some reason, so it stays.
    • All the rest of them are now redundant and handled either by the physical properties of ships, or by special abilities in a few rare cases (passing through forcefields, for example).
  • The concepts of "defense type" (structure, polycrystal, whatever) and of weapon bonuses against specific defense types (bombers get 10x vs structures, etc) are all now gone.
    • The physical properties take the place of this, although thus far most of the mechanics that will take full advantage of this are not implemented yet. So in the very short term this got more bland, but we'll be fixing that up asap. One step at a time, though, and the first was getting the data in there and converting all the existing special mechanics to use that data.
  • shield_points are no longer an optional xml attribute of ships, but they can still be zero.
  • Given that the nature of how metal is produced has changed entirely from the last public version to now (before it was not literally taking the amounts from ships, but instead generally basing it off some planet stats), we've had to rebalance metal quite a bit to get it back into the same ballpark it was before. The way that units generate metal, and how much they generate relative to one another, seems about right now, but will need further tuning.
    • As an aside, with this change it really makes it so that losing your home human settlement or cryo pods HURTS. A lot of metal production in the early game comes from them, which is by design.
  • Given the huge number of changes in how we're storing damage values (as of the last version of the game, down below, internal release only), we had to make up completely new balance numbers for shot damage.
    • A lot of the reason was that when we tried to normalize out the old data (which came from several different sources including some xml and some AIWC spreadsheet values), we got wildly incorrect data because something was up with our algorithm. Balance wasn't exactly super refined before, anyway, and we're changing so many mechanics that it's even less so now, so we just made up new best-first-guess numbers so that ships will kill one another in a reasonable amount of time, but not overly fast or slow. Most battles between two squads of identical units should take about 10 seconds for the smaller ships.
  • The AI Home Command Station is now properly called the AI Overlord.
    • The AI Overlord now has a Phase 2 that is mobile that it should spawn immediately on death. This is much like the Avenger plot from AIWC, but it's built in as a core thing here.
  • There is now a Human Home Command Station Core that gets spawned if you lose your home command station, even in single player.
    • This is based on the concept from multiplayer in AIWC, but works the same in both games now. It lets you keep playing after you lose, if you wish, but with some penalties.
  • A variety of the civilian ships and docks can now be built on enemy planets, thus making beachheads viable.
    • There was previously a bug making EVERYTHING buildable on enemy planets, so it was viable previously anyhow. Since that bug is fixed, if there are any missing things that need to be buildable in enemy territory, please let us know.
  • Hacker unit has been added, finally, under the infrastructure section along with engineers and science labs and the like.
    • This lets you gather hacking points, as well as perform hacks against the enemy.
  • Mechanic change: now when a ship has a multi-shot or multi-beam attacks, it cannot focus-fire multiple shots into a single target. Each shot must have a unique target, or else it simply fires fewer shots in that salvo.
    • This shift helps make these units stand out more from their single-shot brethren; rather than simply having a fixed amount of DPS that they can optionally divide into multiple targets, they instead have a DPS that is greater when more targets are present. This helps to legitimately establish a more interesting role for these ships.
  • Shots now move dramatically faster, and don't "home in" on targets anymore. A shot that is fired is still going to hit unless the target moves off of the current planet, though.
    • As part of this, the visual tails for shots are never quite so over-dramatically long anymore.
    • This change is primarily for purposes of making things visually look better, but it definitely does also affect balance as well since it prevents ships from getting off so many salvos before incoming shots hit them. This is also by design.
  • Metabolization has been added as a new ability in the game. This is a lot like the Zenith Reprocessor ability in AIWC.
    • If you deal enough metabolic damage to a ship when you're killing it, you get 10% of its metal cost immediately added to your own stores, maximum 5000 per death.
  • A new count_to_spawn_on_death can be paired with spawns_on_death in order to create AIWC-Hydra-style units.
  • Added a new immune_to_all_damage_for_seconds_after_creation tag for entities that allows for them to be completely immune to damage for a while after being created.
    • This is now used to give the Human Home Command Station Core a full four minutes of invincibility after your Home Command Station (or another Core) collapses into this.
    • This way you have some time to try to get things back on track and to get your command station out of the hot spot it's in, but we don't have to do anything funky in AIWC like moving you automatically to an ally's planet (and in solo play, here, you may well not even have an allied planet of course).
  • A new max_engine_stun_seconds has been added to ship systems, which lets us have engine-slowing ships that make targets slower without outright stopping them.
    • This will be used by V-Wings, and is different from what the Spiders do.
  • There is a new Weapon Jammer ability that can be given to ships, which lets them add extra seconds onto the reload speed of ships that they hit.
    • The overall maximum extra reload seconds that can be added is 20, but that number can be set to be lower with the max_enemy_weapon_reload_slowing_seconds on the weapon that has this ability (and it probably should be, in general).
    • The ability is defined with base_enemy_weapon_reload_slowing_seconds_per_shot and added_enemy_weapon_reload_slowing_seconds_per_shot_per_mark.
    • The ability has a further enemy_weapon_reload_slowing_to_armor_mm_less_than field, which makes it only work on enemies with certain armor thicknesses.
  • Added a new Fusion Reaction ability:
    • Shots from a weapon with this do X% of their damage directly to the hull of their target, bypassing any personal shields.
    • Uses: base_percent_damage_bypasses_personal_shields and added_percent_damage_bypasses_personal_shields_per_mark
  • Mercenary Beacons must be hacked before they can be used
  • A new system has been implemented where you can specify outgoing damage modifiers on weapons, and incoming damage modifiers on ships, using the nodes outgoing_damage_modifier and incoming_damage_modifier, respectively.
    • There is a huge amount of flexibility in this system, but if you're modding just do bear in mind that not everything possible makes the most sense.
      • For instance, stacking too many bonuses on ships is probably not a good idea. One, at most, ought to do plenty fine! Not everything even needs one! It's a matter of whether or not we can increase the interest of a ship's role with this, not whether we can make yet more stuff to read and more mental gymnastics for the player using them.
      • Also of note, it's possible to have both penalties and bonuses that you put on these. People tend not to like penalties unless it's on an enemy target, it's a psychological thing, so avoiding that when possible is a good idea. Trying to keep outgoing multipliers > 1 and incoming multipliers < 1 means bonuses.
      • There are a variety of things you can check on the incoming damage side that simply make no sense to be there. Why would we care how far much armor the attacker has, for instance? Mostly these stats should be used for outgoing damage, partly for this reason, but also just because it's easier to keep track of.
    • Criteria that can be checked using the based_on xml attribute:
      • MaxHull: how much max hull health the defender(outgoing)/attacker(incoming) has
      • CurrentHullPercentage: what percentage (0-100 as integer) hull health the defender(outgoing)/attacker(incoming) has
      • MaxPersonalShield: how many max shield points the defender(outgoing)/attacker(incoming) has, but it reads as 0 if it's a bubble forcefield
      • CurrentPersonalShieldPercentage: what percentage (0-100 as integer) shield points the defender(outgoing)/attacker(incoming) has, but it reads as 0 if it's a bubble forcefield or there are no personal shields
      • AttackDistance: how far apart the attacker and target are at the time of shot impact
      • CurrentSpeedIfMoving: current speed of the defender(outgoing)/attacker(incoming), or 0 if not moving
      • Armor_mm: armor of the defender(outgoing)/attacker(incoming)
      • EnergyUsage: energy consumption of the defender(outgoing)/attacker(incoming)
      • Albedo: albedo of the defender(outgoing)/attacker(incoming)
      • Mass_tX: mass of the defender(outgoing)/attacker(incoming)
      • Engine_gx: engine strength of the defender(outgoing)/attacker(incoming)
      • TimeAtPlanet: how long the defender(outgoing)/attacker(incoming) has been at this planet.
    • They can be compared based on the comparison_type xml attribute:
      • LessThan is just <
      • GreaterThan is just >
      • AtMost is a nicer way of saying <=
      • AtLeast is a nicer way of saying >=
    • The damage multiplier can be applied selectively using the applies_to xml attribute:
      • Everything: the default, and it's just how much damage is sent over in general.
      • HullOnly gives no bonus against shields of any sort, just against the hull
      • PersonalShieldOnly: gives a bonus against personal shields only, not bubble forcefields or hulls.
      • AllShields: gives a bonus against personal shields and bubble forcefields.
    • You provide a floating-point comparison number in the xml attribute compared_to:
      • This is the thing that you're comparing, for example, the max hull points of the target against.
      • If the [based_on] value from the ship being examined does not pass the [comparison_type] check against that number, then it applies no damage modifier here, basically.
    • And lastly, the "multiplier" float xml attribute states what the actual damage multiplier should be, assuming that the checks passed.
      • There is also an added_multiplier_per_mark attribute that lets you increase or decrease that multiplier per mark level.

Revised Ships

  • Bombers are now Fusion Bombers, with the following description:
    • Unique to the forces of humanity, fusion bombers are excellent at damaging targets with low hull health and high personal shields. This usually means structures.
    • They now start out with 60% of their damage bypassing personal shields, and that number goes up by 5% per mark level of the bombers.
  • All of the other bomber-like ships, including the Nanocaust Anomaly, have also been updated to use the fusion reaction ability.
    • This may well be swapped around in the future, but it fits for now.
  • Fighters are now V-Wings, with the following description:
    • V-Wings are a fighter-type ship particulary equipped for screening longer-ranged forces from incoming hostiles, thanks to their engine-slowing ability.
  • Missile Corvettes have been turned into Concussion Corvettes, with the following description:
    • Specialists at wrecking thin armor, but extremely poor against higher-armor ships.
    • Note that these do not remotely form a "core triangle" anymore, unlike in the prior versions or in AIWC. These, Fusion Bombers, and V-Wings are all now human-only anyhow, so it's a matter of how they handle their workloads and not how they fight one another.
  • Raptors have been updated so that they now have a bonus against ships that have been on the current planet for at most 8 seconds, making them excellent wormhole campers.
  • Snipers have been updated so that they have a massive bonus against fast-moving targets that are actively moving.
  • Laser Gatlings are now Ablative Gatlings, with the following description:
    • Incredibly dangerous against high-albedo ships, using their own absorptive power against them.
  • MLRS Corvettes now also have a bonus against ships with less than 20% of their hull health remaining, making them excellent for picking off stragglers as well as crowd control.
  • Infiltrators have now become Agravic Pods, with the following description:
    • Ridiculously dangerous against ships with high-powered engines. Use to shore up locations where such ships can otherwise slip past gravity and tractor fields.

Ship Icon "Gimbal" Updates

  • Ships now show little circles around themselves when they are selected, making them FINALLY actually visible on the icons when you select them. This is, ironically, how AIWC did it.
  • All of the various "flair" statuses for things like attack-move, defend, etc are now little backdrops behind the ship icon instead of strange tags above them.
    • This is a lot more attractive and more readily visible and readable than before.
    • These all have a black border, but when selected that border goes white. Making the selection status on this pretty similar.
  • Ships now properly show their status on their icon when they are in hold-fire (or otherwise paused) mode.
  • Ships that have not yet been fully claimed now show properly on their icons with a building background.
  • Ships now have a separate health bar for their shields, so you can actually tell better what is happening during a battle now.
  • Attack-move now shows up properly in the statuses of ships, like FRD and so forth do.
  • Immobile ships, and ships that can't either shoot or assist, no longer show FRD status.

UI Updates

  • Ship tooltips now show their shield health separately from their hull health.
  • The percent sign was not showing up properly throughout most of the interface because the font we were using -- Michroma -- did not support it. We're now using a different font -- Titillium Regular -- that looks very similar but does support that, and in fact has more readable text (numbers in particular) in general.
    • The search for a revised font was pretty exhaustive, and the improvement is notable.
  • Updated the font in the lower left part of the UI as well.
  • Updated the natural sizing and kerning offset of the strength icon, hacking icon, energy icon, etc, in their font so that its size does not have to be overriden every time and instead it fits in more naturally with text.
  • Updated the various places that use text to "use extra padding," which makes the text more crisp.
  • Updated the button font to be AudioWide instead of Exo2. This is more thematic and still plenty clear.
  • AudioWide font now used for popup headers, as well.
  • Quantico italics font used for credits screen, and that initial loading font, and the paused notice on the top bar.
  • Geometry Soft Pro Regular A is now used on the sidebar for headers, etc.
  • Fixed an annoying issue where tooltips would often overlap one another rather than properly only ever showing one tooltip at a time.
  • Tooltip backgrounds are no longer semitransparent, and now look much more attractive and modern.
    • We still have plans to add some bits of extra fanciness on these, though.
  • The confirmation screens now use better graphics, similar to the tooltips.
  • The background of the resource bar header is now fancier and stretches the entire width of the screen, too.
    • It also includes new little inset sections where the numbers and text go, which in particular makes it more clear that the metal display isn't just sized oddly.
  • The bottom left bar has also now been updated visually, although it in particular is scheduled for some more visual tweaks to make it really feel right.
  • The four tabs of the sidebar, which previously were above the sidebar, have been split into seven tabs along the side instead.
    • This is actually a lot less overwhelming than the other approach, because it splits out hacking and science, and docks and direct construction.
      • Previously it was pretty hard to find hacking, and the build menu was a giant mess, visually.
    • Additionally, this renames Ops to be Mercenaries, since that's all we have planned for that anyhow and Mercs are going to become more important.
  • Updated the visuals of the sidebars to be vastly more attractive, including much better scrollbars among other things.
    • We do expect to do even more with this, but we're off to a good start with it already.
  • Updated the bottom-left menu to be less wide by removing the ping and reset camera buttons (which were always "coming soon" anyway).
    • This then lets us move that entire menu to be below the left sidebar, and along with that lets the tooltips move down so that they are almost flush with the bottom of the screen. This makes a HUGE difference in how obstructing the tooltips are/feel.
    • This also has a mild side effect of removing some slight distracting clutter from that bottom bar. It makes the more critical components of it a lot more noticeable.
  • Updated the planet hover tooltip to be more attractive, have easier to read formatting, have icons and colorization by resource color, and so on.
  • The information that was displayed about individual units that you could build when you hovered over them on the sidebar was really sparse before. It now shows the full information that you get after a unit is built, but plus also some other construction-specific items.
    • Additionally, it was never showing a per-planet cap properly on the build menu's tooltips. It now does, and makes it very clear if something is a planet cap or a regular cap.
  • Rather than the DPS being shown as a singular number, it now shows the damage per shot and the shot reload times separately.
  • The tooltips for ships now show all of the actual information about what is directly on the ship in terms of abilities -- how much of a resource is generated, what special abilities do, and so forth. This is done in a somewhat-narrative form, with highlighting for the key numbers, and with inline upgrade indicators for changes when looking at a potential tech upgrade. This is very different from the first game, where it just had a lot of techie-sounding markers on ships, and you had to consult the wiki to really know what they meant.
    • In the context of this game, ships in general should not have so many different things on them that their tooltip becomes a problem, anyway. If we start running into problem cases, we can re-evaluate some of this and potentially have a condensed view or something.
  • The system menu (when you hit escape in-game) has been completely redone, visually.
    • The buttons are finally larger, easier to click, and attractive.
  • On the system menu, there is now an About This Campaign scrolling window that currently shows you a list of factions and then some stats for each human faction.
    • We'll be expanding this over time.
  • You can now also see the numbers for the status effects on ships/squads when you hover over them, which is pretty useful so that you know what the heck is going on with something that is negatively affected at the moment.
  • The game will now prefer to report the number of squads rather than ships in the UI, though the number of ships will still be mentioned where possible. The game is balanced at the Squad Level, not the ship level, in any case.
    • Example: Instead of reporting 800 Missile Corvettes, it will now say something like "40 squads of Missile Corvettes (800 ships)"
    • Thanks to Bummeri and RocketAssistedPuffin for reporting
  • When a Hack is ongoing you will get a notification for it with the time left for the hack.

Bugfixes And Structural Bits

  • Give the AI more turrets and fewer non-turret defenses per planet
  • Correctly reinforce only "Alerted" planets, aka those adjoining enemy (or at least, non-AI) planets
    • This seems to alleviate the "Fields of Tachyon Sentinels" problem
  • Put in a fix to prevent a nullref exception that could happen every 30-60 minutes based on a thread race condition.
    • Thanks to HeartHunter7 for reporting.
  • A bunch of scaffolding work has been done to allow for multiple AIs in the game. Having multiple AIs is currently not available because the UI does not allow for it yet.
  • The export of the balance stats csv file works again, and now gives a bit different data.
  • There is now a special entity type of GuardPost, and all the guard posts are assigned to that (and no longer have the tag of "GuardPost", since that is now redundant).
    • Guard posts are now reinforcement points, and guardians no longer are.
  • Fix a few null reference exceptions in the vis code
  • HumanKingUnit has been replaced as a special type with HumanHomeCommand, which is a lot clearer (that it doesn't mean the Ark anymore, which is now a different special type).
    • Related to this, we found a number of places where HumanKingUnit was still being used in an Ark-like way (as a hacker, as a fleet leader), and those are all now fixed.
  • Adjusted the "external data" to never initialize right from the start anymore, but instead to initialize only the first time it is used on an entity.
    • This dramatically cuts down the size of savegames (less than half what it was before from a brand-new save -- 4.3MB down to 1.8MB) and also saves RAM and some CPU when new entities are created.
    • This was only going to get dramatically worse over time as more factions and other custom modded pieces were added into the game, but now that's not an issue.
  • As one might expect in a savegame format with lots of optional fields, a TON of the data per savegame is actually blank. We've now updated the way blank data is stored to be roughly twice as efficient, thus dropping a savegame of size 1.8MB to just 1.01MB.
    • This makes saving faster and more efficient, and saves space on our webserver relating to mantis bug reports, as well as making it so people don't have to zip their savegames just to get them up.
  • The last of the savegame file size improvements is now in place. This brings us down from 1.01MB to 0.875MB -- or really, finishes bringing us down from 4.3MB at the start of this version down to 0.875MB now.
    • This new update stops using direct strings embedded throughout the savegame files for entity internal names and system internal names and similar, and instead writes an array of strings at the start, then writes integers instead of strings later on in the actual writing of the file. It's just a mapping lookup, basically. It's fully future-proof with adding and removing entities types to the same degree that the prior method was.
    • The savings of this system will actually go up dramatically the more entities there are in a given game. The example that we have here is right after game start, but it would be far more than 20% savings in a late-game save.
  • Fix a bug where the Sidebar and Notifications were reporting different numbers of ships on a planet
    • Thanks to HeartHunter7 for reporting
  • Fix a bug where army selection with "M" wound up being additive when it should not have been, which meant that you could wind up issuing unexpected orders
    • Thanks to HeartHunter7 for reporting
  • Fix a bug where control-group-rallied units could wind up endlessly rallying to each other in a circle.
  • The core piece of ship autotargeting logic, ReevaluateUnitOrders, has been moved into a new external open-source class called EntitySimLogicImplementation.
    • Thus more people can contribute to it, if they wish.
  • Right now the logic inside of EntitySimLogicImplementation.FillPotentialTargets() is quite simple, as Badger noticed. To help move towards being able to spruce that up, we've added the following:
    • priority_as_target is now on every entity, with a value from the GameData/Configuration/Balance_PriorityAsTarget xml required.
    • priority_to_protect is now on every entity, with a value from the GameData/Configuration/Balance_PriorityToProtect xml required.
    • priority_as_target is now used for AI's with difficulty > 4 (and everything that isn't an AI) when choosing targets. priority_to_protect is currently not used yet though.
      • Ideally we can later separate out some of that logic onto a permanent background thread with no particular timetable on it like we did in AIWC, and then have it issue commands through the GameCommand interface just like a player does. But for now we can simply make everyone's autotargeting better.
      • There is an importance_metric integer field on the priorities that can easily be used to determine a general level of priority for entities (higher is a higher priority, 0 or negative means ignore). However, these also have names such as ShieldGenerator or IrreplaceableAIPIncreaser and so forth, which means that the AI can actually key off of the priority names if they wish to do specific activities like take down shields or drive up the AIP or something.
      • Having this separated out into separate defense and targeting priorities reflects the different ways that we think about these things. Sometimes a ship is very important to take out if you're attacking, but it's considered expendable if you're defending because it's just another piece of defensive hardware and its job is to fight until it dies. At any rate, the way things are designed right now, the people defining the xml and the people writing any AI logic both have some loosely-coupled good options on both sides.
      • One reminder for anyone doing AI code: never _just_ choose the best option. Always choose from among the top 85% or so of the options, and very rarely lower than that, because that keeps the humans on their toes and is what leads to unexpected moments of "brilliance" on the part of the AI. That wiggle-room is the secret sauce that makes AIs seem alive.

Hey Testers! We Have Some Questions

  • Questions for testers (now that we're breaking everything):
    • How is ship damage in general? How about health?
    • Do tractor beams work?
    • Does cloaking work? And tachyon beams?
    • Does engine damage and repair seem to work?
    • Does paralysis work?
    • Can command stations be upgraded?
    • Does the Human Home Command Core work? (Does it get created and then does it work?)
    • Does the AI Overlord Phase 2 spawn after the AI Overlord is destroyed, and does this keep the game going until it dies?

Version 0.759 Break The Sky

(Released Internally Only August 8th, 2018)

  • A variety of the starship lines now are unlocked via the Advanced Research Station instead of being available for unlock directly at the start of the game.

Minor Faction Updates

  • Fix some Dark Spire bugs where the Wards were self destructing, Locuses were spawning too early, etc...
  • Dark Spire units now spawn next to their Vengeance Generators instead of at the center of the planet.
  • The Dark Spire can now perform "Vengeance Strikes", where all the Dark Spires in the Galaxy will launch a simultaneous attack. This will happen every few hours.
    • Vengeance Strikes will give you a 10 minute Notification heads up.
  • If you have vision of the Devourer, you will recieve a Notification with its current location
  • You will get a notification for every Astro Train on the map. Note that it won't tell you the location of the Train or the Depot unless you have vision of them.
  • If the Zenith Trader is on one of your planets you will get a Notification.
    • A Notification for all of these factions is a popup like a Wave Notification
  • The Marauders will only attack "Sometimes" now. This is less a nerf and more a "Make the Marauders really unpredictable" tweak.
  • Marauder Raiders will now aid adjacent allied planets that are under attack
  • Mercenaries are Always Enabled now
  • Allow Astro Train Depots to have per AIP multipliers on strength, which allows Depots to start out weaker but get stronger as the game goes on (as you also get stronger)
  • Dyson units now spawn at the Dyson Warp Gate, not at the center of the planet.

Nanocaust Changes

  • Reworked the way Nanocaust ships are created to allow for real balance adjustment
  • Add notifications when the Nanocaust is attacking
    • These are notifications like the Wave notifications
  • The Nanocaust has the ability to strategically generate bonus strength for waves
  • Fix a bug when saving games with the Nanocaust
    • Thanks to OvalCircle and RocketAssistedPuffin for reporting

Instigators

  • Add AI Instigator faction. This is a minor faction that's just "part of the AI" from the player's point of view, though their units are tagged "AI Instigators" not "AI". Instigators are Always On and there is no mention of them in the Game Lobby.
  • This faction will create a base every hour or so. These bases will provide the AI with an ongoing bonus effect (at the moment, buffs to various budgets or "Spawn units that just kamikaze at the player"). You can ignore these bases or go try to kill them.
  • The goal is to give the player periodic new mini-quests and objectives.

Balance Changes

  • Adjusted the balance for Mark V, VI, and VII ships/structures. They were progressively getting weaker compared to their lower tiers, which generally increased at a higher rate.
    • Mark II is 2x as strong as Mark I, for instance, but Mark V was only 1.25x as strong as Mark IV. Now Mark V and up are each 1.5x as strong as the mark that came before them, which matches how much stronger IV is than III.
    • We can of course change this with ease again in the future, but it seems like a good plan for now.
  • Metal costs for ships go up by 1.5x per mark level, rather than following the strength/hull power trend line. This makes mark II ships a particular value compared to mark I ships, incidentally. The deal of power-to-metal-cost ratio gets progressively worse as you go up in mark levels, but always remains quite positive (aka it's always a good idea to upgrade, but you get more bang for your buck upgrading something low than something high, assuming all else is equal -- which it is not, heh).
  • All of the player command stations now increase the speed of all allied units within their system, as was the case in the first game. Home court advantage returns!
  • The energy cost multiplier for higher mark levels has been removed. Ships cost the same amount of energy (per squad) at each mark level, now.
    • Otherwise, particularly with the auto-upgrade effects that are now here, you could end up browning yourself out by upgrading a squad. Previously you could have ships inexplicably not upgrading, so that was not really improved.
    • Don't worry, your energy needs increase anyhow because of ship caps going up with higher mark levels.
    • That said, we will probably need to spend some time on balance with energy in general to make sure that you actually start to feel pinched every so often on it during gameplay.
  • Planets now have a constant amount of hacking and science points on them.
    • We might change that in the future, but it would be planet-background-themed and use different math if we did.
  • There are now always 5 metal production points on player homeworlds, and between 3-8 points on other planets, making them vary in quality just like in AIWC but in a fully visual way that differs from AIW2 so far.
    • The idea here with the base planet is to keep it from players re-rolling to get a better immediate start.

Ships Removed

  • Tachyon Microfighters and Bulletproof Fighters have been removed as distinct entities. These will soon be things that are randomized variants or upgrades.
  • The AIWC-style concept of mercenaries, which we've been calling Auxiliaries, has been removed for now.
    • This simply wasn't very exciting and felt like clutter at the moment. If late-game metal buildup becomes a problem again, we have some more flexible ideas for dealing with that.
  • Advanced Factories and Advanced Starship Constructors are going away for now. We'll be bringing back a different mechanic in this general area, so stay tuned. There's a better way to do this, though.
  • Stealth tachyon arrays have been removed as a distinct unit. Instead, their stealth ability kicks in when you upgrade a regular tachyon array to mark IV or higher.

Ships Reinvented

  • Fighters, bombers, and missile frigates are the three core triangle ships... but only for humans, now! The AI and other factions no longer get them at all. The marauders have their own version of these ships as drones, which is actually pretty unique for them. But the AI and other factions use different ships as their baseline, now.
    • These ships (the base ones by the player, anyhow -- not the drone marauder-based ones) are now going to be getting some balance changes and new abilities really soon.
  • The basic fleetships for the AI are now the Raider (in place of the Fighter), Armor Ship (in place of the Bomber), and the MLRS Frigate (in place of the Missile Frigate).

Ships Added

  • Logistical and Economic command stations have been rebalanced a bit, and Military command stations have been added.
    • The new military command stations increase the attack power of all allied ships in their system.

Bugfixes

  • Fixed a bug in the macrophage where they were not using their health_change_per_damage_dealt value, since it was spelled health_change_per_damage_dealth.
  • Fixed a variety of other bugs where things were not acting as they were supposed to since the pivot. That said, undoubtedly broke even more things than we fixed.
  • Fixed up a few ship ranges that were set to low or negative values because we couldn't properly see them before. The Arks all had very very short gun ranges, for instance.
  • Probably fixed the bug with you being able to upgrade your home command station and thus lose the game instantly because of that.
  • Fixed a bug where killing Warp Gates was not correctly stopping incoming waves from that Warp Gate
    • Thanks to OvalCircle for reporting
  • Structures can no longer be captured on AI planets
    • Thanks to RocketAssistedPuffin for reporting
  • Certain text throughout the interface, such as on the net energy display, would show really strange and wrong if you had a negative number there. Fixed.
  • Fixed a longstanding issue (that we just uncovered) where attribute reading from xml could silently fail even if it was supposed to verbalized failure.
    • The issue was if a non-default value was passed into the Fill() methods, but then the attribute was missing. It was supposed to complain if it was default OR missing, but it was only complaining if it was default.
  • Fix a bug where Astro Train Depots that were supposed to give bonuses to various AI Budgets were in fact doing nothing.
  • Fix a bug where losing vision on a planet caused all ships there to visually explode
    • Thanks to x4000 for reporting
  • Improve engineer logic when deciding which units to repair, or which constructors to assist in building units. We now factor in how many other engineers are working so as to ensure we don't have all the engineers working on a single unit at a time.

Technical Jargon

  • A new does_not_use_multipliers_from_mark_level tag has been added.
    • If this is set to true, then the mark_level="Mark5" (or whatever level) tags are just ceremonial -- they show up visually to show a player how scary the unit is, essentially.
    • Normally there are multipliers for the health, strength, shields, attack power, etc, etc that come from mark levels. This skips those, in other words.
    • The reason for this is that sometimes you have very unique entries at each mark level (such as with the Dark Spire) that you want to have display the mark level, but which in no way inherit stats. This way, instead of having to know the multipliers and then divide all your values by them, you can just set the stats directly.
  • The option to hide mark levels on ship icons has been removed, since now you can just set them to be markless and set their stats to be whatever. It's much cleaner than having two ways to do one thing.
  • The structure of how ship data is stored in xml for the game to read in has been overhauled quite a bit.
    • A lot of fields were previously wired up in such a way that they referenced other xml files extensively, so you'd have to know what a lot of hidden values meant in order to make sense of it at all.
      • Now this is done a bit, but only for things that are easy to remember (range) or not frequently used (engine health). Basically in places where this is easier to read for purposes of understanding a scale (is 100 a big number of a small number for this field? etc).
    • A lot of fields also were based around multipliers to unseen base values, again making it hard to know what the actual values would be.
      • In general, things are a lot more direct now. Higher mark levels still multiply a bunch of things in order to simply be descendants of the lower mark levels, but this is less severe of something to have to learn.
    • And lastly, ship systems (guns, etc) were stored in a separate file, then referenced. This had the advantage of fewer definitions (by a bit), but the big disadvantage of being harder to read a single ship or modify that ship.
      • Now the system entries are actually sub-entries of the ship nodes directly, so you can see everything about a ship right in one screen, essentially, and thus make changes way easier to it.
    • Overall these changes make it harder to make sweeping balance changes to the game (more repetitive work is required now), but it makes it far easier to modify individual ships, which is far more common of a task.
      • Basically we were not having many modders for ships, and even Badger and Chris were kind of shooting in the dark and Keith was mostly just basing his work around what was in AIWC lately, so the prior system wasn't really working out for practical purposes. The new system was designed to take what was good about the old system, make as few changes as possible, and become more usable.
  • Made it much easier to see what sub-nodes are having xml issues when you're seeing xml errors from your modding.
  • The properties on GameVersions are now different, since we're breaking old savegames anyway.
    • Rather than saying which versions are valid for the settings, world, and profiles, it now says which is the first one that was valid. Those markers can be moved around in the versions file as needed.
  • All of the old serialization gates have been removed, and in general a lot of deserialization cruft that built up while we were not breaking savegames.
  • The last inclusions of Power in the code are now gone. Also power distribution nodes.
  • There are now some V1 and V2 copies of a few ship types that look pointless in the xml, but which are a chance to have multiple randomized variants on one team, coming up. This is particularly true for things like the Abomination, etc.
  • There are also some faction-specific tagged versions of various ships that are copied now, too. The tags make it more obvious what the purpose is, and you can see that built_by="Unused" is being set to zero to make sure that these variants don't show up in player build menus or random AI waves.
  • Build menus no longer have the same structure as before (with all the columns, etc), and are now defined on the ships themselves.
    • This makes it easier to keep track of where ships are used, although not what uses what ships. But that's fine, because we also don't want ships referenced in multiple files like this directly if we can help it (this again helps with modding, allowing modded-in ships to be inserted into build menus automatically).
    • Also worth noting, we've removed some build menus for things like specific AI types, since that concept would no longer work anymore. Rather than certain AI types preferring specific ship types, they'll be getting specific bonuses or penalties more frequently from the randomizer, soon.
  • Mark levels and techs as they were previously defined in the xml and code have been removed. There's a new system that is a lot simpler that does the same thing on the front-end, but is less typo-prone, requires less xml in general, and will long-term be less bug-prone.
  • The concept of a "shared cap" is now gone, since we no longer have to share cap between multiple mark levels.
  • Added a new max_mark_level tag in the entity xml that lets us specify that the unit is only able to be upgraded to a given mark level and no further.
    • Most of the time, units can be upgraded all the way to mark 7, but it gets progressively more prohibitively expensive.
    • It's also worth noting at this time that the mark_level tag now means "first mark level." If something has a mark level of 2, then it will never be present at less than mark 2. This is mainly used by some minor-faction-specific ship variants.
    • Lastly, if something is set to be markless, then it can't be upgraded at all (mark-level-wise).
  • Engineers no longer upgrade units, it just happens automatically (for the player). This was a waste of time for the engineers, and extra complications on our side, too.
    • This does create the common situation where you'll be in battle and can upgrade your units immediately to save their health or whatever, but this isn't the worst thing; lots of RTS games do this.
    • Player units are now automatically kept at whatever the highest mark is that their type has unlocked, whereas AI units start out at some mark level (from their planet mark level, or their wave mark level) and then never change it.
    • Note that this is a departure for structural-type buildings such as command stations. You can't have multiple mark levels of economic command station in the galaxy at once, anymore, for instance; they'll all share the highest mark, now.
      • Note that this does NOT affect the AI or minor factions; they can do what they like.
  • In the test chamber, you can now specify a mark_level entry to choose what mark the ship is at. It will automatically correct itself to the nearest in-range mark level if you set something out of range for that unit.
  • The build menus and tech menus are now combined into one thing that is called build menus, and this includes the following entries for the moment.
    • Note that these get assigned to entities by the built_by tag, in a comma-delimited list. What lists the ship is in determines how it can be used, and by whom.
      • Further note that a few ships don't use built_by at all, but still do appear in the game. These ships are instead looked up by the tag property, usually for purposes of a faction or the AI doing something unusual with them (for instance, Usurpers being in the waves AIs send to retake planets).
    • Unused: assign ships to this if you have are using copy_from on a ship that you then want to be in no lists (aka that ship will be looked up by tag after the copy).
    • FleetShips: ships that the player can build at space docks.
    • Starships: ships that the player can build at starship constructors.
    • FleetShipUnlocks: currently unused.
    • StarshipUnlocks: currently unused.
    • StarshipAndFleetshipUnlocks: Advanced Research Stations will choose from ships in this list when deciding what to make available to players.
      • Note that for the result to actually appear in the space dock or starship constructor, you ALSO have to include FleetShips or Starships in the built_by list.
    • Infrastructure: non-combat things that the player can directly place. Engineers, space docks, etc.
    • Defenses: combat-oriented things that the player can directly place. Turrets, shields, etc.
    • ZenithTraderUnits: whatever the Zenith Trader might sell you.
    • CommandStations: whatever the colony ship has available for you to build.
    • CommandStationUpgrades: any command station lines that can be upgraded in the tech menu. Pretty much identical to CommandStations for now.
    • BasicWaveDrawBag: ships that the AI can send at you in waves (assuming it has the line unlocked, as with everything around here).
    • BasicReinforcementDrawBag: ships that the AI can plop around its planetsn during reinforcements spending.
    • BasicGuardPostDrawBag: guard posts for the AI to place.
    • BasicTurretDrawBag: turrets the AI is allowed to place (assuming line is unlocked).
    • BasicNonTurretDefenseDrawBag: other non-turret defenses the AI can place, but not shields.
    • BasicShieldDrawBag: shields the AI can place.
    • BasicShieldGuardianDrawBag: shield guardians the AI can use on occasion.
    • BasicSentinelDrawBag: things that guard wormholes for the AI.
    • BasicGuardianDrawBag: regular guardians, not including shields, that the AI can use.
    • BasicDireGuardianDrawBag: unusually scary guardians that only get used in special circumstances and core AI planets.
  • There is a new xml tag called ship_line_must_be_unlocked that can be set to one of three different values:
    • LineUnlockedFromStart (default) means that anyone can use it right from the start IF it is in the "built_by" lists that the faction has.
      • For instance, this default is set for Fighters and Bombers and such, but the AI still doesn't get those because the built_by does not include BasicWaveDrawBag, BasicReinforcementDrawBag, or any of the others.
      • And on the other hand, various other ships for minor factions don't include FleetShips or Starships, so the player space docks and starship constructors can't construct these things.
  • Balance_TechCost is now being used in a new tech_cost tag on entities.
    • Any entity that isn't markless must have this assigned.
      • If the entity isn't used by players (such as AI-specific or faction-specific stuff) or otherwise isn't something players will see in their science tab (such as drones), then just set it to NeverPlayerControlled for the sake of clarity.
    • The rest of these values are organized around the same general costs that we had previously, but without needing to have tech definitions as an intermediate step.
    • These also define all of their science costs in just a single list that is planets_worth_of_science_by_ordinal, rather than having many entries for each cost type. The list starts with ordinal 0 (markless), and goes up from there to presently mark 7.
      • The scaling factor on these is intentionally uneven, so they're set directly. Some things are cheaper at first and then get progressively more expensive, others are more linear, and all of them get vastly more expensive starting around mark 4 or 5.
    • This also now lets us define ark_upgrade_point_costs_by_ordinal directly for the Arks.
        • The costs on these have been massively increased compared to what they were in prior versions of the game.
    • And lastly, this lets us set destruction_point_costs_by_ordinal directly here, too.
      • Previously, this was just used by a couple of things like the mobile builder and the auxiliary space dock. Now it isn't used for that at all.
      • Now, starting at mark 4, all of the lines start costing some amount of this. So even if you get a ton of science, you also have this other limiting factor on the very high-mark entity unlocks.
      • It's also worth pointing out here that you can now simply upgrade your ships and structures all the way from mark 1 to mark 7 (or whatever their top cap is) at any time, without capturing anything. It's just very, very expensive.
        • The concept of temporarily having mark IV ships available thanks to an advanced factory is gone. That was awkward and there are better things we can do.
  • There is now a min_mark_level_to_function and max_mark_level_to_function set of tags that can be applied to systems. Simply set this to 0, 4, or whatever ordinal number.
    • This lets us do things like only have certain systems turn on after a ship reaches a certain mark level -- the tachyon array gaining the ability to cloak at mark 4, for instance, or the Thanatos Ark gaining it's zombification gun at mark 4.
    • This gives a lot of compact flexibility.
  • Added a VERY IMPORTANT new CurrentGeneralMarkLevel on the Faction object.
    • It isn't used at all by player factions, but for the AI and other factions, ships will by default come out at that mark level unless told otherwise (or unless clamped otherwise by starting and max level).
    • This is something we'll be incrementing for the AI so that its waves get stronger over the course of the game, and other factions are free to use this as well (though most don't really need to at the moment, since their ship levels are controlled by other things).
    • For the AI, if this number is higher than the mark level of the planet a reinforcement is at, then it will use this mark level. Much as in AIWC.
  • On the GameEntityTypeData class, there are now very important new MarkFor() and MarkStatsFor() methods that should be used when considering mark levels for entities that don't yet exist.
    • Essentially, when an entity is to be created, we don't really know at what mark level it should be created at. Depending on if it's a player, an AI, another faction, for a wave, for a planet reinforcement, for a drone out of a specific ship... all of those cases result in potentially different mark levels.
    • Thus all of that is simplified by you simply doing a few different things, and you can call these with a Faction or a PlanetFaction for added brevity of the call.
    • The stats version returns the GameEntityTypeData.MarkLevelStats for the mark level, whereas the other version just returns the int for the ordinal of it. Again for syntax brevity.
    • There's a version where you just pass in a faction, and it gives you the general mark level it should be. This is for things like anything to do with a player, or an AI wave or CPA, etc.
    • There's another version where you pass in the faction and a planet, and for non-players that will give you the appropriate mark level for if the ship is being added to a planet as a reinforcement. Aka, the mark level of the planet, and the general mark level of the faction, both influence it. For players it is business as usual, basically the same as the other method.
    • There's another version where you just pass in the mark level you want, and it clamps it if need be and hands it back to you. This is useful for drones being produced by ships, since the drone probably should be the mark level of the thing producing it (but in some cases we have something like a markless hive golem producing mark 5 hive drones, so it would try to be mark 0 but clamp to mark 5 instead).
    • And lastly there's a version that is WithAdded(int) that basically says "if I had this many marks added, what mark would I be, including any clamps." This is useful almost exclusively for predicting upgraded stats on the tech tooltips.
  • There are also now MarkStatsFor() methods on the EntitySystemTypeData class, matching those of GameEntityTypeData in function and form.
    • This makes it much more concise and easier to get the proper data about theoretical systems that might be added in a given context. This is mostly just for the gui for placing new units, things like that.
  • UnlockedAIDesigns has been removed from the AI's external data, and now it simply uses faction.UnlockedShipLines like all the other factions do. Logic is all the same.
  • The metal production and energy production on planets is now more direct straight from the units that produce them, rather than being based partly on the quality of the planet.
    • This is a lot more like AIWC.
  • Squads with multiple subsquads were firing a shot per subsquad, all stacked on top of one another, which was needlessly heavy on the CPU and the GPU at all levels.
    • It was a nice idea, and made sense to do, but ultimately was too heavy and too hard to spread out. It was mainly a visual thing, but since they were stacked you couldn't tell anyway, so it's clearly not needed from that standpoint.
    • The other element of it was that squads would get weaker as they had fewer subsquads in them, but that actually wasn't fully correctly being handled in terms of shot planning and whatnot with ship DPS, etc. So dropping this function actually makes some of the ship AI slightly better.
  • The game now explicitly complains if for some reason it is unable to fill a draw bag for putting entities into a given context. This would be an example of bad xml, typically, and thus a helpful debugging aid for modders and the like.
  • Improved the logging on AI draw bag reading, for if there are emtpy entries ever. This will let us know when there are issues in the xml, or outright logic errors.
    • In the short term this has helped us fix some code issues that were internal to this release, but longer-term it will help when there would otherwise be invisible strange behaviors from the AI. Invisible incorrectness is not so hot. :)
  • AIs now properly check their effective AIP against the RequiredAIPLevel of each mark level listing. Assuming that the effective AIP is greater than or equal to that, it increases its mark level to that value. The AIs never go down in effective mark level.
    • So even if you use data centers to bump the AIP back down, the effective mark level is higher for good. By design, as with the first game. Some gates just shouldn't be un-trippable.
  • There is a new takes_on_color_of_the_first_ai_faction field on SpecialFactionData. When this is set to true, then the faction in question will take its color from whatever the first AI faction is set to.
    • This is how the Instigators faction is now set up to work.
  • There is a new takes_on_current_general_mark_level_of_the_ai_factions field on SpecialFactionData. When this is set to true, then the faction in question will increase its CurrentGeneralMarkLevel to match the highest AI CurrentGeneralMarkLevel. These factions won't ever decrease their CurrentGeneralMarkLevel.
    • This is now used by all of the "I'm part of the AI but implemented as a separate faction" factions. Everything from instigators to astro trains to the warden and hunter fleets. This keeps the growth of all the parts the same across the game.
  • Starships, guardians, arks, and fortresses now scale up in visual size per mark level based on a new large_ship_scale_multiplier tag on the mark level definitions.
    • The scaling was previously handled per-entity-type and done by hand in the xml, leading to often inconsistent results.
    • This scales the ship up visually, as well as scaling them up in their actual physical radius, which affects collisions, etc.
  • The old Flagships special entity type has been removed, and a new Starships one has been added instead and is now assigned to all the starships.
  • The game now checks for xml attributes that are in present in the xml but never requested by the front-end.
    • This is basically typo-proofing, more than anything else. And it also helps us clear out older cruft in other cases.
    • This will NOT help you find unused xml nodes, so if there's a major typo in the name of those you're out of luck and just have to notice it yourself. Node = <node> Attribute = <node attribute1="val" attribute2="val">.
  • We cleared out a lot of cruft and corrected some typos, based on this. Thus fixing a few bugs we didn't even know we had just yet.
  • Removed the dps multipliers from death effects (which were not even being used), and also removed the death effect defenses (which also were not being used).

UI Improvements

  • When you unlock a tech, it now shows a message saying what you unlocked.
  • You can now see the metal costs of things on the tech tooltips (what the old cost was and the new cost will be).
  • The galaxy map tooltip for planets now shows how much science and hacking is LEFT at a planet, versus what its total was.
  • Updated the controls for the plus and minus keys to match the defaults that are in the interface. They now adjust the frame size instead of the frame frequency (this speeds things up without causing extra CPU load, making it ideal for quick speedups when you want things to move faster).
  • Updated the interface display for larger frame sizes to say "2x Sp." or whatever the amount is rather than "C*2", which was debugging-like and unclear. (Granted this probably was originally for debugging, it's hard to remember).
  • Previously, DPS was being reported per visual thing in a squad (so DPS was divided by 20 for fighters), which was super unhelpful. It now shows DPS per squad in all cases.

Prior Release Notes

AI War 2: The Pivot