AI War 2:The Final Cycle

From Arcen Wiki
Jump to navigation Jump to search

Known Issues

  • Any bugs or requests should go to our mantis bugtracker
    • If you need to submit log files, those can generally be found under your PlayerData folder in the folder your game is installed in. The most relevant one is called ArcenDebugLog.txt. You can send us the whole thing, or just strip out relevant parts.
    • In rare cases, mainly if your entire game crashes (that almost never happens), we will need your unity player log. That gets overwritten the next time you run the game after a crash, unlike the other log. These can be found here:
      • Windows: C:\Users\username\AppData\LocalLow\Arcen Games, LLC\AIWar2\Player.log
      • macOS: ~/Library/Logs/Arcen Games, LLC/AIWar2/Player.log
      • Linux: ~/.config/unity3d/Arcen Games, LLC/AIWar2/Player.log

What Does Multiplayer Beta Mean?

Please see this link for details on multiplayer. This wound up taking up too much space in this document, so all of the multiplayer-relevant bits have been moved to the other page.

What's this phase all about?

We finally got out of the endless beta of The Great Refactor, and DLC1 has been majorly beefed-up and multiplayer is better than ever. That said, multiplayer is still in the very last stages of its own beta.

With this new phase, we have fully shifted back to working on DLC3 (The Neinzul Abyss), which will be the final DLC for the game. The various remaining kickstarter items will also be taken care of, plus some other bits that we just always wanted to add for the game, and after that we'll be moving on to other projects aside from bugfixes and balance tweaks and modder-support throughout 2022.

The target release for DLC3 is in April of 2022, and that is when we'll also have the AI War 2 Complete Edition. After that, it will just be fixing material defects, and supporting modders. We expect it to have a long life if AI War Classic is anything to go by. The game is in a really good state and only getting better, and doing a refactor of this scale near the end of the project development cycle is a sign of our commitment to that longevity. Even if you aren't giving us more money in the future for this title, we want you to be able to enjoy it for years and years.

4.003

(Not Yet Released)

  • CPA Bunkers now try not to spawn on planets with a CPA bunker already. Remove the AIP cost for killing them
    • Suggested by Strategic Sage

DLC1

  • The fallen spire and the spire infused empire should now use shared logic for determining whether to have the dark spire enter conquest mode
    • Strategic Sage indicated there was a problem
  • Add a new Galaxy Setting to allow players to prevent the Chromatic Horror from moving player structures around.
    • This is untested
    • Requested by Crawlers

DLC3

  • The Necromancer rifts journal clarifies that rifts will continue to spawn over time
  • Rift hacks can now grant 30 essence instead of 15, since people considered 15 to be too low
    • From a balance discussion on discord
  • Rift hacks to increase bodyguard caps now give double the number of bodyguards
    • From a bug report by pmm5000_1
  • Rework how Templar mark levels are chosen. Each wave leader picks a random mark level based on the AIP/Templar difficulty (at the moment, >= 180 AIP means every wave leader will be between 5 and 7; so you might get 1 mark 5, 1 mark 6 and 2 mark 7s.
  • All Templar ships that spawn from a structure (either as part of a regular wave, hacking response wave or to defend their territory, will take the mark level of the structure they spawn from. So a mark 5 castle will spawn mark 5 ships
  • Add the concept of 'Corrosion Damage'. Corrosion damage sticks on the enemy ship, and applies over time.
    • Every second the target has some of its remaining, unapplied Corrosion Damage happens to the unit; something like 8% (minumum 8 damage). This damage goes directly to the target's hull.
    • An entity-system can have an an additional flat amount of corrosion damage with the XML tags corrosion_damage=X and corrosion_damage_added_per_mark=Y
    • An entity-system can all say all_damage_is_corrosive, in which case it will all be corrosive.
      • Add a Corrosive Guardian to DLC3 as an example for using this new mechanic.
      • Corrosion damage example. I have 50 corrosion damage on me. Next second I take 8 damage, and there's 42 damage left. Someone hits me for 100 additional corrosion damage. I now have 142 corrosion damage and take 15 next second; there's 127 corrosion damage left on me

Bugfixes

  • Add some debugging code to GetWaveComposition
    • From a bug report by henry700
  • Added a new ThrowawayDrawBagCanMemLeak data type, and this internally uses our existing ThrowawayListCanMemLeak type (which is mostly used in mapgen until now).
    • These are used for very short periods of time, and are meant to be thrown to the garbage collector. I had wanted to avoid this sort of thing, but we've been having persistent intermittent issues with cross-threading issues on certain worker methods (like for wave spawn), and the RapidAntiLeakPoolable approach that I had developed is just not robust enough. I also worry about that contention on that leading to slowdown in larger games.
    • I am going to build out some more of these kinds of throwaway collections and probably will phase out a lot of the RapidAntiLeakPoolable thing since it seems to only be causing problems.
    • There is also a new interface called IDrawBag<T>, which can be used to manipulate either kind of draw bag without knowing or caring which kind it is.
      • I actually am not yet using that on any methods, because on the methods where it would be relevant, I actually want to signal that only a throwaway draw bag should be used, because the sorts of manipulations that are being done in those methods are not for permanent data.
    • As an aside, this should not be taken as a signal by modders/developers to just use the throwaway collections willy-nilly. There are many better code patterns, such as not using a collection at all and instead using an iterator/dofor, which have the benefit of both performance and better memory usage, while still having the same amount of readability.
      • This is essentially something that should be used in place of places where we were using RapidAntiLeakPoolable stuff before, because that had its own performance implications and occasional cross-threading issues. If you can refactor slightly to avoid the need for any of this, and just use an iterator, then so much the better.
    • Thanks to henry700 for the most recent report of an exception in ChooseWaveTarget.
  • A new version of StringBuilder has been added into Arcen.Universal, which is slightly more efficient than the one that microsoft provides, while providing the same functionality (the subset we use, anyhow).
    • Referencing System.Text is now something that will cause ambiguous references between our version and theirs, so just removing that reference will solve the issue for any mods that are affected.

4.002 Macrophage Live!

(Released March 8th, 2022)

  • The encyclopedia now honors the "pause when opening escape menu" options that are in settings.
    • Additionally, when you are in-game and looking at it, the header of it now says "game still running" in cyan, or "game is paused" in the same orange that the resource bar uses.
    • Thanks to trabbo for suggesting.
  • When you have a necromancer in the game, some types of AI defensive structures can be used to produce near-infinite Skeletons, Wights or Mummies. The game now swaps these structures for AI Fortresses, which should still make the planet a challenge
    • To apply this to new structures, add a tag "SwapOutForNecromancer" to those AI Defenses. With this tag the game will replace those structures with AI Fortresses when there is a Necromancer.
  • Rejigger the Necromancer starting ships to not include variants. I was worried it would encourage players to spec science into things they don't have access to, and potentially overwhelm a novice. Instead you get a lot of Base skeletons and wights.
    • This is intended to be power neutral for the player.

Bugfixes

  • Fixed an issue where two legacy xml files were removed (rather than just blanked out) as part of the 4.0 upgrade, and so installing into the existing folder the game was already in would lead to errors. These files have now returned, but are empty, and thus overwrite the old files, allowing people to install things over-top of their existing installation.
    • Also, this winds up then not relying on Steam or GOG Galaxy to properly delete the missing files, because they don't always do that. Once a file exists in the wild, we try never to remove it, only to deprecate it.
    • Thanks to trabbo for reporting.
  • Some errors were happening related to drones moving between different fleets of the AI, which I think is something that happens when you kill the drone producer. This error no longer happens, and it no longer considers that and a few other cases an error at all.
    • If the error does come up now, it also give a bit more information than before.
    • Also if this error does come up now, it properly sets things up to not endlessly spam errors about any single unit.
    • Thanks to [LA] Talderius for reporting.
  • More firmly fix a problem where Necropolises were rebuilding on planets with AI Reconquest Command Stations
    • Thanks to daniexpert for reporting
  • Add some additional randomness to the Grid map type's random connections
    • Reported by Tim_Fragmagnet on discord
  • Add some defensive code to brownout notifiers
  • Fix a typo in the fuel description
    • Reported by Tim_Fragmagnet on discord
  • Fix a flicker in the hacking difficulty estimate colour
    • Thanks to Zer0h1nder for reporting
  • Player-allied ZA Castras can no longer be hacked
    • Thanks to Zer0h1nder for reporting
  • Fixed an issue where GameCommands were using a custom ConcurrentQueue solution instead of an actual proper pool, and that was probably leading to some game commands getting added in twice (there was no protection against that, unlike in the proper pooling solutions), and thus this is likely the culprit for some of the deserialization issues that we were seeing on MP clients. It's probable that this was also causing other issues.
    • As part of this, I consolidated things to one pool rather than one pool per game command type (this was something that was required based on the nature of the pool initializer methods). A side effect of this is lower memory usage from commands in general, and fewer of them in existence during the game. Originally I had split it because I was worried about contention between multiple threads, but we're really an order of magnitude away from having to worry about that, which is good. A lot of those original design choices were because I made the changes here very early on into the refactor before I had truly tested out every aspect of performance and behavior that came over the 8 months after that. And then I just never noticed that this was a bit off.
    • Thanks to Badger, ptarth, and likely others for reporting.
  • Fixed a bug that effectively made the Macrophage never try to build Telia
    • Thanks to Relay Bot for the report
  • Fixed a bug where Macrophage wouldn't return metal to their Telia if they were being challenged to fisticuffs by a tanky hostile ship
    • Thanks to Relay Bot and Zer0h1nder for the report

Mod Updates

  • An XML property tag was renamed in the base game. This in turn broke some station keeping entities within More System Defenders (MSD) as the name of the property being set was no longer the same. This is now fixed to again call the right property.
    • Essentially the tag in question is for keeping certain station-keepers off of battlestation and citadel grants from the ODSS. Same logic is used in DLC2 for the various drone hangars.

4.001 Autobuild Automation

(Released March 7th, 2022)

  • Moved the unit encyclopedia link to the far right of the top bar.
    • Thanks to Zer0h1nder and Strategic Sage for suggesting.
  • In the event that there are too many drones created by an NPC faction, it will start deleting the excess of drones now. Additionally, it will not produce drones or release them if it would put them over cap.
    • Drone guns, on the other hand, will still fire in these cases; most likely the outcome will be older drones dying off inexplicably rapidly when that happens.
    • Thanks to Mysais for reporting.
  • A new "Raid" category has been added for planet importance options.
    • Thanks to Bummeri for suggesting.

Marauders

  • Due to report from voidlily on the Discord about Marauders exceeding drone caps some changes have been made.
    • Marauder V-Wing and Bomber drones now have 4x costs, health, and damage compared to normal.
    • Marauder drones now attrition by 15% per second when the host is lost instead of 1%.
    • Marauder Outposts now only have 5 each of both types of drones instead of 20 each.
    • Marauder Drone Frigates now only have 2 each of both drones instead of 5 each.
  • Also went ahead and adjusted Marauder Constants and Marauder Outposts.
    • Marauder Outposts now have some of their turret ring weapons baked into the outpost.
      • These would be equivalent to 5x Concussion Turrets, and 4x Fusion Turrets.
      • The Fusion Turret equivalent has a minimum mark level of two to function. Which is when outposts normally gain turrets of this type.
    • Marauder Constants now only have new outposts spawn in with 5 Concussion Turrets instead of 10. And on first mark up they only gain an additional 4 turrets protecting them instead of 8.
      • This is an average savings of 18 less turrets spawned on ally controlled worlds and 36 less turrets per world the marauders have primary ownership of.
  • For existing games this will slightly be imbalanced towards Marauders unless their now excess counts of planetary turrets get cleaned out. New games will get the full benefit of having less entities in play.

Auto-Building

  • More autobuilding changes and improvements:
    • Ships can individually override the values used for auto-spawn with XML entries:
    • autoplacement_use_custom_parameters (bool, default is false) determines whether any of the below actually matters, or if the game should attempt to place this unit by whatever thing it seems to be.
    • autoplacement_anchor (values: CenterEntity, CenterOfPlanet, GravityWell, default is CenterEntity) determines where something should be placed. For automated building the CenterEntity is the command station.
    • autoplacement_distances_adapt_with_gravwell_size (values: Static, ReduceIfBelow, IncreaseIfAbove, AlwaysAdapt, default: Static) determines whether or not the next few distances (min/max/absolute max) scale with the default gravity well size of 52k, to be held proportional to the planet size.
    • autoplacement_min_distance (int, >=0, default 0), autoplacement_max_distance (int, >autoplacement_min_distance, default 1000), autoplacement_absolute_max_distance (int, >autoplacement_max_distance default 99999999), this determines how far from the anchor something is attempted or allowed to be placed.
    • autoplacement_variance_add (FInt, >=1, default 1.01), autoplacement_variance_sub (FInt, <=1 & >=0, default 0.99), this determines how much the min/max distance requirements are relaxed each (failed) attempt.
      • So autoplacement_variance_sub="0.99" would mean that the autoplacement_min_distance would decrease by 1% each attempt. The more this value differs from FInt.One the quicker placement locations will be found, at the cost of usually being further outside of the initial anchor min/max distances.
    • autoplacement_max_tries (int, >0, default 100) is how many attempts are made in general. The more, the longer the code may run but the more chances this has to find a location at all.
      • Finding the perfect values for this is difficult, but unless there is a very specific placement needed or the space near anchor is already littered with things the code should never have to run for too long. And even if, this is all on a background thread.
    • Autobuilding is now on its own background host-only thread, so it will not block sim threads or some special global player logic (which is where it was before). Even if placing a turret takes ages the game will continue.
    • Implemented Sniper Turret Ring building. For now this is experimental (and marked as such), but in tests it works very well.
  • Building forcefields, engineers and factories no longer counts as building (weaponized) defenses, thus the helper journal for enabling these functions should now appear again if needed.

DLC3

  • Overshot how metal intensive Sapper strikecraft should be. Pulling metal costs back down a bit so they replenish faster but aren't as fast at building as they were before the buffs.
  • Fix a bug with the necropolis-swap hack
    • Thanks to Daniexpert for reporting
  • Skeleton homes now grant more bodyguards; +2 bodyguards (archer/warrior/rogue), +1 bodyguard (mage/lord)
  • For Necropolises, there was a hole where the AI might build a reconquest command station on a planet with a crippled necropolis, then the player could rebuild the necropolis, so you could have a functioning Necropolis and an AI Command station on a planet at the same time.
    • Untested, for feedback. Thanks to Daniexpert for reporting
  • Necropolis modules now do necromantic damage
    • Thanks to Pmm5000 for reminding me of this
  • Feeble Elderlings grant a bit more Essence.
  • The Necromancer can now use the Sabotage hack, just like the human empire
  • If you don't have Igors already unlocked, Igors will be available in the second rift
  • If you don't have Banshees already unlocked, Banshees will be available in the second rift
  • The first rift will also offer you a skeleton type or a wight type you don't have yet
  • Fix a bug where Elderlings were not laying eggs
    • Thanks to Sage for reporting
  • The 'move necropolis' hack no longer lists the necropolis you want to move as an option.
    • Thanks to Daniexpert for reporting
  • Decrease the skeleton lord's bonus damage
    • From Daniexpert's feedback
  • Templar Constructors are now much slower and more powerful. In addition they grant a good amount of Science and Hacking.
    • The goal is to strongly reward good strategy (killing these constructors will really limit the Templar's expansion), buffing the player strategically and with resources.
  • There have been a number of buffs to the Necromancer in the last couple patches, due to feedback that the Necromancer was a little more challenging than we wanted. I've tried playing with a number of balance-dials in part to try to figure out how much impact each one has. If it turns out that (say) additional bodyguards is a really big buff, that's good to know.
    • I also went (perhaps) a bit overboard with the buffs, but I'd like to know that player feedback as a much stronger necromancer makes the game more fun. Right now the game is harder than HA according to testers, so I'd like to see what people think about the game being a bit easier than HA; if it's just way more fun to feel Powerful as the necromancer then we can lean into it to find the sweet spot.
    • If it turns out that these buffs are not enough to make the game feel easier I'll make more changes, because I really would like to know how a Buffed Necromancer feels
  • Added seeding of Necromancer Utility building at the start of the game.

Bugfixes

  • Fixed a very confusing issue where if your fleet was in hold fire mode and you tried to build a command station, it would just silently fail.
    • Now hold fire mode does not block construction at all.
    • Additionally, if you don't have any builders present (or all of them are crippled or otherwise disabled), a message pops into the chat area that states that.
    • Thanks to Dismiss for reporting.
  • Fixed the tooltip on the "starting metal" option in the lobby to include the text: Default is 2.5 million (that is also the maximum, because adding more would not fit in the storage capacity of your starting command station).
    • Thanks to Incognito and Strategic Sage for reporting.
  • Fixed a couple of places in the per-second sim repair where in super duper large games it could wind up assigning the wrong unit to the central registry, as that unit died in the middle of being checked on that thread.
    • Thanks to Mysais for the save that demonstrates this.
  • Fixed an issue with the display in the escape menu claiming there were a much larger active number of shots than there really were. What it was counting was actually the number of shots that were ever registered in the current session, and that list can indeed get to be hundreds of thousands or millions of entries long, without it being a performance concern. The number of shots actually flying in the air right now is a much larger concern.
    • Thanks to SirLimbo for reporting.
  • Fixed a handful of typos.
    • Thanks to Strategic Sage for reporting, and Dvd as well.
  • Potentially fixed an issue at SetParentEntity in entity systems.
    • Thanks to Alivaril for reporting.
  • Previously, if you hacked a Zenith Miner to turn a planet nomadic, and you did not have any other nomadic planet,s it would just throw an error instead.
    • The game now has a game command for belatedly adding factions to the game (this will be the exact thing required for beacon factions to return, actually!), and it uses this to add in the nomadic planet faction, thus letting the hack work properly.
    • Confirmed that the nomadic planets work properly after addition, as part of this. This was also impacting the nomadic galaxy option.
    • Thanks to The Beast of Bognor and Incognito for reporting.
  • Fixed a bug where tachyon planning could still have a cross-threading exception.
    • Thanks to Zer0h1nder for reporting.
  • The game is now much better about enforcing two AIs when your campaign type requires it (Expert and upward).
    • If you are starting a quickstart in Expert+, it now copies the first AI if there is only one, and uses those settings for the second AI.
    • Also fixed a bug where it was not even setting the quick start to the desired value when you started a quickstart (it was always whatever was baked into the quickstart).
    • Thanks to Strategic Sage for reporting.
  • Updated A Twisted Enemy from DLC1 to be a newer copy of the quickstart that is not on the honeycomb map.
    • Thanks to Strategic Sage for reporting.

Prior Release Notes

AI War 2: The Great Refactor