AI War:5.000 Release
Revision as of 00:11, 27 January 2011 by Keith.lamothe (talk | contribs) (→Performance Improvements)
Contents
Statistics For The Curious
- Between 4.021 and 5.000, we pushed out 53 distinct public beta releases over 90 days. That's an average of one release every 41 hours.
- Community contributors assisted us with over ___ distinct bugs and suggestions-that-were-implemented (counting __ distinct contributors).
- The combined release notes for those 53 betas total over 360 kilobytes of text.
- This document (which is just under ______ words long) is the abbreviated, organized version of the full release notes (here).
Highlights
AI Updates
- Hybrids will now launch an attack if at least 7/8ths of the hybrids that are coming are ready, and will not intentionally wait for the last 1/8th.
- On difficulty 7 and up, AI ships now spread out 2x as much as before. AI ships that are waiting before going through a wormhole to a human planet now spread out 4x more diffusely to make them even harder for players to hit.
- The AI now uses the intel data it has about the relative strengths of planets (as human players do), when determining whether or not to send its ships through a wormhole they are waiting on. This is different from the prior method, which was partly randomized, partly based on an accumulated number of 200 ships, and partly based on having a lot of ships incoming.
- This is a far-reaching change to the emergent behavior, which will have many effects on the gameplay, some of which are likely to be unanticipated at this time. The general expected result is that the AI will not attack players with "trickles" of ships very often anymore, and will instead choose to build up before breaching. The other expected result is the AI acting more sensibly when its command station has been prematuraly destroyed or when ships are freed from a guard post.
- On lower difficulties (<5), the AI actually overestimates its strength 5x, leading it to make dumber decisions. On difficulties less than 6, it overestimates its strength by half, leading it to make occasional stupid decisions there. Both of these are examples of the intentionally-sometimes-off decisions that make the lower-level AIs easier while also making reasonable mistakes a human might.
- On difficulty 9 and up, the AI actually underestimates its strength by half, leading to it to have a greater tendency to wait to strike with overwhelming force.
- These changes should also make the AI more effective in defender mode.
- On difficulty 7 and up, when the AI forces on a planet are more than 2x outgunned in terms of firepower, the guards will be freed and will either engage the player forces en masse or will escape to fight another day, as appropriate.
- When AI ships are fleeing from a planet, they will now tend to scatter a lot more than they used to, and have a much greater chance of circling around to an undefended or unexpected part of player territory. Paired with other recent changes that make the AIs more smart about when to attack a planet they are "stalking," this will make them a lot less predictable and a lot more dangerous.
- New behavior for the AI! When the player goes on distant deepstrike runs -- defined as having any human military ships more than four hops away from any human or neutral planet -- the AIs both goes on high alert and starts spewing out ships from their home planets (or a random planet if their home planets are destroyed).
- The tech level of the spawned ships will be whatever the AI's current tech level is, plus one (obviously between 1-5). Unless it's an AI home planet that is being deepstruck, or a planet adjacent to an AI home planet (we call these core planets), in which case the tech level is always 5. Watch out for that: you'll want some sort of launch pad within 4 hops of the AI home planet in order to take it without massive pain.
- The spawned ships will be random fleet ships that the AI is allowed to use in waves, and each AI player will spawn a certain number of ships ship per event-second.
- The event-second interval is defined as ( 11 - Floor(AIDifficultyLevel) ). So, for difficulty 7 or 7.6, that would be 11 - 7 = 4 seconds per interval.
- The number of ships is defined as Floor(AIDifficultyLevel/2). So for difficulty 7, it would be 3 ships every 4 seconds, per AI player. On difficulty 8, it would be 4 ships every 3 seconds, per AI player.
- These spawned ships are in free/threat mode, and will eventually attack the human players in whatever way they think will be most disruptive. They may engage the deep strikers, but more likely they will try to kill the planets of the players instead.
- Note that all of these numbers are PER PLANET that has a deepstrike on it. So if you are deepstriking four planets, multiply those numbers by four. It's best to keep your forces together, and make the deepstrike raids as brief and effective as possible to avoid too strong a retaliation against your forces.
- Border Aggression has always had a mechanism whereby it would get more severe the longer players played: the cap of total attacking units plus threat would increase by 20 per hour of play. The cap would basically not release any ships to border aggression if the total number of enemies attacking and/or threatening exceeds that cap.
- However, there was a catch: the cap was capped at 1/4 the total size of the player's current military. This cap on the cap has now been removed, so very long games now get ever-increasing border aggression caps.
- Note that this doesn't mean that border aggression will definitely increase linearly over an entire long game, but it won't be artificially kept low if it would have been high late in a 60-hour game or whatever.
- Border Aggression is now keyed based on firepower. The caps for BA now go up by the equivalent of 20 mark III bombers per hour.
- The AI now only has a 8% chance of swarming after "irreplaceable" units like ion cannons, ARSes, etc, rather than a 70% chance.
- The AI already has logic in place for valuing targets even beyond this, but much more flexible and less gap-in-the-wall type logic, so having this be very infrequent is good. However, still having it present is also good, so that occasionally the AI will mass their ships on a frontal assault on something valuable, always a good thing.
- Hybrids looking for attack missions are now more likely to heavily prefer a "main target" planet.
- When Advanced Hybrids are on for their player, Defensive Hybrids will now switch to an offensive role to add pressure to certain other major AI offensives. This can make them more of a danger in the mid/late game. When this happens an alert message ("Defensive Hybrids Are Mobilizing") will be displayed for about 2 minutes after the "switch".
- Put in a change that should make the AI react better when saboteur-type ships, or player immobile structures, are on an AI planet.
- AI ships will now be angered (rather than just alerted) when firing upon human ships within roughly 11,000 range, which will make them (and their guard posts and fellow guards) fall under normal targeting rules, thus hopefully fixing the situations where human ships were being shot at by a relatively nearby AI ship but not retaliating (they shouldn't retaliate if the AI ship is way far away, as otherwise this can cause long range human ships to aggro the entire planet pretty quick).
- Non-melee AI ships that are under a protecting strong force field now will no longer move until they are out from under the force field (from it dying or whatever), though they will still receive orders from the AI as normal. This makes the AI-ships-under-AI-forcefield case really a lot more back like how it used to be in the 2.0 days, where those were interesting and tricky nests of AI ships to take out.
- In the past, for the AI to be allowed to retreat from a planet it had to have had at least half of its ships on the planet for at least 30 seconds. That prevented a number of back-and-forth behaviors that are now prevented by other means, and this behavior was now leading to some "gap in the wall" type exploits. The limit has now been changed to 3 seconds instead.
- The AI will now more properly react to cloaked ships on its planet; much the same as a human player, it now knows how many ships are there and the general threat at that planet, just not specifically which ships are there or where they are. Actually, in some cases the AI has long known this (same as the AI), but in some critical decision-making logic it was incorrectly barred from that data.
- When looking for ships to add as part of a CPA, the AI now also looks inside barracks and pulls ships out to use in the CPA. Some (but definitely not all) of the smaller-than-they-should-have-been CPAs were relate to lots of ships being stuck in barracks.
- When there are simply too few ships in the galaxy for the desired tech level of CPA, in the past it always has counted downwards.
- So, for example, if you were supposed to get 5000 mark II ships in a CPA but it could only find 1000, then it would look to mark I ships to see if it could find any more.
- However, there were many common cases where there would even still be too few ships in the galaxy of the correct or lower levels. Now the game will loop back around and start including higher mark ships.
- So, to continue the example from above, if it had found 1000 mark II ships and, say, 500 mark I ships, then it would start adding mark III ships to the CPA as well. Odds are very good that it would find the remaining 3500 ships in even just one mark higher, so that would fulfill the order for 5000 ships.
- Of course, in the event that it doesn't find enough ships directly in the level above, it just keeps counting up, all the way to mark V.
- Bear in mind that certain ships are specifically excluded from CPAs: immobile ships, ships under force fields, ships in carriers, ships that are already free/threat, ships that are minor factions or zombies, ships that are being coordinated by a hybrid hive or similar, ships that aren't counted as "extended mobile military," starships, and guardians. These restrictions aren't new, but bear mentioning.
- Made some various internal improvements to how the AI decides to stay at a planet to defend itself against enemy threats (most notably cloaked enemy threats, but in general). The specific rules are difficult to really explain as it's all internal math, but in general the result should be for it to more properly weight threats and react more like what a human would do.
General Large Gameplay Additions
Co-Op Improvements
Performance Improvements
- GZip compression is now used instead of Zip compression for savegames. This has the advantages of: 1) resulting in significantly smaller save files, especially for large savegames -- as much as 30% savings at the upper end; 2) resulting in the correspondingly smaller full sync network requirements for multiplayer; 3) hopefully solving the "pthread_getschedparam" issue on OSX, which seems to quite likely have been related to unintentionally-multithreaded zip processing in the autosave process.
- The way that the AI thread keeps track of Astro Train Stations and Special Forces Rally Points (of all sorts) is now significantly more efficient and effective, resulting in somewhat lower RAM and CPU use on the AI thread in general.
- The way that expansion enabled status is checked and set in code is now more efficient on RAM and CPU use.
- The method for randomizing lists has been made generic rather than object-based, so that lots of boxing and casting no longer occurs with it, saving a bit of CPU and more transient memory usage.
- Guardians and guard posts no longer try to load colormasks off the disk (which were all blank, anyway) to save a bit of RAM use and disk access time.
- The way that unit data is synced to the AI thread is now better for purposes of cold storage and similar in particular.
- An ENORMOUS number of memory-static-ness updates have been made, primarily centering around converting some very central generic dictionaries to arrays. This also serves as a performance boost, and makes savegames load a little faster, as well as the game itself.
- Added some measures to make the game less likely to hang onto memory it no longer needs (excess rollup list space, dead ships still linked to other objects, etc).
- The range circles no longer draw with partially-transparent colors for the lines, thus reducing their GPU overhead quite a bit, more or less depending on the GPU in question.
- Improved memory/cpu performance of sending/saving planet state (string.concat -> StringBuilder.Append). Not done terribly commonly, but every bit helps.
- A number of rollup lists on the Player object that were really human-only (but which were bloated by lots of AI ships on the AI versions of the objects) have been made human-only. A few have been removed. This lets the functionality remain the same while having a bit less ram usage and a bit faster loading of savegames.
- The old mission summary was still in the game, taking up time getting periodically recalculated, but invisible. This was just a porting artifact, and it has now been removed.
- A revised savegame format has now been put in place, with an emphasis on using less RAM to create it.
- One happy side effect of this is that that savegame files are now about 7/8 to 4/5 of their former size. They still load in about the same amount of time, though.
- Another side effect is that the new savegames actually show their loading process as they load, now, rather than just sitting there silently on parsing data.
- At any rate, the chief purpose of this is to make the creation of savegames as well as the syncing of multiplayer network state into a lower-RAM-using process to avoid GC heap errors when players are already running near the RAM redline. The new format is vastly superior in that regard, possibly using as little as half as much RAM as before, depending on the exact circumstances of the save.
- Put in a new CPU-efficiency-improving shift in the targeting logic for ships in FRD mode: while in FRD mode (and always for ships that are snipers), a much-less-accurate but much-faster-to-calculate range value is now used. Normally accurate ranges are important in battle, because ships have to know if they are in range to hit their target, etc. However, for ships in FRD mode, they can move to hit their target, so they only need to get a rougher idea of which ships are vaguely closest.
- The main side effect of this change, aside from the speed boost, is that ships in FRD mode will choose more poorly between targets that are close together and also at a diagonal from the targeting ship.
- The "are we on the same team" logic, which gets called a lot, is now more efficient in the general all-ais-versus-all-humans cases.
- An even more enormous change has been made to how the rollups are calculated, basically making huge chunks of them per-team. This is a notable speed and RAM boost for large games and especially for multiplayer games. It particularly makes it more efficient for ships to change planets, and for savegames to be loaded.
- Massively refactored the AI-thread rollups in general, so that way fewer object references are required (somewhere around 1/3 as many references as before in single player, and an even lower percentage in multiplayer). These shifts in general will improve RAM and CPU use on the host computer, amongst the gameplay benefits already noted above.
- AI mobile military ship combining is no longer player-specific. This means that AI ships will be condensed further than they once were when needed (when both AIs have ships at a planet), and it also means that this process requires less CPU to calculate.
- The same is also now true for the creation of AI Carriers out of mobile AI ships, which will result in fewer, more-appropriately-filled-to-capacity carriers in most cases.
- Put in a number of internal efficiency improvements with regard to properly clearing internal rollup lists and releasing their memory.
- Put in a number of internal transient-RAM-reductions related to converting some AI thread dictionaries to int arrays.
- The AI thread now thinks almost entirely in terms of team-based tactics, but especially in terms of things like warp gates, etc. Thus there really should never again be any situations where one AI player is unable to find a planet to warp into just because there is only one warp gate bordering human planets and that warp gate belongs to the other AI player.
- Added in a couple of "safety garbage collections" into the load savegame process to attempt to prevent the game from grabbing any more memory than it has to when loading large savegames.
- Since it did more than we thought it would for the memory efficiency of planet serialization, converted player serialization from string.concat to StringBuilder.Append.
- A bunch of more optimizations internal to the foreground objects (ships, structures, etc) has been made. The general effect of these changes is once again to reduce the memory footprint a bit, but in this case also to help reduce the CPU overhead of creating new foreground objects. This should help savegame loading speed a small bit, but in our testing it doesn't seem to have been much help so far.
- All in all, these changes plus the other ones earlier in this same release version account for about 205 bytes of RAM saved per ship in the game: that's about 2MB per 10k ships. Even just in a 70k ship game, that's fairly notable that we could save 14mb there in this fashion. A lot of these also boost CPU efficiency to a minor degree, which is also cool.
- Okay, wow. We majorly restructured the way that "other objects" (basically, everything that is not a ship: explosions, shots, junk, rocks, shield hits, etc) is stored and initialized in memory. A lot of this was very old code that hadn't been reimagined significantly since early alpha, way before 1.0.
- Not only did our restructuring result in lower overall RAM use for these objects (both ongoing and transient), it also resulted in lower CPU for creating new copies of them -- this helps a small bit during very large battles, but it also has extremely reduced the amount of time it requires to load a savegame. For a savegame that previously took 16 seconds, it now takes 10 seconds, etc. The effect of this is larger on maps with more planets.
- Also fixed a rather obscure potential desync related to shot movement as part of this. Nobody had reported it, but it could have randomly struck in fairly uncommon circumstances.
- Made ships much more likely to clear their autotargeting lists and release the memory used for them in a timely fashion when no longer in combat.
- Some notable performance improvements have been made to the ship collision-avoidance movement algorithms, which are some of the most expensive in the game.
- The AI is a lot more savvy now with some of its internal firepower weightings, using different kinds of weights for different situations. Overall this makes it feel a lot smarter when it comes to how it decides to do stuff with its free/threat ships.
- A lot of internal changes have been made to make the code for referencing the art more efficient and compact.
Interface Improvements
Graphical Improvements
New Ships
Ship Logic Updates
Balance Updates
Misc Changes
Bugfixes
- Resolved various issues (related sound, GUI textures, error logging, etc) causing instability on OSX. This involved multiple sweeping rewrites of the sound subsystem, but hey, whatever it takes.
- Fixed a rare bug that could cause the lobby to draw without the planets actually showing, while throwing a lot of exceptions, upon the second or third run of the program (but not always!). This seems to only have happened if the players were viewing the galaxy map when they exited out of the game, and possibly only if they were hovering over a plant at the time.
- Hopefully fixed a rare AI Assertions bug that could be caused by a "race condition" of sorts when starting a new game or restarting the AI thread.
- Since the 4.0 switch, the "Automatically Check for Updates" settings option was doing nothing. Now it properly disabled automatic update checks.
- Added a new "Left Mouse <=> Right Mouse" AnyTime KeyBind (defualts to None on windows, defaults to LeftApple on a mac), for people who were having problems getting the normal ctrl+left = right logic on a mac one-button mouse.
- When the AI Type that would be selected is unavailable (due to options being changed as above, for instance), it now defaults to Random Moderate/Easier instead.
- When the player or AI colors would be set to nothing in the lobby based on their old values not being available, it now sets them to the first entry in the list instead.
- Fixed a bug where Youngling Commando MkIIIs were not scaling with the unit cap.
- Fixed a bug preventing the galaxy-map helper-window from switching out of displaying the last find-mode target. Also changed the find-mode text to reflect that left clicking empty space ends it, rather than right-clicking empty space.
- Fixed bug occasionally causing a null exception in GameButton.SelfRender early in the game. This was being caught, logged, and ignored so it probably wasn't hurting anything, but definitely good to have it fixed.
- Fixed a bug preventing player from buying ships from a human rebel colony.
- Fixed bug preventing the mercenary space dock from building a ship whose base type was prohibited by the Available Ships lobby setting (so if you had it on "simple" you couldn't build ether jets or beam frigates from the mercenary space dock, but now you'll be able to).
- Fixed an (apparently) rare crash bug in the tutorial that happens right after capturing the ARS. If the underlying bug happens it may cause problems, but at least shouldn't crash.
- Previously the save window, load window, and stats window would not functionally fit on a 1024x600 screen (1024x768 is the lowest resolution supported, but we try to make 1024x600 work at least minimally functional), fixed the sizing of controls so this works now.
- Also fixed the settings window to fit (albeit barely) on 1024x600.
- Also fixed the lobby window for 1024x600, though this one is a bit more intrusive: when the lobby window first initializes, if the height of the current resolution is less than 768, it omits the logo at the top of the right window, so there's room for the start game button at the bottom. This looks a bit weird but it's at least functional.
- Previously, the "Attack Recharge" was also being used as an "Ability recharge" for a growing number of ships (raid engines, cleanup drones, rebuilders, etc). That led to a number of bugs so subtle that no-one has ever reported them (mostly with the raid engine), but now we've split these apart and the various bugs are thus resolved.
- Fixed bug where if you had the game in non-trial mode and your last-started-game's available ships setting was something other than "Simple", and then switched to trial mode (by adding an expansion without a key), and then tried to start a new game it would fail.
- Fixed some inconsistencies in AI "can I give another order to this unit yet?" logic.
- Fixed some bugs skewing the overall "special difficulty" modifier (based on homeworld/player count and AI difficulty); it was only used for hybrids, so the problems may not have been apparent.
- Fixed some rare null-exception bugs in the lobby when coming in with a messed up settings.dat.
- The images for the AI Carrier, Raider Guardian, and Laser Guardian have once again been included in this beta release since the 4.021 update on Steam for some reason still didn't include them.
- Fixed a bug that's probably been around since unit scaling and armor where the game was frequently using the normal-cap base-attack-value instead of low, when playing on low. With this fixed, it is likely that stuff will die faster on low now.
- Fixed a null-exception bug in hybrid-hive logic that was killing the ai thread when it was unable to pathfind to certain objects.
- A message is now shown when a savegame is saved, to provide visual feedback that the save actually did occur. It's only been since SlimDX that this message was missing, incidentally, but it's fixed now.
- Fixed bug where the minor-faction-shots-never-anger-AI logic was causing it to not even apply the repair-cooldown from the damage. Changed to handle LastDamaged separately from LastAngered.
- Fixed swapping of text between two keybinds on the controls window.
- System.IO.File.AppendAllText is no longer used, in favor of a wrappered System.IO.StreamWriter. It is apparently possibly the case that the AppendAllText does not close properly, or uses a secondary thread, in Mono on OSX. That's not 100% certain, but as a matter of safety at this stage we're trying to eliminate extra held handles that might exist.
- Fixed index out of bounds exception in reference tab.
- Fixed a sizing issue that was causing an error message and for the special forces guardian to not appear in far zoom.
- Modules firing will now apply the same "cannot be cloaked for x seconds" logic to their parent ships as to themselves.
- AI Carriers engine health from 100 => infinity.
- Multi-shot ships no longer are able to get any "freebie" shots if their target dies while their shots are incoming against it. This nerfs the mutli-shot ships to a minor degree, but more significantly it is a CPU-cheap way of solving a huge bug that was recently leading to multi-shot ships sometimes getting loads and loads of freebie shots that they weren't supposed to -- leading to things like the "rapid fire artillery guardian," for instance.
- Shot damage is now recalculated right when a ship is hit, so that if targets were changed (was the forcefield, now the ship, or vice-versa) the appropriate damage is now done rather than an inflated or reduced amount.
- Previously, SuperTerminals and AI Eyes were not limited in what they spawned based on the types that the controlling AI had unlocked. Fixed.
- Put in a fix that prevents a semi-rare exception from killing the AI thread.
- Fixed bug where superterminal would stop generating ships once it tried to cross from MkIV to MkV ships. For now it will just stick with MkIV.
- Fixed bug where AI players were having no wave-eligible core ship types unlocked, and in some cases no core ship types unlocked at all. This caused various problems. Now all AI players will have the core fighter, core bomber, and core missile frigate unlocked. This will be applied retroactively to savegames as they are loaded.
- The way AI/minor-faction ships with module templates are created fixed to be much less fiddly (this was leading to avengers and AI-controlled Riots spawning with no modules).
- Previously, when an AI ship contained other ships (carriers, etc) that was not reflected in the threat/attack meters properly. Now it is.
- "Ally to all" minor faction ships were previously being affected by attrition. Fixed.
- Previously, rally posts were able to be damaged by mines. Fixed.
- Fixed bug where minor faction ships were consuming player energy.
- Previously, self-attrition was impairing engineers from being able to repair ships with self-attrition. Fixed.
- The AI now has some new logic for cleaning up certain old ships on its thread, to hopefully avoid issues with "ghost" warp gates and such that would lead to waves that shouldn't happen. That may or may not have been happening before, but we suspect it might have been and this adds on some safety checks to hopefully prevent it.
- Nanoswarm now considered to use non-shell ammo, so bulletproof stuff should no longer be immune to them.
- Fixed a bug where multiple science lab mkIIIs on one planet were reporting as if multi-stacking the reinforcement multipliers, even though they were not actually multiplying them.
- Fixed some discrepancies in applying AI-Type-specific modifiers to wave sizes between mixed-wave and homogenous-wave branches.
- Fixed a bug where the WaveSize multiplicative factor was being applied twice (once on the AI thread, once on the main thread), leading to factors < 1 causing smaller-than-intended waves and factors > 1 causing larger-than-intended waves. In some cases the factors were >= 10, and you can imagine how bad that got.
- Fixed some mixed-wave messages showing up as homogenous and thus misleading the player as to the content of the wave (now just says Enemy Ships in those cases).
- Fixed unintended inflation of counter-attack-wave size. May still be some issues but this should fix the biggest of them.
- Fixed a bug that would allow the selection of a non-available bonus ship type in the lobby, but not actually allow the construction of that type in the game. Fixed to not allow the choice in the first place.
- Warheads produced by the Neinzul Rocketry Corps will now actually do something. Their behavior was probably disabled a while ago when a wholesale revision was made to how the AI thread issued commands for minor faction ships (or, more precisely, how it does not).
- Be afraid.
- Fixed a bug where the game was not recomputing the coordinate in "world space" under the mouse cursor if the game was moving under the cursor without the cursor actually moving (panning, zooming, switching planets, etc).
- Fixed unintended inflation of schizo waves where each distinct type would have a minimum of its effective ship-cap; now ignores that rule for waves containing at least two non-starship types.
- Fixed bug causing the "minimum wave size for difficulty" logic to be twice as high as intended.
- Raid Engines now no longer trigger on zombie ships since the human player has no way of controlling where they go.
- Raid Engines used to be capable of triggering multiple times at once if multiple adjacent planets and/or the engine's own planet satisfied the conditions at once. Changed to only trigger at most once per "reload".
- Fixed bug preventing ships from leaving cold storage if they were on a planet with > 4000 attack+threat ships (this led to capturables not being captured, zero-health ships not going away, ai ships sitting there and not firing and not fireable-upon, etc).
- The galaxy map filter for detection of hybrid hives and hybrid hive facilities now works properly when fog of war is off.
- The Unity resolution configuration screen is no longer allowed to be opened. It was pointless, anyway, as the game overrides it.
- The "runsim" command line argument was previously crashing the game when used. As it's no longer supported, it's now been removed.
- Previously, shot damage was only being reduced by 75% at the time of attack, not when the shot damage was actually being calculated for things like estimated damage display. Fixed.
- Previously, shot damage was being capped at the maximum health of the target at the time of firing. Fixed.
- Previously, if overkill damage was being dealt to an enemy ship, it would self-heal, self-damage, or help-with-replication at the overkill amount rather than the actual amount of damage needed to kill the ship. Fixed.
- Previously, shots that self-heal, self-damage, or help-with-replication, were taking effect when they were shot, rather than when they hit. This was particularly troublesome with self-damaging shots, which could cause a ship to massively over-damage itself for very little gain. Fixed.
- AI MRS and Fortresses were still repairing broken golems preemptively. Fixed.
- When the game is unable to unlock a bonus ship type for human players/home-planets that is unique for their team (usually due to playing with a lot of players on the simple ship types with no or few expansions), it now unlocks something that is unique for each player instead of for the team as a whole. The only time players would get nothing is if they already had all the ship types available.
- Previously, the game had a chance to sometimes hang if it was unable to unlock a new bonus ship for a player at various junctures. Fixed.
- The WithSelection context is now only active in planet-view, never in galaxy-view. It now also overrides any conflicting PlanetView binds. These two changes should resolve some really confusing input-causing-multiple-unrelated-things-to-happen issues we've been seeing (including the K causing both low-power-mode and knowledge-display-filter thing).
- Fixed a fairly longstanding bug that was totally messing up the detection of whether one input context was "narrower" than another, and thus should have precedence when one if its keybinds conflicted with another active context's keybinds.
- Distribution nodes and zenith reserves will no longer be targeted or damaged by AI ships.
- Distribution nodes and zenith reserves that are scrapped will now give their proper benefit.
- The ship caps and other stats in the planetary summary are now always synced with the local player's stats. Previously they often used global defauts that weren't correct for the current game.
- Put in a fix that should make it harder for AI ships to be brought out of low-power-mode when the player attacks and then drop back into low-power during the battle.
- Fixed odd bug with the code that sends updates on planets (specifically on the wormholes, in this case) to the AI thread.
- Fixed up some age-old nonsensical code from the AI thread, the unclarity of which had been the cause of some recent bugs with threat accumulating.
- Fixed a major longstanding typo in the AI loop dating back to sometime pre-3.120, wherein huge numbers of the AI's planets often would not be evaluated for AI logic, attacking, etc. Actually, depending on the circumstances of the savegame, it could affect no planets or it could affect virtually all of them. In one example save from Spikey00, for instance, it was only processing 4 planets out of 120 for the AI... with the result that over 17,000 ships accumulated in threat.
- This one took forever to track down, but was super worth it. A lot of the "why didn't the CPA ships actually attack" issues probably trace back to this. Not sure why exactly this issue has been seeming more prevalent in the last week (perhaps related to the other, more recent issues reported in the line item above), but it's very clearly some code that dates all the way back to the initial import to Unity and before.
- Previously, AI ships that were being "coordinated" by other AI ships (such as hybrid hives) were counting as threat. Fixed.
- Fixed a since-the-port-to-Unity bug with ships being selected, where if you drag-selected once it would select military-only, and then on the second time over the same group it would select all.
- Fixed a number of issues with per-planet AI ship count limiters kicking in when they should not have been. This is most notable for things like AI starships that are included in a wave to an AI planet, or just included to a planet in general, for instance. Now only guarding or planetary roamer ships are even included in the ship caps -- free/threat ships, special forces ships, etc, don't count, since they are all transient, anyhow.
- Fixed a bug that could cause uv textures to become accidentally flipped.
- Fixed a hang-causing bug in processing the removal of a ship with coordinated underlings (like a Hybrid).
- Fixed bug that could result in resistance fighter ships built by a human player at a resistance colony being produced as minor faction units and thus not costing energy (until the game was saved and reloaded, apparently, potentially resulting in a nasty shock).
- Fixed some bugs with the Resource Flows tab of the Stats window where it wouldn't include everything that was causing an impact on metal or crystal (notably self-building turrets, etc).
- Fixed a bug that could cause "ghosting" of old graphics (and thus both incorrect drawing as well as performance degradation) in certain circumstances. We never actually saw evidence of this occurring in AI War -- we found it via Tidalis -- but it's something that definitely could have been happening, especially temporarily as images were being loaded in to the game.
- The logic used for most minor faction and zombie ships for deciding to move on to a different planet should now ignore the presence of any enemy target that they are incapable of actully hitting (so neutral and player-ally Dyson Gatlings won't get stuck because of mk5 ships on the planet, etc).
- Fixed bug where neinzul clusters were only checking for non-mine military enemy units to see if they should spawn their internal squadrons. Now checks all enemy units. Will still not trigger on scouts unless it's a privacy cluster (though it will trigger in that case, it hasn't been for a while).
- Reworked the AutoCreateUnitOutside behavior used by Neinzul Clusters and Hybrid Hive Spawners to not require that the source ship still exist when the command is processed, and to be triggered on death, so that taking out a cluster in one shot does not bypass its spawning of its internal squadrons.
- AI ships that are immune to force fields will never now prioritize attacking them over ships under it (this makes raid starships way more dangerous than before in the hands of the AI, incidentally). It was previously simply a property being mis-applied on some ships that later got ff immunity belatedly. Now it automatically removes that flag for anything with the immunity.
- All guardians are now immune to being insta-killed.
- Fixed an inaccuracy in the Zenith Reserve tooltip.
- Fixed an inaccuracy in the decoy drone description.
- Previously, using 0 as the seed on some map types could cause the game to lock up. Fixed.
- Fixed an inaccuracy in the Tachyon Guardian description.
- Fixed a longstanding bug where modules would not always draw on top of their parent ship.
- Fixed an extremely longstanding bug (since pre-1.0) where in certain rare circumstances, specific harvesters could not be built.
- Fixed an inaccuracy in the Armored Golem description text.
- Clarified the description text on Zenith SpaceTime Manipulators and Speed Boosters to note that they affect all friendly ships EXCEPT minor faction ships (in other words, your ships and allied human ships).
- Previously, speed boosters and similar could override the cap of things like gravity drills, which made combos like gravity drills plus logistics command stations ridiculously overpowered. Fixed.
- Fixed a bug in the resource flows that could previously cause self-building ships to stall out, most notably force fields under some various circumstances (such as being shot, but not just limited to that).
- Fixed a bug that could sometimes cause the health of a self-building ship to be artificially too-high. This could cause all sorts of problems, such as engineers ceasing helping to repair it, etc.
- Fixed a related bug that could sometimes cause the remaining time-to-build to be massively incorrectly reported.
- Previously, EMP detonations were causing force fields to blink on and off rather than disabling them completely. Fixed.
- Fixed an issue that previously existed where when ships were group-moving and speed-boosted, but some of the ships were immune to speed boosting, and those ships would then get left behind.
- Previously, very old games were not having their AI units upgraded to their new counterparts properly. Fixed.
- Previously, the "Show Ship Recharge Bars" setting was not properly being read out of the settings file into the settings visual display, causing it to reset to the default if players closed the application and later restarted it and opened the settings screen again. Fixed.
- Fixed bug since the first Unity versions where disabling a trial-mode expansion would not fully bring the game out of trial mode (even if it was the only trial-mode piece left) until you restarted the application. This also fixes the same bug for when a valid license key was actually entered and previously the game had to be restarted before that key fully "took."
- If a handicap was previously set on a player, then it wouldn't get reset properly when a new game or tutorial was started. This is a bug going all the way back to 1.0 or before, apparently. Fixed.
- Previously, the Zenith Power Generator did not show up in the reactors quick-button lists. Fixed.
- Fixed a bug that was causing the Warp Jumper AI type to not always be able to attack any human planet that wasn't warp jammed.
- Previously, when a bully or assassin AI type could not find a valid planet to attack belonging to the weakest/strongest player (respectively), they would warp in to ???. Now they will warp in against other players if their favorite target is not available.
- Put in more exception-preventing code in the single-select dropdowns to prevent a rare issue.
- Fixed loooooongstanding bug where a completed game would not show up on the high scores list if another record was already there with the same map seed and a higher score. It will now prefer a record with the IsGameOver flag, even if the score is equal or lower. Also made it log the game result more promptly after IsGameOver is set.
- Fixed several typos in the tutorial.
- The speed floor for Speed Racer and tag teamer ships wasn't working correctly with the new way that the combat style speeds are applied (as in, it was correct only on Epic). Fixed.
- The global "speed limit" was previously 150, including various speed boosts, etc. However, the "silent doubling" for player ships was applied after that. This meant that in the last version, the speed of player ships was now capping out at 150 instead of 300. Worse, because the combat style speed bonuses were previously after-the-speed-limit as with the silent doubling, those were also getting capped at 150... rather than 1200 in terms of blitz for player-controlled ships. Yikes. The new speed cap is now 1400, to account for the cumulative old cap plus a little extra wiggle room to account for even-speedier ships.
- The gravitational turret mark II/III health was unintentionally lower than mark I. Fixed.
- Previously, the "Can't use wormholes" tag was uselessly applied to mark II/III command stations. Fixed.
- En-dashes and Em-dashes are now automatically converted to hyphens when checking license key validity. This prevents issues with players typing the wrong kind of dash and it saying their license key is not valid.
- Previously, the low-power hotkey (K) would not toggle ships with build queues. Fixed.
- Fixed longstanding bugs with icon-grouping that would cause ships and health bars to be drawn in spurious places.
- Fixed bug that was having multiplied-by-square-root-of-target-armor (zenith polarizer) and multiplied-by-100-minus-percent-of-target-health-remaining (youngling vulture) attack power calculations use the minimum and maximum multipliers of the _target_ rather than the attacker. Now uses the attacker's min/max. FYI, the polarizer is supposed to have a min/max of 4x/100x and the vulture is supposed to have a min/max of 10x/90x (the defaults both was getting most of the time were 1x/100x).
- Fixed a longstanding issue that affected a very small number of players (but more recently was suddenly more widespread... actually a good thing in terms of finding and fixing it) where the mouse edge scrolling did not work properly in some circumstances, most notably in windowed mode. The explanation on this one is long and convoluted: http://www.arcengames.com/mantisbt/view.php?id=937#c7847
- Previously, using very high or low speed modifiers would cause explosions and similar to have the inverse amount of animation speed from what they should have. Fixed.
- Converted away all internal references from Time.smoothDeltaTime to our own Game.Instance.GameDeltaTime, which prevents occasional skipping and lag in certain animations and scrolling the background stars as players pan the view, etc.
- Previously, the Neinzul Enclave Starship mercenaries used the old graphics for the actual ship, but the new graphic for the icon. Fixed.
- The objectives window will no longer act like nuked planets can be knowledge-gathered.
- The lobby Map Type, Campaign Type, Minor Faction, and AI Plot lists now properly update when an expansion is enabled or disabled in the lobby expansion list.
- Auto-explore/Auto-gather-knowledge orders were previously not being persisted through save/load, but now are.
- Auto-explore/Auto-gather-knowledge orders were previously not clearing when a ship was given another direct order, but only when given the "stop" order; they now clear whenever the ship clears all its commands (generally when given an order to do something else without the shift key held).
- Previously it was possible for using the "quick buttons" at the bottom to select ships in such a way that ships from multiple distinct planets were in your selection, leading to various problems like unintended orders. Now when using the quick buttons the selection will be completely cleared first.
- Removed the Map Button context menu from the list on the input-bindings screen, since it didn't actually have any bindings and would cause an error if you tried to open it.
- Added a couple missing localization strings for the edit-binding screen.
- Fixed a bug where very high-sensitivity mice could actually have their inputs periodically rounded down to zero when edge scrolling, or where having a very high performance profile could cause this even with normal mice.
- Fixed inaccuracy in Riot Tazer tooltip.
- Ship modules now automatically take on the cloaking status of their parent ship.
- Previously, AI ships would remain in cold storage if there were only cloaked player ships on a planet, which was problematic with things like spire penetrators. Fixed so that it only does this for ships that are cloaked AND which have no attack power (aka, scouts).
- Previously, when a ship that was actively tractoring other ships was loaded into a transport, it was still tractoring those ships. Fixed.
- Fixed a number of text wrapping and overlap issues in the ship hover window.
- Zenith Mirrors are once again immune to blades, to prevent cutlasses from one-shotting themselves against the mirrors.
- Previously, group movement could override the effects of gravity beams and drills. Fixed.
- There was also some logic that was previously causing ships to be capped at 2x their normal movement speed from some but not all kinds of speed boosters. That was some old logic that hung around too long, apparently. Fixed.
- Previously, there was a bug that was causing ships that were immune to gravity effects to not be able to be speed-boosted when group moving. Fixed.
- Previously, the total number of allowed lines in the alerts window was 16. That meant that if there were a ton of waves plus other messages, some messages could be invisible. Fixed.
- Scouts, spirecraft scouts, and spirecraft jumpships are now immune to being swallowed. Scout starships already were.
- When an EMP goes off, it is now assured to hit AI ships that were in cold storage; apparently in some rare circumstances previously it was able to miss ships in cold storage. Since this bug could possibly also happen with tachyon warheads, a safety check was put in place to make sure that was prevented, too. Nukes were already assured of not having this problem.
- A pretty sweeping internal change has been made for how group move is tracked and applied. This should hopefully resolve all the problems with the mixtures of group moving and speed boosting and speed-boost-immune ships.
- This may cause some accidental bugs if we typed something wrong (that's the architecturally-dstructive part, and why we avoided doing that before), but it should also fix the actual bugs it's meant to fix.
- The core of this change is basically tracking two group move speeds, rather than one: slowest boostable speed, and slowest non-boostable speed.
- Ships in savegames that are already group-moving might be still acting briefly wrong. Simply giving them another group-move order will straighten them out, if so. By "briefly wrong," we mean that they might be moving too fast or too slow compared to what they really should be, the same as they were already moving in the old savegame.
- This should also fix the "player ships are always moving too slowly" bug that was in the last version (it was really just a group-move thing).
- Fixed bugs with ship coordination where ships left behind on a planet by the coordinator could get _really_ confused about whether to go to the appropriate wormhole to catch up or to go to the coordinator's coordinates.
- Fixed a bug with various beam weapons where the firing ship would stay slightly out of range and the beam wouldn't hit anything. Will now always fire such that the beam will reach the primary target (unless stopped by some other object, in the case of human and spire beam weapons).
- The Resource Flows tab of the stats screen now uses LastEnergyProduced instead of UnitData.EnergyProduction for reporting positive energy flows, thus fixing the bug where it was inacurrately reporting the energy contribution of poor-efficiency reactors.
- The tooltips for the various random ai type options in the lobby now refresh properly when expansion-enabledness is changed, etc.
- Fixed textual bug that was making the "abilities" line in ship data always reflect high-cap numbers (notably, for armor piercing), now refreshes the abilities line if the cap has changed since the last time.
- The Bonus-ship-type-detail-window used on lobby mouseovers now snaps to the bottom of the screen rather than displaying from the same top-left as the options window if it's too tall for that to fit on the screen.
- Put in some changes to the per-second logic for command stations to make it much less likely that the auto-construction controls would "double-build", by making a command station wait about 3 seconds after being constructed to start looking at auto-build stuff, and also wait at least 1 whole second (and potentially 2) between checking the logic instead of potentially checking it at the end of one second and again at the beginning of another.
- When drawing in-game, the Settings window now snaps to the top of the screen rather than the bottom of the resource bar when the resolution is not tall enough to accomodate both.
- Fixed a surprisingly longstanding (but heretofore unrecognized) bug that was making the random number generator sometimes be highly non-random. This was leading to things like a very odd default pattern of collision offsetting.
- Really, this changes EVERYTHING about the seeding in the game. Map seeds now will give completely different (and much more varied) results, there will be less "false statistical clustering" going on, and even the patterns of where guard posts are seeded in planets looks pretty different. This bug dates back to March 6, 2009, before the game was even released -- one of the longest-standing bugs we've seen, especially of this magnitude.
- This also seems to fix the "all new ships seed in a line" bug that has been around for a while.
- Fixed another couple of bugs where the game's random number generator was recently not as random as one might have hoped. These were much more recent, in the main, as issues.
- Fixed some bugs that were inflating AI Eye seeding by roughly 2x.
- Fixed a bug that may have been causing AI ships to aggro when firing on a minor-faction ship.
- Previously, only mark V guard posts were immune to being insta-killed. Now they all are.
- Previously, the AI could still get gravitational turrets from the Zenith Trader. Fixed.
- Minor Faction ships are no longer barred from shooting at low-power AI ships. This fixes some issues with the devourer not doing its job, as well as the dyson gatlings not doing their thing always, too.
- Fixed bug where auto-knowledge-gather ships would "give up" after a few planets, even if more eligible ones were available.
- Previously there was a bug where the ship icons on the galaxy view intel summary would appear even when the proper scouting had not been done. Fixed.
- Allied minor faction ships (including asteroids) are no longer able to be seen in the planetary summary sidebar on planets where the player does not have a scout.
- Since the port to unity, the cloaked enemy ships indicator was never showing on the planetary summary sidebar. This was a pretty handy indicator, especially for helping with confusion for newer players, and it has finally been brought back.
- Previously CPA size was not scaled with unit caps. Odd that it's taken so long to notice. Anyway, fixed.
- The game will now check Enter and Return together, like it does leftalt/rightalt, etc. This should help clear up some confusion with the chat textbox on certain OSX keyboards.
- Fixed a couple of murky pieces of code that could have been desyncs, but probably were not. At least they are clearer as to being correct, now.
- Fixed another really obscure desync that no one had actually run into yet. It would only occur if one player had their UI turned off and the other didn't, and a grenade went off.
- Fixed a desync that would occur whenever the harvesters were reset in a multiplayer game.
- Previously, enemy-to-all minor faction units (like marauders and some roaming enclaves) could get protection from human forcefields, counter-sniper turrets and the like. Fixed so that these particular units cannot get those protections from any source at all (none of them have such inherently, and being an enemy-to-all precludes getting them from anyone else).
- Fixed a potential desync bug related to objects tracking which ships they've shot so far in a cycle.
- Ships that emit attrition effects are now immune to cloaking and camouflaging.
- Fixed a relatively longstanding error (since unit cap scale was introduced) in wave size computation: previously the wave size would be multiplied by the unit-cap-scale-multiplier (high = 1, normal = 0.5, low = 0.25) and then later by the ship-type-specific ship cap multiplier (e.g. on high fighter = 1, sentinel-frigate = 0.1, zenith-bombard = 0.25); the problem is that thte ship-type-specific cap was _already_ multiplied by the overall unit-cap-scale multiplier. So waves on high had the correct size, normal waves were 1/2 the correct size, and low waves were 1/4 the correct size.
- Since the balance of wave sizes has been generally acceptable lately, we don't want to just totally shatter that to fix this math mistake on our part. Instead we are fixing that but also dividing the base size of waves by 2. So waves on normal will continue to be the same size as before, waves on high will actually be half the previous size, and waves on low will be double the previous size.
- Fixed a longstanding bug where the lobby bonus-type tooltips would always display ship caps as if the base cap were 100 instead of 196.
Community Contributors
- We wish to express our gratitude to our community for its tremendous help in testing, bug reporting, suggestions, patience, good humor, and encouragement. In particular, the following members have helped us with at least one bug or suggestion (the number in parenthesis is a rough count of the number of distinct cases they helped with) :