Skip to content

Target selection and threat rating

Scores the candidates an object could shoot at from per-type coefficients weighing armor, health, distance and the house's declared enemy.

Features & systemsCombat & weaponsCombat & targeting

Changed in 0.1.0

This section introduces the entity the rest of the page turns on. Anyone already writing mission sections in a rules file can skip to the five stages.

A mission is what an object is doing at this moment — guarding, moving toward a destination, hunting, harvesting, selling itself. Every object on the map is in exactly one, and the mission page lists them all. A mission is not an order the player issues and not a line of a team’s script: a player order, a script, a trigger action and the engine’s own idle handling all work by putting an object into one, and nothing below depends on how the object got there.

Each mission also owns a rules section named after it — [Guard], [Area Guard], [Hunt], [Harmless], one per entry on that list. What is written there governs every object in that mission whatever type it is, which makes a mission section the one place a behavior can be changed for all of them at once. A mission whose section is absent keeps the engine’s own values.

Four of the settings those sections carry reach the decisions on this page and on engineers, capture and sabotage. The table names the decision each one lands in, so a reader tracing an object that will not shoot back, or will not step aside, knows which section to open.

SettingWhat it decides for an object in that mission
NoThreatAt yes, no other object’s scan will accept it as a candidate. It is read from the candidate’s mission, never from the scanning object’s
RetaliateAt no, damage never makes it turn on its attacker
ScatterAt no, the object will not scatter from a threat; on this page that is what stops an object refused retaliation from stepping aside
RateThe fraction of a minute between one servicing pass of the mission and the next

Written out, one mission section looks like this.

rules.ini
[Harmless]
NoThreat=yes
Retaliate=no
Rate=.5

An object put into Harmless is passed over by every scan, never fires back, and has its mission serviced about twice a minute.

An object scans for a target only when its current mission asks it to. Five stages then resolve one target, each narrowing what the next one sees. The table runs in that order: the first stage decides whether there is a scan at all, and only the last one scores anything.

StageWhat it decides
MissionWhether to scan, the coordinate to scan from, and which target categories are wanted
Object kindRewrites those categories from the object’s own weapons and role
ScanWalks rings of cells outward from the coordinate, or the whole object list
CellOffers at most one occupant per cell
CandidateRejects what may not be attacked, then scores what survives

The survivor is assigned as the object’s target. Retaliation is a separate path that never scans.

These are the entry points that scan: the object missions that run one, plus the two team missions at the foot that make a member scan on the team’s behalf. A mission absent from this table never scans at all, so an object left in one acquires a target only by being handed one or by retaliating. The middle column gives the shape and the reach of each scan — a ring scan walks whole cell rings outward from a coordinate and stops at the radius named, which the next section derives, while a whole map scan walks the object lists instead and has no radius. The third column carries whatever else narrows the scan.

MissionScanNotes
GuardRing, guard radiusSkipped on an engineer, and on a computer-controlled aircraft that already has a target. Other existing targets are validated and may be replaced
Guard areaRing, area radius, from the home positionRuns only while the object has no target
PatrolRing, patrol radius, from the object, then re-scanned from the patrol cellAlso used by an aircraft that is patrolling with ammunition left
MoveRing, guard radiusOnly while the object has no target, only for a computer house, and never for a member of a Suicide=yes team
HuntWhole mapOutside campaigns an aircraft first asks for Tiberium processors alone — objects whose type declares a nonzero Storage — then repeats without restriction
RescueWhole mapThe result is taken only when it is within 1.5 times the area radius of the spot the mission began at
Guard, on an armed buildingRing, guard radiusNot run on an EM pulse cannon, or on a building holding a chemical missile
Team attackWhole mapThe category comes from the team mission’s Quarry
Team patrolRing, guard radiusRe-scanned from the team leader every PatrolScan minutes

On Guard, a non-engineer ground object and a human-controlled aircraft pass an existing target back through the range scan. A target that is no longer legal or within the guard radius is cleared before another candidate is considered, so the object does not keep chasing a stale target outside the area it guards. A computer-controlled aircraft keeps an existing target without this revalidation; with no target it scans normally.

Three settings stop the scan before it starts. Any of them is enough, and each is read only on a human-owned object — a computer house ignores all three:

  • NoAutoFire=yes on the object’s type;
  • the object is in Guard and either its type can cloak or it carries the CLOAK ability;
  • DeployToFire=yes on a vehicle.

Three radii are derived from GuardRange, the object type’s own guard distance in cells. The table gives each one, and the mission table above says which of the three a mission asks for. The guard radius is the one with a fallback, and the paragraph after the table follows what that fallback changes.

RadiusValue
GuardGuardRange, when it is not zero and the object is not an engineer; otherwise weapon range
AreaTwice GuardRange, or twice the longer weapon range when GuardRange is zero, clamped to at most 16 cells
PatrolThe same figure, clamped to between 7 and 16 cells

The scan walks that many whole cell rings. Where the guard radius falls back to weapon range, two things change at once: the ring count becomes the longer of the two weapon ranges in whole cells plus one, and each candidate has to pass a live range test as well. Which test that is depends on what the object carries.

  • With a primary weapon, the candidate must be in range of the weapon chosen against it.
  • With no primary weapon at all, there is no such test, and the candidate is accepted within GuardRange.

A healer — an object whose weapon damage averages below zero, such as a medic — overrides all of the above with a fixed 2 cells while it is in Guard.

An unarmed building never scans at all — the scan lives on the armed branch of the Guard mission. HasStupidGuardMode=yes additionally ends an unarmed building’s Guard processing outright, so the repair-bay handover and the weapons-factory bib clearing stop running.

An idle object settles into either Guard or Area Guard, the mission that scans at the area radius, and a member of a team always takes plain Guard. What decides between them otherwise differs by kind.

  • An infantry takes Area Guard while its house is computer-controlled and its IQ has reached the GuardArea level in [IQ]; at or above that level an armed infantry qualifies, and so does an unarmed engineer or vehicle thief, while below it every one of them takes Guard. A human-owned infantry takes Area Guard only while it carries the GUARD_AREA ability.
  • An armed vehicle takes Area Guard once that same IQ level is reached, or whenever it carries the GUARD_AREA ability. Nothing on this path asks who owns the vehicle, so a human house whose scenario gives it the IQ sends its idle vehicles out as well.
  • An armed aircraft takes Area Guard while it is computer-owned, whatever the level says.

The mission’s request is rewritten before the scan runs.

For an infantry, a vehicle or a building, a request that names no category at all is filled in from the object’s own weapons, one slot at a time. The table gives what each projectile setting contributes to that fill. The first row is the one to watch, because it ends the fill rather than adding to it.

Projectile settingCategories contributed
AV=yesVehicles, and nothing else — the answer is returned immediately, so AA and AG on the same projectile contribute nothing
AA=yesAircraft
AG=yesInfantry, vehicles and buildings

An aircraft gets no such fill. It falls through to the rewrites below, so the categories its own projectile would have contributed never reach its own scans.

On top of that fill, each kind of object rewrites the request again. The table gives one row per kind, and the row that applies is the one for the object doing the looking rather than the one being looked at.

ObjectRewrite
Anything that movesAn area request becomes a range request while the object is under a scan restriction — imposed when its path is completely blocked and its target is out of range, spread to every member when the object is in a team, and lifted as soon as a scan finds nothing. A still-empty request gains infantry, vehicles and buildings.
InfantrySee below.
VehicleA human-owned DeployToFire=yes vehicle finds nothing; otherwise only the weapon fill applies.
BuildingBoth weapon slots are added whether or not the request already named a category, a human-owned building drops buildings from the request, and the scan is forced into a ring. A building can never scan the whole map.

Infantry make the most changes, in this order:

  • A computer-owned unarmed Infiltrate=yes infantry — a flag that C4=yes and Engineer=yes also set — heads straight for the house’s recapture target when it is within 15 cells, with no scan at all; otherwise capturable buildings are added to the request.
  • A VehicleThief=yes infantry already driving toward a non-IsTrain vehicle within 15 cells keeps it, again without scanning. These two are the only paths that reach a target without scoring it.
  • An unarmed infantry that is neither of those finds nothing. An unarmed vehicle thief has buildings and aircraft struck out of its request and vehicles put in.
  • When the primary weapon’s warhead is organic, buildings, vehicles and aircraft are struck out, leaving infantry. Organic is derived, not configured: a warhead counts as organic when its Verses percentage against heavy armor is exactly 0%. This is what confines a dog or a medic to infantry.
  • A human-owned armed infantry drops buildings; a computer-owned C4=yes infantry, or one carrying the C4 ability, puts them back.
  • A Thief=yes infantry adds capturable buildings and Tiberium processors.

Two more rewrites apply to any object. A healer has its whole request replaced by infantry plus allies if it is an infantry, or vehicles plus allies if it is a vehicle. An engineer, whoever owns it, has infantry and vehicles struck out.

Every candidate the scan offers runs this gauntlet in order, and the first row that matches ends it — nothing further down is consulted and no score is computed. The left column is the test and the right is what it turns on, so a row with an empty right column has nothing else to it.

Rejected whenDetail
The candidate is in limbo, or already at zero strength
It is cloaked, its cell is not sensed by this house, and it belongs to another house
It has not yet entered the playable areaReinforcements still crossing in from off map are not targeted
Its current mission sets NoThreat=yes
It sits more than 20 leptons below ground levelA lepton is the engine’s internal distance unit; 256 of them make one cell
It is in a different movement zoneThe cell is tested on a ring scan and the candidate on a full-map scan; neither test runs for a range-limited request, nor for a building or an aircraft
It is an allyUnless this object heals or is an engineer and the ally is below full strength; a berzerk infantry — a Cyborg=yes type sent out of its mind by damage under BerzerkAllowed=yes, after which it attacks whatever is near it — ignores allegiance entirely. A healing vehicle additionally rejects an airborne ally, an ally standing in a building’s cell, and any ally that is not a vehicle
Harvester immunity is on and its type is listed in HarvesterUnitFrom the multiplayer harvester truce, or from a scenario’s HarvesterImmune setting
It is beyond the scan radiusOr, when the scan uses weapon range, out of range of the weapon chosen against it
Campaign games only, and only when the scanning house is under player control: the candidate is not the player’s, has never been discovered by the player, and is not an aircraftA computer house’s campaign scan never applies this filter
It is a building whose type sets InvisibleInGame=yes
Its kind is not among the requested categoriesA landed aircraft counts as a vehicle, and so does a building that can undeploy into one unless it is a construction yard
Skirmish and multiplayer only: its house’s country sets MultiplayPassive=yes
Its type sets LegalTarget=no
It is an IsTrain=yes type and this object is a vehicle thief
It is a Disguised=yes infantryUnless this object’s type sets DetectDisguise=yes, or AIDetectDisguise=yes is set and the scanning house is not under player control
This object’s primary projectile is AG=no and the candidate is at ground levelThis rejects every ground object, not only landed aircraft, and it reads the primary slot even when the secondary would be fired
The request asked for civilians
The request asked for capturable buildings and this is not a Capturable=yes building
A human-owned object outside a team is looking at an unarmed buildingUnless the object is an engineer, or the building can undeploy into a vehicle
This object is an engineer and the candidate is not a building, or is an ally above ConditionRed, or is an ally that costs nothing
The request asked for Tiberium processors and the candidate’s Storage is zero
Both stand in bridge cells and only one of the two is up on the bridge
A web warhead is in play and the candidate is an infantry that has been struggling for longer than a quarter of WebDurationThe second slot’s warhead is consulted when it is Webby=yes, otherwise the first slot’s

Whatever survives is scored. Five coefficients drive the score, and the table gives what each one multiplies and which way a positive value pushes the choice. All five are read from the type of the object doing the choosing, never from the candidate’s type, so retuning one of them changes what that one type prefers and nothing about how it is preferred by others.

SettingMultipliesSign
TargetEffectivenessCoefficientThe Verses percentage of the candidate’s chosen warhead against this object’s armorPositive prefers candidates that can hurt this object
TargetSpecialThreatCoefficientThe candidate type’s SpecialThreatValuePositive prefers a high SpecialThreatValue
MyEffectivenessCoefficientThe Verses percentage of this object’s chosen warhead against the candidate’s armorPositive prefers candidates this object can hurt
TargetStrengthCoefficientThe candidate’s current strength as a fraction of its maximum, from 0 to 1Positive prefers healthy candidates, negative prefers wounded ones
TargetDistanceCoefficientHow far beyond weapon range the candidate lies, and zero inside itMust be negative to penalize distance; positive rewards distant candidates

Verses is the multiplier in both effectiveness terms, read as a fraction against the candidate’s or this object’s armor classnone, wood, light, heavy or concrete.

threat score, in evaluation order
threat = ± TargetEffectivenessCoefficient × Verses of the candidate's warhead vs. my armor
+ TargetSpecialThreatCoefficient × the candidate's SpecialThreatValue
+ EnemyHouseThreatBonus (candidate belongs to the declared enemy)
+ MyEffectivenessCoefficient × Verses of my warhead vs. the candidate's armor
+ TargetStrengthCoefficient × the candidate's health fraction
+ TargetDistanceCoefficient × max(0, distance − weapon range)
+ 100000

The 100000 added to every score is fixed in the engine. EnemyHouseThreatBonus is a flat addition, applied when the candidate’s house is the one this house has declared as its enemy. The finished figure is stored as a whole number, so the fraction is discarded.

Each per-type coefficient is read with a fallback: when the type’s stored value is zero, the matching [General] setting — MyEffectivenessCoefficientDefault, TargetEffectivenessCoefficientDefault, TargetSpecialThreatCoefficientDefault, TargetStrengthCoefficientDefault and TargetDistanceCoefficientDefault — supplies the value instead. SpecialThreatValue has no such fallback.

rules.ini
[General]
TargetEffectivenessCoefficientDefault=1
TargetDistanceCoefficientDefault=-1
[MYTANK] ; example UnitType
MyEffectivenessCoefficient=2
TargetStrengthCoefficient=-0.5

MYTANK weighs what it can hurt at twice the rate, prefers wounded candidates, and takes the two global defaults for the two coefficients it does not name.

  • A house ordered to hunt everything clamps the score of any candidate that does not belong to its declared enemy down to exactly 1.
  • A request for power plants adds Power × 1000 for a building with a positive Power and zeroes anything else.
  • A request for factories zeroes a building that produces nothing.
  • A request for base defenses zeroes any candidate with no primary weapon.
  • When this object’s primary weapon sets Supress=yes, the score is halved once for every ring cell holding an allied building around the candidate’s cell, out to the FireSupress distance in [CombatDamage] — a building spanning several ring cells halves it several times. The default of 1 cell leaves no ring to walk, so the check never fires until FireSupress is raised.
  • A score of exactly zero rejects the candidate; anything else is raised to at least 1.

Both effectiveness terms, and every range test in the gauntlet, use the weapon each side would choose against the other. Each of the two slots is scored as its warhead’s Verses percentage against the target’s armor multiplied by 1000, doubled when the target is within that slot’s range, and zeroed when the slot cannot fire at that moment — no line of fire, an illegal target, or still reloading. The higher score wins and a tie takes the primary. A target that is not an object at all is treated as armor class none.

The primary slot is not always Primary. An elite object substitutes its Elite weapon into that slot, and a building resolves the slot through its plugged-in upgrades before either; the elite weapon covers both substitutions. Everything on this page that reads “primary weapon” means the weapon that slot resolves to.

When aircraft are wanted, the two passes over the flying layers run before the rings and do keep the highest score. Those passes consider aircraft and JumpJet=yes infantry only — a vehicle flying on a jumpjet locomotor matches neither pass. The ring loops that follow compare against whatever figure those passes left behind, but never update it themselves.

A ring scan stops early: once it holds any object it returns at the ring that is a quarter of the scan radius and again at the ring that is half of it. A landed aircraft is found by the ground rings whenever vehicles are wanted.

While no object has been found, each ring also weighs its cells as wall targets. Wall targeting is computer-only: a human-owned object weighs no cell at all. Beyond that, a cell is weighed only while none of these holds, and the first one that does ends the weighing there:

  1. the difficulty sets DestroyWalls=no;
  2. the cell carries no overlay, or carries one whose type is not Wall=yes;
  3. the wall is out of range of the weapon chosen against it;
  4. this object has no primary weapon, or its primary weapon names no warhead;
  5. the primary weapon’s projectile sets AG=no;
  6. the primary weapon’s warhead is not Wall=yes;
  7. the wall is unowned, or belongs to a house this one is allied with.

Only the third test reads the weapon chosen against the wall. The three after it read the primary slot whether or not that is the slot that would fire, so a secondary weapon built to break walls never makes a wall a target. A wall that passes all seven is scored by how far inside the primary weapon’s range it sits, and ends the scan at the end of the ring that found it.

The full-map scan is the only path that ranks: it walks the aircraft list and then every ground object, keeping the highest score at each step.

Damage is answered without any scan. The table runs top to bottom and the first row an object matches settles the question, so the reason a particular object did not fire back is the first row it matches and nothing below it.

ConditionRetaliates
Human-owned and already has a targetNo — player orders are not overridden
The warhead is Veinhole=yesYes, unless the object is human-owned and moving under orders
No source objectNo
The current mission sets Retaliate=noNo
The source is an allyNo
The object’s weapons average zero damage or less, or it has no primary weaponNo
The chosen weapon’s Verses against the source’s armor is 0%No
The source is an aircraft and the chosen weapon’s projectile is AA=noNo
Human-owned C4=yes infantry, or any human-owned object carrying the C4 ability, damaged by a buildingNo
Human-owned vehicle whose DeploysInto type is Artillary=yesNo
Human-owned non-building, with PlayerReturnFire=no in [CombatDamage], outside Guard, Area Guard and PatrolNo
Member of a Suicide=yes teamNo
Computer-owned, already shooting at something that scores higher than the sourceNo
OtherwiseYes

That last row is the only place a threat score is compared at full precision rather than being truncated to a whole number.

An object that does retaliate attacks the source directly, overriding its current mission. It does so at once when the source is in range; out of range, a computer house retaliates from any distance and a human house only when the source is within Sight plus half a cell.

A damaged building has a second, scan-free path besides this one: left idle with no target, it acquires its attacker directly — for a human house only with PlayerReturnFire=yes or against an aircraft.

Scattering fills the gap on either branch, and only for an object that moves. The two branches ask for different things.

An object the table allowed to retaliate, but that came out of it holding neither a target nor a destination, scatters under any of:

Turning on the attacker sets the target in the same step, so this branch is reached only where the permitted retaliation produced no attack at all: a Veinhole=yes warhead with no monster behind it to turn on, or a human-owned object whose attacker lies beyond both weapon range and Sight plus half a cell.

An object refused retaliation scatters under all of:

  • its current mission sets Scatter=yes;
  • it is untethered;
  • it is stationary;
  • it holds neither a target nor a destination;
  • it is not an aircraft;
  • any of: the object is computer-owned; PlayerScatter=yes is set; it carries the SCATTER ability.

Threat ratings that are not target selection

Section titled “Threat ratings that are not target selection”

Two settings named for threat play no part in any of the above.

ThreatPosed is what an object is worth as a danger, not what it is worth as a target. It feeds the value an object carries when a team weighs its members, the per-region threat map each house keeps, and how large a computer house’s base defense response is, which comes from the attacker’s figure and ComputerBaseDefenseResponse in [AI].

ThreatAvoidanceCoefficient is read only by the pathfinder, where it scales the threat map figure a route is allowed to cross. A team’s AvoidThreats=yes raises it to 1 for its members.

  • The undiscovered-target rejection applies in campaigns only.
  • The MultiplayPassive rejection, and an aircraft’s first pass for Tiberium processors on Hunt, apply outside campaigns only.
  • Harvester immunity comes from the multiplayer lobby’s harvester truce outside campaigns and from a scenario’s HarvesterImmune setting inside them.
  • Outside campaigns the warhead named ARTYHE has its entire Verses table replaced by fixed values, which changes every effectiveness term computed from it.

The five house-wide coefficients — DumbMyEffectivenessCoefficient, DumbTargetEffectivenessCoefficient, DumbTargetSpecialThreatCoefficient, DumbTargetStrengthCoefficient and DumbTargetDistanceCoefficient — are parsed and stored but can never be reached, because the flag that would select them is already set on every house.

Two scan categories are inert as well. Nothing ever asks for civilians, and a request that did would reject every candidate it examined. The boats category is contributed by AG=yes but is never turned into a target kind, so it neither widens nor narrows a scan.

35 of 35

KeyDescriptionValueWhen omitted
AABulletTypeAllows the projectile to be fired at targets that are in the air.booleanno
AGBulletTypeAllows the projectile to be fired at targets that are on the ground.booleanyes
AVBulletTypeNarrows the target categories the weapon contributes to a scan down to vehicles alone.booleanno
ComputerBaseDefenseResponseglobal rulesMultiplies an attacker's ThreatPosed to size the defenders a computer house calls up.integer3
EliteAircraftType, BuildingType, InfantryType, UnitTypeThe WeaponType an elite object fires in place of its primary.classnone
EnemyHouseThreatBonusglobal rulesAdded to a candidate's threat score when the candidate belongs to the house's declared enemy.floating point0
FireSupressglobal rulesHow far around a candidate target allied buildings are searched for when the firing weapon suppresses friendly fire.distance (cells)1
GuardAreaglobal rulesThe IQ level at which a computer house leaves idle objects in Area Guard instead of Guard.integer4
GuardRangeAircraftType, BuildingType, InfantryType, UnitTypeThe distance in cells an object scans for targets while guarding, overriding its weapon range.distance (cells)0
HasStupidGuardModeBuildingTypeEnds an unarmed building's Guard mission at once instead of running its idle handling.booleanyes
IsThreatRatingNodeBuildingTypeMarks a building upgrade that switches its owner's house onto the per-type threat coefficients.booleanno
IsWebImmuneInfantryTypeKeeps a webbing warhead from pinning the soldier in place.booleanno
LegalTargetNo effect in some scopes12 applicable typesWhether the type may be picked as a target by an automatic scan or by a player pointing at it.booleanVaries by type
MyEffectivenessCoefficientAircraftType, BuildingType, InfantryType, UnitTypeWeights a candidate target by how much damage this object's own warhead does to that candidate's armor.floating pointComputed
MyEffectivenessCoefficientDefaultglobal rulesThe MyEffectivenessCoefficient every object type falls back on.floating point0
NoAutoFireAircraftType, BuildingType, InfantryType, UnitTypeStops a human-owned object of this type from picking targets on its own.booleanno
NoThreatmission behaviorKeeps an object that is in this mission from being picked as a target by an automatic scan.booleanno
PlayerReturnFireglobal rulesLets human-owned objects fire back automatically outside the guard missions.booleanno
PrimaryAircraftType, BuildingType, InfantryType, UnitTypeThe WeaponType in the object type's first weapon slot.classnone
Retaliatemission behaviorWhether an object in this mission fires back at whatever damages it.booleanyes
SecondaryAircraftType, BuildingType, InfantryType, UnitTypeThe WeaponType in the object type's second weapon slot.classnone
SpecialThreatValueAircraftType, BuildingType, InfantryType, UnitTypeA per-type figure that TargetSpecialThreatCoefficient scales into a candidate's threat score.floating point0
SupressWeaponTypeDiscounts a candidate target that stands near buildings allied to the firing object.booleanno
TargetDistanceCoefficientAircraftType, BuildingType, InfantryType, UnitTypeWeights a candidate target by how far beyond weapon range it lies, and not at all inside it.floating pointComputed
TargetDistanceCoefficientDefaultglobal rulesThe TargetDistanceCoefficient every object type falls back on.floating point0
TargetEffectivenessCoefficientAircraftType, BuildingType, InfantryType, UnitTypeWeights a candidate target by how much damage that candidate's warhead does to this object's armor.floating pointComputed
TargetEffectivenessCoefficientDefaultglobal rulesThe TargetEffectivenessCoefficient every object type falls back on.floating point0
TargetSpecialThreatCoefficientAircraftType, BuildingType, InfantryType, UnitTypeWeights a candidate target by the SpecialThreatValue of that candidate's type.floating pointComputed
TargetSpecialThreatCoefficientDefaultglobal rulesThe TargetSpecialThreatCoefficient every object type falls back on.floating point0
TargetStrengthCoefficientAircraftType, BuildingType, InfantryType, UnitTypeWeights a candidate target by how much of its maximum strength it still has.floating pointComputed
TargetStrengthCoefficientDefaultglobal rulesThe TargetStrengthCoefficient every object type falls back on.floating point0
ThreatPosedAircraftType, BuildingType, InfantryType, UnitTypeHow much danger the type represents, used by team weighting, the region threat map, and base-defense call-ups.integer0
VersesWarheadTypeThe percentage of a weapon's damage the warhead delivers against each armor class, in armor order.string100%,100%,100%,100%,100%
WebDurationWarheadTypeThe number of frames a webbed infantryman stays pinned.integer300
WebbyWarheadTypeThe warhead entangles the infantry it catches instead of damaging them.booleanno

History

  1. Changed0.1.0In development

    Make seeing through a disguise a stated ability

  2. Changed0.1.0In development

    Reacquire stale Guard targets