An assault consists of three component types:
It’s purpose is to coordinate a group of NPCs to follow a designed route. In this regard it is quite similar to path_corner: the differences revolve around assaults being designed for combat situations.
An assault is also far more flexible. An assault can have multiple paths that are chosen by the AI based on their surroundings and hints from the mapper. An assault can be suspended (e.g. to clear a room not directly on the chain) and resumed, again dynamically but with design-time influences. You can order an assault to pause until another event has occurred with far more precision than previous systems. This article will detail how to use them, but please be aware that AI was previously undocumented so mistakes are inevitable.
NPCs follow the structure of rally and assault points they are attached to by an AI goal.
This entity specifies what NPCs are to carry out the assault and triggers it when any conditions given are met.
- Actor(s) to affect: Enter the name of the actors that will perform the assault. This field supports wildcards, should they be needed.
- Rally Point Set: The name of the assault_rallypoint at which this assault will begin. This field can also support wildcards, which will be matched with the wildcards in Actor(s) to affect. This means that rebel_1 will go to rally_1, rebel_2 to rally_2, and so on.
- Search Type: It is also possible to specify classes. If your NPCs do not have names, or you want all NPCs of a certain type to join the assault, you can set this to 'Classname' and make the appropriate changes to Actor(s) to affect.
- Assault Cue: The goal can be set immediately after being activated, after it has received an input through the I/O system, or when the entity 'hears' gunfire depending on the setting here.
All assaults begin at a rallypoint. Specific differences are currently unknown.
- Assault Point: The first assault_assaultpoint in the chain.
- Assault Delay: The amount of time to wait here once the assault has begun before moving to the first assault_assaultpoint.
- Rally Sequence: Set a specific animation sequence for NPCs waiting to begin the assault.
- Priority: If an NPC is faced with multiple assault_rallypoints, it will choose the best from it’s knowledge or take the one with the highest priority.
The body of an assault chain. Specifies where the assault should go once it has begun. There can be any number of assault_assaultpoints in each chain and they do not need to be linked in a row. An assaultpoint can link to a rallypoint and move the assault on to a new chain.
- Assault Hint Group: Constrains NPCs in the assault to this hint group.
- Assault time out: How long to wait after eliminating all hostiles in this area before moving on.
- Clear on contact with enemies: If the assault meets enemies on it’s way to this point, it will consider it cleared and target the next point in the chain. Only really useful in non-linear assaults.
- Allow diversion: If the assault comes into contact with hostiles on the way to the point, divert to kill them and resume once the area appears clear.
- Never Timeout: Force NPCs to try and reach this point forever, with no exceptions.
- Flag: Clear this point on arrival, UNCONDITIONALLY: Move on to the next point once reaching this one regardless of any other influences.
Assaults are extremely powerful, flexible tools which in conjunction with other AI controllers can create believable strategic behaviour of infinite complexity.