M28AI's release day has arrived!
The main changes made from before were focused on compatibilty, (cpu) optimisation, and increasing its difficulty.
Compatibility
Tested M28AI with the following mods and map settings (usually this just consisted of a single game, so please let me know if you come across any issues):
- Maps with water starts (including all-water maps such as Dreadnought Chasm)
- Survival maps
- AI Wave survival mod
- Flying engineers mod
- Norush game setting
- Low unit caps
- Crazy rush
- Nomads
- BlackOps
- BrewLAN
- Max AiX modifier (IIRC 5.9)
Optimisation
Big thanks to @Jip who helped me achieve a significant reduction in the time taken by M28AI to analyse the map at the start of the game. Previously M28AI was taking more than 2 minutes on 10km maps such as polar depression, with one of the functions being run taking c.102 seconds. With Jip's help this function's time was reduced to roughly 0.2 seconds, with M28AI completing its analysis in most cases in 30s or less (slower CPUs will take longer). The devlog contains more information and profiling for this.
This also allowed me to make use of more accurate water zone generation (without increasing the analysis time).
Jip also helpfully provided code to allow M28AI to get the navmesh label (broadly, whether a particular part of the map is pathable by particular units) for a particular point on the map (which was needed for the optimised code mentioned above to work properly).
Competitveness
Various tweaks and improvements were made to make M28AI provide a harder challenge. As part of this I made sure that M28 was capable of beating RNGAI and/or DilliDalli AI on a number of maps (including those maps I'm aware of where they're capable of beating M27AI some of the time).
Rather than try and achieve >50% win rate on all these maps, I instead just aimed for a single win, and did the AI version of 'save scumming' with replays until M28AI either won the replay, or creating a new game on the map resulted in it winning. Outside of Astro Crater (where M28AI is able to beat M27AI a majority of the time) I didn't test M28AI against M27AI. This is because I realised early in the development of M28AI it was too demotivating to watch it get crushed by M27AI (wheras against RNGAI and DilliDalli AI even if it loses often it's a close fought game, providing me with motivation to try and improve M28AI as opposed to giving up).
As a rough count this process involved 109 tweaks and improvements to M28AI (examples of more impactful changes within this include T2 artillery construction, destroying obsolete radar, and basic logic for building and managing bombers).
Since I've played a grand total of 1 game against M28AI (just to make sure M28 didnt take control of my units when it was my ally against 2 enemy M28AI), I expect it will need a lot more changes to improve its performance against players and become 'cheese resistant'. Almost all games were 1v1s (since they're faster to test) so although the code was all written with the aim of working in team game scenarios, I expect these aspects of it logic will be a bit rougher around the edges.
Please let me know if you have any feedback, suggestions, or encounter bugs.