The first thing enemies will attempt to do will find cover. If the player plays passively and hangs back, the AI will attempt to flank by finding firing positions in different locations! They will also toss grenades to try to force you to relocate - though sometimes they will also do this randomly, because grenades are so fun to grab and throw back.
The AI use a sort of "Behavior Stack" that we can add or remove different behaviors from, depending on the context or via level scripting. This doesn't apply only to enemies! For example, if you manage to save some allies who have been scripted to die, they may start following you in order to help in the next encounter.
We use a "Tactics Path" system wherein only so many enemies can take a given path. Once that quota is filled, they will use different paths. This results in a kind of emergent spreading behavior that mimics tactical movement.
I'm particularly proud of the behavior stack idea mentioned previously. Similar things have been done by other studios, but the power of the behavior stack is in how it integrates so nicely with behavior trees and even utility AI systems - you can select behaviors via a set of states like a behavior tree, or by scoring and selecting one like a Utility AI system.
SPRAWL zero won't have many bosses in the traditional videogame-ey sense - we have instead opted for sporadic "mini-boss" encounters with enemies that are tough at the point in the game they have been placed, but may appear as normal enemies in later levels where the player is more powerful. Bosses will always have at least one trick that can counter them, be it by using the gravity gloves, bullet time, one of your other abilities, or a few in combination! Play around and see what works!