AI War 2:The Era of Discovery
Contents
- 1 Known Issues
- 2 What's this phase all about?
- 3 Version 0.772
- 4 Version 0.771 Cleanup Aisle 1
- 5 Version 0.769-0.770 Thinking Long-Term
- 6 Version 0.768 Golem Rebirth
- 7 Version 0.767 Newly In Stock, By Zenith
- 8 Version 0.766 Target Equilibrium
- 9 Version 0.765 Game Entity Split
- 10 Version 0.764 Mercenary Surge
- 11 Version 0.763 Supersized Ship Caps
- 12 Version 0.762 Spreadshot
- 13 Version 0.761 A Badger And A Puffin
- 14 Version 0.760 Only The Start of Discovery
- 15 Version 0.759 Break The Sky
- 16 Prior Release Notes
Known Issues
- The lobby interface is currently temporary, and undergoing a complete overhaul.
- Various bugs on mantis: https://bugtracker.arcengames.com/view_all_bug_page.php
- Balance needs a lot of attention, with your help. Please tell RocketAssistedPuffin if you find anything you think needs changing.
- The tutorial is currently not as comprehensive as it could be.
- Multiplayer is temporarily disabled while we focus on tightening up the single-player loop.
- 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.
- There are a variety of ships/units that don't have proper graphics or reuse icons at the moment.
- There is not an in-game way to see and edit the control bindings yet.
- 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?
Initial thought process was described on Steam: "Retrieval of the Lost Arks" Plus an Essay, Apparently..
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.
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.
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
Version 0.772
(Not yet released -- we're still working on it!)
- 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.
- 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
Balance Tweaks
- Creates a niche mass value of 4 - immune to paralysis, and also immune to Mass Driver types. This currently is used for Macrophages so they are not being completely halted by Mass Drivers.
- For anyone modding this should hopefully be useful. Armour thickness of 85mm is the other current niche - complete immunity to all armour stat based weapons, so far.
- This is for current units only. A future unit might paralyse everything in that group, or get armour bonuses, etc.
- 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 one shot an equivalent mark starship, though.
- 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.
- Marauder Raiders now have mass of 4 to gain near immunity to Mass Drivers.
- A chunk of asteroid isn't going to stop these fellas.
- 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.
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.
- 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).
- 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.
- 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.
- 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!
- War Harvesters
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.
- PrimeObjectives
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.
- Created new wiki pages to explain:
- The way special mechanics are supposed to work: https://wiki.arcengames.com/index.php?title=AI_War_2:_Modding_Special_Mechanics
- The way to mod/develop them: https://wiki.arcengames.com/index.php?title=AI_War_2:_Special_Mechanics
- How to mod sub-nodes of entities, as a related topic: https://wiki.arcengames.com/index.php?title=AI_War_2:_Modding_Sub-Nodes_Of_Entities
- 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.
- 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.
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.
- This is actually a lot less overwhelming than the other approach, because it splits out hacking and science, and docks and direct construction.
- 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.
- 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.
- 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.
- Kind of related, we made a tutorial on how to use serialization gates: AI_War_2:_Serialization_Gates
- 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.
- 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.
- 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.
- LineUnlockedFromStart (default) means that anyone can use it right from the start IF it is in the "built_by" lists that the faction has.
- 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.
- Any entity that isn't markless must have this assigned.
- 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.