I've been busy restructuring the AI algorithm. The AI soldiers have three main attack strategies: standoff attack, zerg-rush attack and flank. They also have various "tasks", such as patrol, pick up weapon, investigate noise, change weapon, etc..
Previously, the task would be chosen by hard-coded logic. I changed this to use a generic algorithm, which generates a score for each task based on various parameters and picks the one with the highest score. I've being testing this and I think it improves the AI hugely. Unfortunately, now the AI is much smarter and harder to beat. So, I'm going to have to either reduce the amount of enemies, or make them weaker.