New build! https://wiki.arcengames.com/index.php?title=AI_War_2:The_Great_Refactor#Beta_3.751_Faction_Processing_Groups
Friday I was out because I was just exhausted and needed a day of recovery. Others went gangbusters on that day and over the weekend working on the game, though.
There’s lots of bugfixes thanks to Badger, tom.prince, Puffin, and NR SirLimbo; improvements to contextual info provided by the ARS thanks to Badger; and the start of some of the “extended galaxy settings” from AMU being implemented into the base game thanks to NR SirLimbo.
Additionally, there’s a number of new features and improvements in the unreleased DLC3 for our testers there, including some xml work by Puffin Emeritus, which certainly deserves special mention.
The big theme of the largest remaining errors I saw after the weekend were in our random number generators and pathfinding. In both cases, neither piece of code was actually the problem at all — these were pieces of very good code that were simply canaries for “hey, two threads are using me at the same time, that doesn’t work!” In all cases, it looks like the faction-specific Long Range Planning (LRP) code was still able to overlap itself sometimes.
I think that for that to happen, you needed to have some factions that shared data. AI border aggression and relentless waves do that in any game, but if you had multiple copies of a faction, then that would also do it in the prior build. Please note, of course, that all of those cases are supposed to work fine, but that seemed to be the conditions for replicating it for now.
Today I introduced a new xml-driven piece of data called a “faction processing group,” which is basically a way for factions to say “I don’t run while those others are running. Normally the LRP logic for general factions all runs at once, with the exception of factions that are multiples of one another, or which share some other processing logic like border aggression and relentless waves do. I had existing protections in place to already try to handle this exact concept, but they were code-driven, mildly hidden because of that, and also had a few errors relating to them.
At this point, code that was a bit more scattered around is a lot more linear and has been rewritten to hopefully work quite well. In my brief testing today after finishing this, I don’t see these errors anymore, but it’s impossible to prove a negative. So if you were one of the testers running into this, please do let us know if things are still an issue. Fingers crossed, I do think I got rid of it, and also fingers crossed, this seemed to be the only category of thread left that had this sort of effect.
More to come soon.