Standoffs
Contents
Purpose
Standoffs bring out advanced tactical behaviors in NPCs such as npc_combine_s
, npc_citizen
, and npc_metropolice
. The overarching idea is that NPCs involved in an ai_goal_standoff
will use cover points while advancing on their target and, optionally, stay behind an ai_battle_line
. Their preference for advancing to this line (or crossing it), as well as how aggressively they use cover, can be adjusted by the mapper. The ai_battle_line
entity also provides the option for the player to act as a battle line.
Practical applications of this setup include:
- Making Combine Soldiers weave and duck behind cover while advancing to the battle line.
- Making Civil Protection forces stand their ground at a line of the mapper's choosing.
- Making a friendly group of Citizens get into a long-distance shootout with Combine Soldiers until the player intervenes.
- Making a group of Citizens advance or retreat with the player in a firefight.
- Preventing Citizens from crossing a wide open area until some event occurs during a fight that causes everyone to charge forward.
- Generally giving any confrontation involving these entities more structure.
Half-Life 2 maps with notable examples of standoffs include d3_c17_05
(along the main street and within the metrocop garrison) and d3_c17_07
(the Alyx defense mission).
A standoff consists of two component types:
ai_goal_standoff
(one per group)ai_battle_line
(any number, potentially none)
Furthermore, NPCs should ideally have a number of info_node_hint
s, flagged with Tactical Cover Low or Tactical Cover Medium hint types appropriately located around the battlefield. NPCs that share the same hintgroup with these hints will be encouraged to use them during standoffs. For example, Combine Soldiers may crouch-run between HINT_TACTICAL_COVER_LOW points and fire at the player while crouching, or npc_metropolice
and npc_citizen
will use "peeking" animations while using a HINT_TACTICAL_COVER_LOW.
Structure
NPCs follow the rules of engagement given them by an ai_goal_standoff
. In addition, they will always stay behind any ai_battle_line
s that apply to them. There is one standoff and any number of battle lines per force.
Components
ai_goal_standoff
Specifies what NPCs are a part of the standoff and what special rules they should follow.
Keyvalues
- Reaction to tactical change: Defines how the AI should react if the standoff ends or changes. Changes listed include the leader moving (see Player battleline), enemies being killed, or hint group changing.
- Move when ready (default AI): Act as normal.
- Move when seek cover: Move when you next need to find cover.
- Move immediately: Move to a different position straight away.
- Aggressiveness: How aggressively should NPCs in this standoff behave?
- A high level will make the NPCs push forward and spend more time shooting and less hiding, and other settings permitting, move forwards as far as they can.
- A low level will make NPCs spend more time behind cover and less likely to move forwards.
- Once an active battle line is reached, settings above Medium become redundant.
- If set to 5, with smart edit off, custom standoff parameters will take affect.
- Player battleline: Find cover near the player half the time, if you are friendly towards him. This will not override any other active battle lines! Player facing has an unknown effect. If this is enabled, the player becomes the 'leader' of the standoff.
- Stay at cover location: Once a NPC has found cover, it will stick to it until the standoff is over. This disables NPCs advancing to the battle line.
- Abandon if enemies hide: End the standoff if there has been no recently known enemy activity in the area.
- CustomCoverOnReload: (!FGD) If set to '1' NPCs will reload in cover, if set to '0' they won't (It's likely they'll move to cover afterward).
- CustomMinTimeShots: (!FGD) The minimum amount of time to wait in cover.
- CustomMaxTimeShots: (not in FGD) The maximum amount of time to wait in cover.
- CustomMinShots: (!FGD) The minimum amount of shots to take before taking cover.
- CustomMaxShots: (!FGD) The maximum amount of shots to take before taking cover.
- CustomOddsCover: (!FGD) The likelihood of taking cover when shot (a number between 0 and 100).
Inputs
- Activate/Deactivate: Force the beginning or end of the standoff. A standoff usually automatically activates when hostiles are encountered and deactivates when they are dead or out of sight for long enough.
- SetAggressiveness: Manipulate the Aggressiveness keyvalue.
- Accepts
Very Low/Low/Medium/High/Very High
or0-5
where 5 equals Very High.
- Accepts
ai_battle_line
All NPCs covered by this entity will stay behind it. They may make small exceptions to round obstacles if required. The pigeon model on top of the entity signifies its direction when in-editor. Use ai_drawbattlelines
to give an in-game visualisation of battle line positions.
Battle lines can have some very interesting uses: you might perhaps parent them to a member of the standoff or use them in reverse, to keep the standoff moving forwards.
Keyvalues
- Actor(s) or squad to affect: Specify the NPCs to be involved in the standoff.Tip:Have multiple squads graded by weapons for a more dynamic battle.
- Strict: Can the player override this battle line with squad commands? This is a double negative:
Yes
means it IS strict and CANNOT be overwritten. Set toNo
to allow the player to order NPCs over the line.- Note that this keyvalue will not overwrite the standoff's aggressiveness. NPCs in a standoff obey their aggressiveness as well as your commands, and sometimes they will conflict.
Flags
- Use parent's orientation: If this flag is not checked and the battle line is parented to an NPC, when that NPC turns the battle line will turn with it. This is in almost all situations very undesirable.
Limitations and Bugs
- NPCs set to
Very Low
aggressiveness can sometimes charge out in front of the enemy entirely on their own. Nodegraph manipulation may present a solution. - Commanding squads in a standoff is difficult as they do not always follow you or your orders.
- NPCs will go over battle lines in some circumstances, such as having hostiles in sight but not range or wanting to heal another NPC.
- When choosing whether to go over a battle line, the decision is made regardless of obstacles. This can lead to large backtracks.
Example
This example map contains two ai_goal_standoff
entities and four ai_battle_line
entities: three for the rebels, one for the Combine.
- Rebels
ai_goal_standoff
- Aggressiveness: Medium. The rebels will fight with a balanced strategy.
- 3x
ai_battle_line
- 2x
battleline_platform
- Actor(s) or squad to affect:
rebel_platform_squad
. This is the one rebel standing on the platform when the map loads. - Strict: The rebel will not cross the battle line even if ordered to (the rebel is not commandable given this, but change that flag to see the effect yourself).
- The two battle lines are at 90 degree angles, so that the NPC is 'boxed in' on the platform.
- Actor(s) or squad to affect:
battleline_rebel
- Actor(s) or squad to affect:
rebel_*
. This wildcard-matches all rebels on the map (which are named rebel_1 throughrebel_4
). - Strict: No. The NPCs will not go over this battle line of their own accord, but will if ordered to by the player.
- Actor(s) or squad to affect:
- 2x
- Combine
ai_goal_standoff
- Aggressiveness: Very High. The Combine will move as far forwards as they can before reaching an impassable area or battle_line.
- 1x
ai_battle_line
battleline_combine
- Actor(s) or squad to affect:
combine_longrange
. - The other Combine squad,
combine_shortrange
, does not have a battle line and you will see them (armed with shotguns) moving the whole length of the map if they need to.
- Actor(s) or squad to affect:
There are two buttons near the player spawn, both labelled with their use. The left button sets how Aggressive the Combine are (toggles between VeryHigh and VeryLow), and the right button disables all ai_battle_line
s.