{"name":"Arma 3: AI Config Reference","title":"Arma 3: AI Config Reference","type":"topic","url":"https://community.bistudio.com/wiki/Arma_3:_AI_Config_Reference","revid":373242,"updated":"2025-04-12T22:20:55Z","aliases":[],"markdown":"> [!NOTE]\n> Note that this is the relevant page for Arma 3 AI configuration. Implementations for older Arma titles differ somewhat, but are irrelevant for Arma 3.\n\n## CfgBrains Config Reference\n\nAs of Arma 3 v2.00 it contains three classes\n\n- DefaultAnimalBrain\n- DefaultCivilianBrain\n- DefaultSoldierBrain\n\nEach of which contains a Components class. Only DefaultSoldierBrain includes any components by default.\n\nSources:\n\n1. [oukej, BI-Forums, AI Discussion](https://forums.bohemia.net/forums/topic/150499-ai-discussion-dev-branch/?do=findComment&comment=3367671)\n1. [klamacz, BI-Forums, AI Discussion](https://forums.bohemia.net/forums/topic/150499-ai-discussion-dev-branch/?page=168&tab=comments#comment-3075074)\n1. [.kju, BI-Forums, AI must have better autonomy.](https://forums.bohemia.net/forums/topic/217481-ai-must-have-better-autonomy/?do=findComment&comment=3300586)\n\n> [!IMPORTANT]\n> Source 2 states that you can create a custom soldier brain, but nowhere is it stated which brain a unit will use.\n\n### AIBrainAimingErrorComponent\n\n#### B\n\n##### best/worstDecreaseTime\n\n**Description:** How long (in seconds) it should take a 1 and 0 skilled unit respectivelly to stabilize their aim completely\n\n###### bestDecreaseTime\n\n**Type:** Float\n\n**Default:** 0.2\n\n###### worstDecreaseTime\n\n**Type:** Float\n\n**Default:** 2\n\n#### D\n\n##### damageCoef\n\n**Type:** Float\n\n**Default:** 10\n\n**Description:** Importance of damage of entity, multiplier\n\n#### F\n\n##### fatigueCoef\n\n**Type:** Float\n\n**Default:** 10\n\n**Description:** Importance of damage of entity, multiplier\n\n#### L\n\n##### lostTargetCoef\n\n**Type:** Float\n\n**Default:** 3\n\n**Description:** Importance of loosing target event, multiplier\n\n##### lostTargetTimeMax\n\n**Type:** Float\n\n**Default:** 3\n\n**Description:** How long error is raising after loosing sight of target\n\n##### lostTargetTimeMin\n\n**Type:** Float\n\n**Default:** 0.5\n\n**Description:** How soon after loosing sight of target, error starts to raise\n\n#### M\n\n##### maxAngularError\n\n**Type:** Float\n\n**Default:** 0.1309\n\n**Description:** Half of the error cone in radians\n\n##### maxAngularErrorTurrets\n\n**Type:** Float\n\n**Default:** ? (*0.0872*, but sources do not all match)\n\n**Description:** Half of the error cone in radians, used for turrets\n\n##### movingInfluence\n\n**Type:** Float\n\n**Default:** 1\n\n**Description:** Importance of moving in algorithm, multiplier\n\n#### S\n\n##### shootingInfluence\n\n**Type:** Float\n\n**Default:** 0.4\n\n**Description:** Importance of shooting in algorithm, multiplier\n\n##### suppressionCoef\n\n**Type:** Float\n\n**Default:** 0.5\n\n**Description:** Importance of suppression value, multiplier\n\n#### T\n\n##### turningInfluence\n\n**Type:** Float\n\n**Default:** 1\n\n**Description:** Importance of turning in algorithm, multiplier\n\n### AIBrainCountermeasuresComponent\n\n#### C\n\n##### CMCheckDelay\n\n**Type:** Float\n\n**Default:** 0.8\n\n##### CMOnTargettedProbability\n\n**Type:** Float\n\n**Default:** 0.1\n\n#### N\n\n##### nonLeaderSmokeProbability\n\n**Type:** Float\n\n**Default:** 0.1\n\n#### M\n\n##### minimalThrowDistance\n\nClarify\n\n**Type:** Integer\n\n**Default:** 900\n\n##### minReactionTime\n\n**Type:** Float\n\n**Default:** 0.1\n\n##### maxReactionTime\n\n**Type:** Float\n\n**Default:** 3\n\n#### R\n\n##### randomReactionTimePercent\n\n**Type:** Float\n\n**Default:** 0.2\n\n#### S\n\n##### suppressionThreshold\n\n**Type:** Float\n\n**Default:** 0.8\n\n##### suppressionTimerMax\n\n**Type:** Float\n\n**Default:** 2\n\n#### U\n\n##### useSmokeGrenadeDelay\n\n**Type:** Integer\n\n**Default:** 20\n\n### AIBrainSuppressionComponent\n\n#### C\n\n##### cause...\n\n**Type:** Float\n\n**Description:** How much impact different danger causes will have on suppression\n\n###### causeBulletCloseWeight\n\n**Type:** Float\n\n**Default:** 0.5\n\n> [!NOTE]\n> Source 1 and 2 provides conflicting default values of 0.5 and 0.15\n\n###### causeExplosionWeight\n\n**Type:** Float\n\n**Default:** 0.5\n\n> [!NOTE]\n> Source 1 and 2 provides conflicting default values of 0.5 and 0.15\n\n###### causeFireWeight\n\n**Type:** Float\n\n**Default:** 0.5\n\n###### causeHitWeight\n\n**Type:** Float\n\n**Default:** 0.5\n\n#### D\n\n##### ...DecreaseTime\n\n**Type:** Float\n\n**Description:** How long it will take for a unit to loose suppression\n\n###### bestDecreaseTime\n\n**Type:** Float\n\n**Default:** 1\n\n**Description:** How long it will take for a skill 1 unit to loose suppression[*citation needed*]\n\n###### worstDecreaseTime\n\n**Type:** Float\n\n**Default:** 10\n\n**Description:** How long it will take for a skill 0 unit to loose suppression[*citation needed*]\n\n#### M\n\n##### maxSuppression\n\n**Type:** Float\n\n**Default:** 1.0\n\n**Description:** Maximum level of suppression\n\n##### suppressionRange\n\n**Type:** Float\n\n**Default:** 1.0 / 20.0 ?\n\n**Description:** Default suppression range, if not provided by ammo type\n\n> [!NOTE]\n> Source 1 and 2 provides conflicting default values of 1.0 and 20.0\n\n##### suppressionThreshold\n\n**Type:** Float\n\n**Default:** 0.7\n\n**Description:** Threshold to change behavior (use smoke grenades for example)\n\n### AIBrainTargetSelectorComponent\n\nAs of Arma 3 v2.00 this component appears to be unimplemented and empty.\n\n## AI Skill Config Reference\n\n### CfgAILevelPresets\n\nThis sets the values for the different presets available in Game Settings, by default there are four classes available:\n\n- AILevelHigh\n- AILevelMedium\n- AILevelLow\n- Custom\n\nEach of which feature the following properties\n\n#### D\n\n##### displayName\n\n**Type:** String\n\n**Description:** Text displayed in the dropdown menu\n\n```cpp\ndisplayName = \"Custom\"\n```\n\n#### P\n\n##### precisionAI\n\n**Type:** Float\n\n**Description:** Coefficient applied to all accuracy skills\n\n#### S\n\n##### skillAI\n\n**Type:** Float\n\n**Description:** Coefficient applied to all utility skills\n\n### CfgAISkill\n\n#### A\n\n##### aimingAccuracy\n\n**Type:** Array\n\n**Default:** {0,0,1,1}\n\n##### aimingShake\n\n**Type:** Array\n\n**Default:** {0,0,1,1}\n\n##### aimingSpeed\n\n**Type:** Array\n\n**Default:** {0,0.5,1,1}\n\n#### C\n\n##### commanding\n\n**Type:** Array\n\n**Default:** {0,0,1,1}\n\n##### courage\n\n**Type:** Array\n\n**Default:** {0,0,1,1}\n\n#### E\n\n##### endurance\n\n> [!IMPORTANT]\n> This tokenName is no longer available in Arma 3.\n\n**Type:** Array\n\n**Default:** {0,0,1,1}\n\n#### G\n\n##### general\n\n**Type:** Array\n\n**Default:** {0,0,1,1}\n\n#### R\n\n##### reloadSpeed\n\n**Type:** Array\n\n**Default:** {0,0,1,1}\n\n#### S\n\n##### spotDistance\n\n**Type:** Array\n\n**Default:** {0,0,1,1}\n\n##### spotTime\n\n**Type:** Array\n\n**Default:** {0,0,1,1}\n\n### CfgDifficultyPresets\n\n#### L\n\n##### levelAI\n\n**Type:** String\n\n**Description:** Refers to CfgAILevelPresets\n\n## AI Steering Components\n\nSubclasses of *(configFile >> \"CfgVehicles\" >> _vehicle >> \"components\")* class\n\n### AICarSteeringComponent\n\n*Default values taken from Car_F class*\n\n#### A\n\n##### allow...\n\nboolean\n\n```cpp\nallowOvertaking = true;            // overtaking is part of collision avoidance\nallowCollisionAvoidance = true;\nallowDrifting = false;            // allow using movement vector as direction\n```\n\n#### C\n\n##### commandTurnFactor\n\nHow strong AI will turn when commanded left/right\n\nfloat\n\n```cpp\ncommandTurnFactor = 1.0;\n```\n\n##### convoyPIDWeights[]\n\nArray\n\n```cpp\nconvoyPIDWeights[] = {1,0.01,0.01};\n```\n\n#### D\n\n##### differenceAngleCoef\n\nfloat\n\n```cpp\ndifferenceAngleCoef = 1.0;\n```\n\n##### doPredictForward\n\nPrediction ahead is used for both steering and analysing of shape to modify the speed\n\nBoolean\n\n```cpp\ndoPredictForward = true;\n```\n\n###### predictForwardRange[]\n\nArray\n\n```cpp\npredictForwardRange[] = { 1, 20 };\n```\n\n###### steerAheadSaturation[]\n\nSteer ahead is a point to steer to, saturated down to given range, in meters\n\nArray\n\n```cpp\nsteerAheadSaturation[] = { 0.01, 0.4 };\n```\n\n##### doRemapSpeed\n\nRemapping of maxSpeed of vehicle, for fast vehicles we want to lower the used speed\n\nBoolean\n\n```cpp\ndoRemapSpeed = true;\n```\n\n###### remapSpeedRange\n\nArray\n\n```cpp\nremapSpeedRange[] = { 30.0, 70.0 };\n```\n\n###### remapSpeedScalar\n\nArray\n\n```cpp\nremapSpeedScalar[] = { 1.0, 0.35 };\n```\n\n#### S\n\n##### speedPIDWeights\n\nControls working parameters of speed PID controller (Kp, Ki, Kd)\n\nArray\n\n```cpp\nspeedPIDWeights[] = { 0.7, 0.2, 0.0 };\n```\n\n##### speedPredictionMethod\n\nInteger: Determines the manipulability of the class.\n\n| Value | Type |\n|---|---|\n| `0` | Three angles method |\n| `1` | Wheel direction method |\n| `2` | Combined method |\n\n```cpp\nspeedPredictionMethod = 2;\n```\n\n###### ...AngleCoef\n\nFour coef's to determine how much given angle should influence slowing down\n\nFloat\n\n```cpp\nwheelAngleCoef = 0.7;\nforwardAngleCoef = 0.7;\nsteeringAngleCoef = 1.0;\ndifferenceAngleCoef = 0.4;\n```\n\n###### minSpeedToKeep\n\nParameter of predictionMethod = 1\n\nFloat\n\n```cpp\nminSpeedToKeep = 0.1;\n```\n\n###### maxWheelAngleDiff\n\nParameter of predictionMethod = 1\n\nFloat\n\n```cpp\nmaxWheelAngleDiff = 0.2616;\n```\n\n##### steeringPIDWeights\n\nControls working parameters of steering PID controller (Kp, Ki, Kd)\n\nArray\n\n```cpp\nsteeringPIDWeights[] = { 1.2, 0.1, 0.2 };\n```\n\n##### stuckMaxTime\n\nFor how long we allow to be not moving, before we consider us stuck\n\nfloat\n\n```cpp\nstuckMaxTime = 3.0;\n```\n\n### AITankSteeringComponent\n\n*Default values taken from Tank_F class*\n\n#### A\n\n##### allow...\n\nboolean\n\n```cpp\nallowOvertaking = true;            // overtaking is part of collision avoidance\nallowCollisionAvoidance = true;\nallowDrifting = false;            // allow using movement vector as direction\nallowTurnAroundInPoint = true;\n```\n\n#### C\n\n##### commandTurnFactor\n\nHow strong AI will turn when commanded left/right\n\nfloat\n\n```cpp\ncommandTurnFactor = 1.0;\n```\n\n##### convoyPIDWeights[]\n\nArray\n\n```cpp\nconvoyPIDWeights[] = {1,0,0};\n```\n\n#### D\n\n##### differenceAngleCoef\n\nfloat\n\n```cpp\ndifferenceAngleCoef = 1.0;\n```\n\n##### doPredictForward\n\nPrediction ahead is used for both steering and analysing of shape to modify the speed\n\nBoolean\n\n```cpp\ndoPredictForward = true;\n```\n\n###### predictForwardRange[]\n\nArray\n\n```cpp\npredictForwardRange[] = { 1, 20 };\n```\n\n###### steerAheadSaturation[]\n\nSteer ahead is a point to steer to, saturated down to given range, in meters\n\nArray\n\n```cpp\nsteerAheadSaturation[] = { 0.01, 0.4 };\n```\n\n##### doRemapSpeed\n\nRemapping of maxSpeed of vehicle, for fast vehicles we want to lower the used speed\n\nBoolean\n\n```cpp\ndoRemapSpeed = false;\n```\n\n###### remapSpeedRange\n\nArray\n\n```cpp\nremapSpeedRange[] = { 30.0, 70.0 };\n```\n\n###### remapSpeedScalar\n\nArray\n\n```cpp\nremapSpeedScalar[] = { 1.0, 0.35 };\n```\n\n#### M\n\n##### maxWheelAngleDiff\n\nParameter of predictionMethod = 1\n\nFloat\n\n```cpp\nmaxWheelAngleDiff = 0.2616;\n```\n\n##### minSpeedToKeep\n\nParameter of predictionMethod = 1\n\nFloat\n\n```cpp\nminSpeedToKeep = 0.1;\n```\n\n#### P\n\n##### predictForwardMaxSpeed\n\nInteger\n\n```cpp\nminSpeedToKeep = 15;\n```\n\n#### S\n\n##### speedPIDWeights\n\nControls working parameters of speed PID controller (Kp, Ki, Kd)\n\nArray\n\n```cpp\nspeedPIDWeights[] = { 0.7, 0.2, 0.0 };\n```\n\n##### speedPredictionMethod\n\nInteger: Determines the manipulability of the class.\n\n| Value | Type |\n|---|---|\n| `0` | Three angles method |\n| `1` | Wheel direction method |\n| `2` | Combined method |\n\n```cpp\nspeedPredictionMethod = 3; // ?\n```\n\n###### ...AngleCoef\n\nFour coef's to determine how much given angle should influence slowing down\n\nFloat\n\n```cpp\nwheelAngleCoef = 0.7;\nforwardAngleCoef = 0.7;\nsteeringAngleCoef = 1.0;\ndifferenceAngleCoef = 1.0;\n```\n\n##### steeringPIDWeights\n\nControls working parameters of steering PID controller (Kp, Ki, Kd)\n\nArray\n\n```cpp\nsteeringPIDWeights[] = { 1.2, 0.1, 0.2 };\n```\n\n##### stuckMaxTime\n\nFor how long we allow to be not moving, before we consider us stuck\n\nfloat\n\n```cpp\nstuckMaxTime = 3.0;\n```\n\n## Other\n\n### CfgAmmo\n\n#### A\n\n##### aiAmmoUsageFlags\n\n**Type:** Integer\n\n**Description:** Tells the AI how to use this Ammo. NOTE: Feature still WIP, some functions may not work yet or be removed later. See: [AI Devbranch](http://forums.bistudio.com/showthread.php?159711-Development-Branch-Captain-s-AI-Log&p=2945231&viewfull=1#post2945231)\n\n| Value | Type | Description |\n|---|---|---|\n| `0` | None | ??? |\n| `1` | Light | used for illumination |\n| `2` | Marking | ??? |\n| `4` | Concealment | used for smokes |\n| `8` | CounterMeasures | ??? |\n| `16` | Mine | ??? |\n| `32` | Underwater | used in underwater environment |\n| `64` | OffensiveInf | against infantry |\n| `128` | OffensiveVeh | against vehicles |\n| `256` | OffensiveAir | against air |\n| `512` | OffensiveArmour | against armored vehicles |\n\nMultiple flags can be combined by adding the values together\n\n```cpp\naiAmmoUsageFlags = 4; //for concealment only\naiAmmoUsageFlags = \"64 + 128\"; //against infantry and light vehicles\n```\n\n##### airLock\n\n**Type:** Boolean\n\n**Description:** Declares if ammo can lock on air targets. Also makes *AI* to decide whether to engage air units with the particular ammo.\n\n##### allowAgainstInfantry\n\n**Type:** Boolean\n\n**Description:** Default `true`. If `false`, the *AI* will not (deliberately) employ this weapon against infantry targets. Used to override *cost* behaviour.\n\n##### audibleFire\n\n**Type:** Float\n\n**Description:** How much can *AI* hear when given weapon is fired.\n\n```cpp\naudibleFire = 5.0;\n```\n\n#### C\n\n##### cost\n\n**Type:** Integer\n\n**Description:** *Cost-gain* evaluation is performed to choose an appropriate weapon.\n\n*Gain* includes self-preservation.\n*Cost* includes time required to complete the attack.\n\nAs a result, weapons with *high cost* are unlikely to be used against common targets, esp. when *low cost* weapons are available. Still, there may be situation where *AI* may decide to use high cost weapon, esp. when it thinks it has little chance of survival and needs to attempt destroying enemy quickly.\n\n```cpp\ncost = 5000;\n```\n\n#### D\n\n##### dangerRadiusBulletClose\n\n**Type:** Integer\n\n**Description:** Defines how far in meters the AI gets alerted by the bullet's pass. Default value -1 disables the detection. (works only for bullets, no other projectiles).\n\n```cpp\ndeflecting = -1;\n```\n\n##### dangerRadiusHit\n\n**Type:** Integer\n\n**Description:** Defines how far in meters the AI gets alerted by the projectile's impact or explosion. Default value -1 makes this distance be automatically derived from the hit and indirectHit properties (hit * 0.5 + indirectHit * indirectHitRange * 0.5 - but there's also an energy factor).\n\n```cpp\ndeflecting = -1;\n```\n\n#### M\n\n##### min/mid/maxRange...\n\n**Description:** These tokens are present in OFP only. They were badly classed in OFP, causing all weapons using this specific *bullet* to exhibit this behaviour rather than the behaviour of the *rifle*. As such they were transferred to Arma's *cfgWeapons*Clarify.\n\n**Above statement is not true**; Even in Arma 2 and Arma 2:OA, these values still exist and affect the *AI* **and only the AI** in the following ways:\n\nThe tokens are found/put on each weapons \"*firing modes*\", or on the gun itself, if it has no separate firing modesClarify.\n\n###### minRange\n\n**Type:** Float\n\n**Description:** *Minimum* engagement range for the *AI*.\n\nBelow given values, the *AI* **will not** engage but just \"*stare them down*\", even if they get shot at, and (most likely) killed.\n\n```cpp\nMinrange = 5;\n```\n\n###### minRangeProbab\n\n**Type:** Float\n\n**Description:** *Probability* declaring how ***high*** the chance is that the *AI* will engage a target at *minRange* using *this (current)* firing mode.\n\nValues are `0.0` to `1.0` where `1.0` equates to a *100% likelihood*.\n\n```cpp\nminRangeProbab = 0.02;\n```\n\n###### midRange\n\n**Type:** Float\n\n**Description:** *Mid-Range* engagement range for *AI'*s using *this (current)* firing mode.\n\n```cpp\nmidRange = 150;\n```\n\n###### midRangeProbab\n\n**Type:** Float\n\n**Description:** *Probability* declaring how ***high*** the chance is that the *AI* will engage a target at *midRange*.\n\nValues are `0.0` to `1.0` where `1.0` equates to a *100% likelihood*.\n\n```cpp\nmidRangeProbab = 0.7;\n```\n\n###### maxRange\n\n**Type:** Float\n\n**Description:** *Maximum* range possible for the *AI*.\n\nAlthough *AI's* **may** engage targets slightly beyond *maxRange*, this is how far the *AI* will try to shoot at targets. Targets definitely beyond *maxRange* are ignored.\n\n```cpp\nmaxRange = 500;\n```\n\n###### maxRangeProbab\n\n**Type:** Float\n\n**Description:** *Probability* declaring how ***high*** the chance is that the *AI* will engage a target at *maxRange* (or slightly below).\n\nValues are `0.0` to `1.0` where `1.0` equates to a *100% likelihood*.\n\n```cpp\nmaxRangeProbab = 0.51;\n```\n\n##### mineTrigger\n\n**Type:** String\n\n**Description:** is a in CfgMineTriggers defined class\n\n#### S\n\n##### suppressionRadiusBulletClose\n\n**Type:** Integer\n\n**Description:** Defines the max. distance in meters at which the AI becomes suppressed by the bullet's pass. Default value -1 disables the suppressive effect (works only for bullets, no other projectiles).\n\n```cpp\nsuppressionRadiusBulletClose = -1;\n```\n\n##### suppressionRadiusHit\n\n**Type:** Integer\n\n**Description:** Defines the max. distance in meters at which the AI becomes suppressed by the projectile's impact or explosion. Default value -1 disables the suppressive effect.\n\n```cpp\nsuppressionRadiusHit = -1;\n```\n\n#### V\n\n##### visibleFire\n\n**Type:** Float\n\n**Description:** How much does *AI* see a unit firing this weapon.\n\n```cpp\nvisibleFire = 18;\n```\n\n##### visibleFireTime\n\n**Type:** Integer\n\n**Description:** How long is one shot assumed to be noticeable by the *AI*.\n\nValues under `5` should be avoided, as *AI* can perform in cycles with 5s of no testing in between.\n\n```cpp\nvisibleFireTime = 18;\n```\n\n### CfgWeapons\n\n#### A\n\n##### aiBurstTerminable\n\n**Class:** ModeClass\n\n**Type:** Boolean\n\n**Description:** AI firemode parameter, when true, AI will terminate burst when target is dead or out of sight\n\n##### aiDispersionCoefX\n\n**Type:** Float\n\n**Description:** Dispersion multiplier for *AI* units (axis X - left to right).\n\n##### aiDispersionCoefY\n\n**Type:** Float\n\n**Description:** Dispersion multiplier for *AI* units (axis Y - top-down).\n\n##### aiRateOfFire\n\n**Class:** ModeClass\n\n**Type:** Float\n\n**Description:** Delay between shots at given *aiRateOfFireDistance*.\n\n##### aiRateOfFireDistance\n\n**Class:** ModeClass\n\n**Type:** Integer\n\n**Description:** At shorter distance delay (*aiRateOfFire*) goes linearly to zero.\n\n##### aiRateOfFireDispersion\n\n**Class:** ModeClass\n\n**Type:** Float\n\n**Description:** Property that affects the randomness of delay between shots. Value sets the maximum of the range in which a random number influencing the delay between shots is generated. 0 means the delay between shots will be the same (with given actual distance). The bigger the value the longer delay can be generated.\n\n```cpp\n// randomized delay after shot\ntimeToShot = aiRateOfFire + aiRateOfFireDispersion * Random<0,1>\n```\n\n##### autoFire\n\n**Class:** ModeClass\n\n**Type:** Boolean\n\n**Description:** If `true`, weapon will fire repeatedly all the while you hold the fire button down.\n\nAnd if `true` the gunner can use the weapon on his own discretion (no *commander* fire order needed - like *MG* type).\n\n#### M\n\n##### min/mid/maxRange...\n\n**Class:** ArmaModeClass\n\n**Type:** Integer\n\n**Description:** Together with *range* and *rangeProbab* values, defines probability to use this weapon for *AI* units at given distance.\n\n##### minRange\n\n**Type:** Integer\n\n##### minRangeProbab\n\n**Type:** Float\n\n##### midRange\n\n**Type:** Integer\n\n##### midRangeProbab\n\n**Type:** Float\n\n##### maxRange\n\n**Type:** Integer\n\n##### maxRangeProbab\n\n**Type:** Float\n\n#### O\n\n##### opticType\n\n**Class:** ItemInfo\n\n**Type:** Integer\n\n**Description:** Parameter which defines opticType of given optics. It is used together requiredOpticType to create additional fire modes with higher engagement ranges\n\n```cpp\nopticType = 0; // Typically used for optics without magnification (Default)\nopticType = 1; // Typically used for optics with magnification level between 2.5 - 5x\nopticType = 2; // Typically used for scopes with high magnification (>5x)\n```\n\n#### R\n\n##### requiredOpticType\n\n**Class:** ModeClass\n\n**Type:** Integer\n\n**Description:** Required opticType for AI to be able to use this fire mode. It is mainly use to increase maximum engagement distance of AI depending on the optics it has mount on its rifle\n\n```cpp\n        class single_close_optics1 : Single // This optic mode will be used if AI unit has optic mounted on this weapon with opticType >= 1. AI will engage between\n        {\n            requiredOpticType = 1;\n            showToPlayer = 0;\n            minRange = 2;\n            minRangeProbab = 0.05;\n            midRange = 300;\n            midRangeProbab = 0.8;\n            maxRange = 500;\n            maxRangeProbab = 0.01;\n            aiRateOfFire = 2;\n            aiRateOfFireDistance = 300;\n        };\n        class single_medium_optics1 : single_close_optics1 // Same as single_close_optics1 - requiredOpticType is inherited and therefore opticType >= 1 is required\n        {\n            minRange = 300;\n            minRangeProbab = 0.05;\n            midRange = 500;\n            midRangeProbab = 0.7;\n            maxRange = 700;\n            maxRangeProbab = 0.05;\n            aiRateOfFire = 2;\n            aiRateOfFireDistance = 500;\n        };\n        class single_far_optics1 : single_medium_optics1 // this optic mode will be only used if AI unit has optic with opticType = 2 mounted. With this fire mode AI will engage enemies up to 1km\n        {\n            requiredOpticType = 2;\n            minRange = 300;\n            minRangeProbab = 0.05;\n            midRange = 700;\n            midRangeProbab = 0.5;\n            maxRange = 1000;\n            maxRangeProbab = 0.05;\n            aiRateOfFire = 4;\n            aiRateOfFireDistance = 600;\n        };\n```\n\n#### S\n\n##### showToPlayer\n\n**Class:** ModeClass\n\n**Type:** Boolean\n\n**Description:** Some modes defined for *AI* usage (*e.g.* burst modes for full auto weapons) can be hidden from player with this parameter.\n\n### CfgVehicles\n\n#### A\n\n##### accuracy\n\nFloat: Default value = 0.02.\n\nDetermines how easy an object is to identify. Smaller values are easier to detect.\n\nTypically, buildings are 0.2, vehicles, 0.5\n\n**A value of 1000 causes the underlying class to be identified instead.** Eg bushy trees, pink trees and yellow trees, can all be 'identified' as \"trees\". The description \"bushy trees\" is then used solely when Editing. See #VehicleClass\n\n```cpp\naccuracy = 0.2;        // buildings\naccuracy = 0.5;        // small vehicles\naccuracy = 0.9;        // truck\naccuracy = 3.500000;    // sniper\naccuracy = 1.500000;    // lawsoldier\naccuracy = 1000;        // soldier // identify (most) solders as 'man'\n```\n\nRelationship to #camouflage:\n\n**accuracy** defines how hard it is for the AI to recognise the correct class of a unit. But even if it can't recognise the correct class it can still recognise it as an enemy and engage it.\n\n**camouflage** defines how hard it is for the AI to *see* that the unit is there.\n\n##### attendant\n\nBoolean: Default false\n\nUsed for 'vehicles' to repair other 'vehicles'. Thus a hospital has an attendant that can repair soldiers. Adds the action \"Heal at XXX\"\n\n```cpp\nattendant = true;\n```\n\n##### AttributeValues\n\n> [!NOTE]\n> **Eden Editor:** Editing the *AttributeValues* class of objects allows you to change the default values.\n\n###### Skill\n\nFloat: Default 0.5\n\nChanges the default Skill slider value of the unit\n\n```cpp\nclass AttributeValues\n{\n    Skill = 0.5;\n};\n```\n\n###### UnitPos\n\nInteger: Default 0\n\nChanges the default setUnitPos toolbox value of the unit\n\n| Numeric value | unitPos |\n|---|---|\n| 0 | \"AUTO\" |\n| 1 | \"DOWN\" |\n| 2 | \"MIDDLE\" |\n| 3 | \"UP\" |\n\n```cpp\nclass AttributeValues\n{\n    UnitPos = 0; // \"AUTO\"\n};\n```\n\n##### audible\n\nfloat: Default Value 1\n\n```cpp\naudible = .05;    // man\naudible = 3;    // motorcycle\naudible = 6;    // tank/ship\n```\n\nHow loud you are. The bigger value, the better the unit is heard.\n\nsee #camouflage\n\n#### C\n\n##### ...CanSee\n\nInteger\n\nUsed to describe which sensory inputs are available to which crew members.\n\n| Numeric value | CanSee.. define | Description |\n|---|---|---|\n| 1 | Radar | Enables top left radar (OA) for a vehicle (top centre in arma and OFP). |\n| 2 | Eye | Effect unknown - maybe affects AI capabilities? |\n| 4 | Optics | Effect unknown - maybe affects AI capabilities? |\n| 8 | Ear | Effect unknown - maybe affects AI capabilities? |\n| 16 | Compass | Enables top centre compass bar and digital compass in A2/OA. |\n| 32 | Peripheral | Enables small colored blobs at the edge of the screen that indicate nearby units. |\n\nMultiple values can be added (or binary ored, giving the same result) together.\n\n```cpp\ncommanderCanSee = 31;    // default\ngunnerCanSee = 4+8+16;    // default\ndriverCanSee = 2+8+16;    // default\n```\n\n```cpp\n#define CanSeeRadar 1\n#define CanSeeEye 2\n#define CanSeeOptics 4\n#define CanSeeEar 8\n#define CanSeeCompass 16\n#define CanSeeAll 31\n#define CanSeePeripheral 32\n#define CanSeeRadarC CanSeeRadar+CanSeeCompass\n```\n\n```cpp\ncommanderCanSee = CanSeeAll;\ngunnerCanSee = CanSeeOptics+CanSeeEar+CanSeeCompass;\ndriverCanSee = CanSeeEye+CanSeeEar+CanSeeCompass;\n```\n\n##### camouflage\n\nFloat: Default Value = 2.\n\nhow difficult to spot. bigger = easier\n\n```cpp\ncamouflage = 0.6;    // snipers\ncamouflage = 1;        // man\ncamouflage = 4;        // trucks\ncamouflage = 8;        // tanks\n```\n\nRelationship to #accuracy:\n\n**camouflage** defines how hard it is for the AI to *see* that the unit is there. The AI will not spot an enemy that has a camouflage setting of 0 (maybe this needs some more testing) even if it stands directly in front of it *as long as the enemy doesn't fire*.\n\n**accuracy** defines how hard it is for the AI to recognise the correct class of a unit. But even if it can't recognise the correct class it can still recognise it as an enemy and engage it.\n\nRelated TokenNames\n#accuracy, #nameSound, #camouflage\n\n##### canDeactivateMines\n\nBoolean: Default false\n\npart of the man class.\n\n```cpp\ncanDeactivateMines= true;    // SoldierEngineer\n```\n\n##### coefInside...\n\nFloat:\n\n```cpp\ncoefInside = 2;            // cost for movement inside buildings\ncoefInsideHeur = 4.3;    // estimation of cost based on in/out points\ncoefSpeedInside = 2; // we must go slowly inside houses\n```\n\nUsed by the static class for non moving objects such as buildings\n\n```cpp\ncoefInside = 1;    // forest\ncoefInsideHeur = 0.25;\n```\n\n##### cost\n\nFloat: Default Value 50,0000\n\nThis value reflects the attractiveness of the target to the enemy AI. When *all other considerations are equal*. A soldier eg is not interested in Air, despite it is highly attractive cost values. On the other hand, he is interested in a medic, since a medic (in normal configs) has a (while small) a higher cost, than others in the group, including the officer.\n\n```cpp\ncost = 10000000;    // an air vehicle is typically this value\ncost = 8;            // a medic;\ncost = 1;            // a grunt\ncost = 4;            // an officer\ncost = 0;            // most buildings;\n```\n\nRelated TokenNames: type, #cost, #threat\n\n#### D\n\n##### driveThroughEnabled\n\nDetermines if AI can decide to go through the object. This parameter skips regular mass checking if object can smashed through\n\n```cpp\ndriveThroughEnabled            = 1; // test parameter for AI knowing they can drive through the object\n```\n\n##### ejectDamageLimit\n\nFloat: If the damage value of the vehicle is higher than the ejectDamageLimit, AI will disembark the vehicle.\n\n```cpp\nejectDamageLimit = 0.75;\n```\n\n#### E\n\n##### enableSweep\n\nBoolean: Default true. Used by Helicopter class\n\n```cpp\nenableSweep = false;    / /UH60MG\n```\n\nIs sweeping over the target a valid technique for given helicopter?\n\n#### F\n\n##### formation...\n\nInteger:\n\n```cpp\nformationX = 10;    // default meters\nformationZ = 20;    // default meters\nformationTime = 10;    // default seconds\n```\n\nOne or both X Z values are used to keep objects separated (in meters) depending on\nwedge, echelon, V, single line, formations.\n\n##### fsmDanger\n\nString: Path to FSM file or CfgFSMs class\n\nFiles can be found at:\n\n- \\a3\\characters_f\\scripts\\danger.fsm\n- \\a3\\characters_f\\scripts\\formationCDanger.fsm\n\n```cpp\nfsmDanger = \"-\"; // CAManBase\nfsmDanger = \"A3\\characters_f\\scripts\\formationCDanger.fsm\"; // Civilian_F\n```\n\n##### fsmFormation\n\nString: Path to FSM file or CfgFSMs class\n\nFiles can be found at:\n\n- A3\\characters_f\\scripts\\formationCDanger.fsm\n\n```cpp\nfsmFormation = \"Formation\"; // CAManBase, referring to (configFile >> \"CfgFSMs\" >> \"Formation\")\nfsmDanger = \"A3\\characters_f\\scripts\\formationCDanger.fsm\"; // Civilian_F\n```\n\n#### G\n\n##### ...Gun...\n\nInteger:degrees\n\n```cpp\nminGunElev = -60;\nmaxGunElev = 60;\nminGunTurn = -5;\nmaxGunTurn = 5;\nminGunTurnAI = -30;\nmaxGunTurnAI = 30;\n```\n\n#### H\n\n##### ...HeadTurnAI\n\nInteger Degrees\n\n```cpp\nminHeadTurnAI = -70;    // man class\nmaxHeadTurnAI = 70;\n```\n\n#### I\n\n##### irScanGround\n\nBoolean: Default true.\n\nProbaly used to stop ai looking down\n\n```cpp\nirScanGround = false;    // tanks\n```\n\n##### irScanRange...\n\nInteger: Default 0\n\n```cpp\nirScanRange = 4000;        // outdated (since Resistance)\nirScanRangeMin = 500;    // tanks general\nirScanRangeMax = 4000;\nirScanRangeMin = 2000;    // air\nirScanRangeMax = 10000;\nirScanRangeMin = 4000;    // a vulcan\nirScanRangeMax = 10000;\n```\n\n##### irScanToEyeFactor\n\nInteger: Default 1\n\n```cpp\nirScanToEyeFactor = 2;    // air\nirScanToEyeFactor = 5;    // shilka\n```\n\n##### irTarget\n\nBoolean: Default true.\n\nUsed for (some) buildings so that they don't show up on tank radar. Save for very limited exceptions, this token should be enabled for all vehicle units.\n\nDisabling it will make the vehicle NOT to be engaged by infantry anti-tank gunners nor vehicle weapons. It will only be engaged by small arms, and only if its armor value is low enough for AI infantry to think it can damage it by shooting at it.\n\n```cpp\nirTarget = false;    // man\n```\n\n#### M\n\n##### minFireTime\n\nInteger: Default 20 seconds\n\n```cpp\nminFireTime = 20;\n```\n\nMinimal time spent firing on single target.\n\n#### N\n\n##### nameSound\n\nString: Default value: \"Target\"\n\nNamesound is used by the AI audio to indicate verbally where to go, what 'vehicle' to attack. Thus the audio speech \"move to 'rock' 3 o'clock' is derived from the *nameSound*.\n\n```cpp\nnameSound = \"rock\";\n```\n\nMany different nameSounds can be selected. Here are just a few.\n\n```cpp\nnameSound = crew;\nnameSound = target;\nnameSound = tank;\nnameSound = house;\n```\n\nThe actual descriptive text accompanying the 'sound' can be different see #displayName\n\nTypically, a collection of buildings (eg) will be configured as follows\n\n```cpp\nclass GenBuilding : NonStrategic {\n    scope=private; // internal use only\n    VehicleClass=\"Some Editor Group Name\";\n    namesound=\"house\";\n};\nclass YellowBuilding : GenBuilding {\n    scope=public;\n    name=\"YellowBuilding\";\n    model=\"Some yellow building.p3d\";\n};\n```\n\nRelated TokenNames\n#accuracy, #vehicleClass, #nameSound, #camouflage\n\n#### P\n\n##### preferRoads\n\nBoolean: Default false\n\n```cpp\npreferRoads = true;    // all vehicles\n```\n\n#### S\n\n##### sensitivityEar\n\nFloat: Default 0.0075\n\nSets how well can the given unit hear others.\nThe bigger the value, the better the hearing.\n\n```cpp\nsensitivityEar = 0.13;    // man\n```\n\n##### ...Speed\n\nFloat: In Kph.\n\nSetting maxSpeed for infantry units too low might cause problems when working with waypoints (units won't be able to fully complete them or won't move towards them).\n\n```cpp\nminSpeed = -0.5;    // range 0->1\nmaxSpeed = 80;        // default\nmaxSpeed = 30;        // tractor\nmaxSpeed = 60;        // boat\n```\n\n#### T\n\nRelated TokenNames: type, #cost, #threat\n\n##### threat\n\nfloat Array: Default Value {0.700000, 0.500000, 0.300000};\n\nHow threatening you are to unit types {Soft, Armor, Air}, respectively.\n\nThe ai for this model selects targets of opportunity, based on these values.\n\n```cpp\nthreat[] = {1, 0.0500000, 0.050000};        // soldier\nthreat[] = {1, 0.900000, 0.100000};            // law soldier\nthreat[] = {0.900000, 0.700000, 0.300000};    // bmp\n```\n\nRelated TokenNames: type, #cost, #threat\n\n##### type\n\nInteger: Default Value: Armored\n\nThis indicates the threat type of the 'vehicle'.\n\nIn well written configs, the 3 possible values are declared as defines at top of file for legibility\n\n```cpp\n#define VSoft 0\n#define VArmor 1\n#define VAir 2\n\ntype = VAir;\n```\n\nVehicles (and buildings) are armoured, humans are 'soft' and aircraft (obviously) are air\n\nRelated TokenNames: type, #cost, #threat\n\n#### U\n\n##### unloadInCombat\n\nBoolean: default true\n\n```cpp\nunloadInCombat = false;\n```\n\nAll true vehicles will cause ai to disembark when in combat.\n\n### CfgMoves\n\n#### V\n\n##### variantsAI[]\n\n**Type:** Array\n\n**Description:** Found in *States* when there are several variations on the same animation (usually idles) that can be played randomly.\n\nIt lists the animations to be randomly cycled. The numbers represent the probability of that animation being played, the higher the number, the more likely the animation will get to play.\n\nThe sum of these numbers is always `1`.\n\n```cpp\n//Default\nvariantsAI[] = {\"\"};\n//AidlPercMstpSnonWnonDnon\nvariantsAI[] = {\"AidlPercMstpSnonWnonDnon01\", 0.01,\n    \"AidlPercMstpSnonWnonDnon02\", 0.01,\n    \"AidlPercMstpSnonWnonDnon03\", 0.01,\n    \"AidlPercMstpSnonWnonDnon04\", 0.01,\n    \"AidlPercMstpSnonWnonDnon05\", 0.01,\n    \"AidlPercMstpSnonWnonDnon06\", 0.01,\n    \"AidlPercMstpSnonWnonDnon07\", 0.01,\n    \"AidlPercMstpSnonWnonDnon08\", 0.01,\n    \"AidlPercMstpSnonWnonDnon_idleSteady04\", 0.23,\n    \"AidlPercMstpSnonWnonDnon_idleSteady03\", 0.23,\n    \"AidlPercMstpSnonWnonDnon_idleSteady02\", 0.23,\n    \"AidlPercMstpSnonWnonDnon_idleSteady01\", 0.23};\n//ActsPsitMstpSnonWnonDnon_varSittingOnTheWall\nvariantsAI[] = {\"Mi17_Cargo02\", 0.4, \"Mi17_Cargo02_V1\", 0.1, \"Mi17_Cargo02_V2\", 0.1, \"Mi17_Cargo02_V3\", 0.1,\n    \"Mi17_Cargo02_V4\", 0.1, \"Mi17_Cargo02_V5\", 0.1, \"Mi17_Cargo02_V6\", 0.1};\n//aidlpercmstpsraswlnrdnon_S\nvariantsAI[] = {\"aidlpercmstpsraswlnrdnon_1\", 0.333, \"aidlpercmstpsraswlnrdnon_2\", 0.333, \"aidlpercmstpsraswlnrdnon_3\", 0.334};\n```\n\n##### visibleSize\n\n**Type:** Float\n\n**Description:** Found in *States*, probably used for calculating how visible a character is for the *AI*, based on his stance/animation.\n\n```cpp\nvisibleSize = 1.00012;    // SprintBaseDf                    when sprinting more visible than..\nvisibleSize = 0.700121;    // AmovPercMstpSrasWrflDnon        ..when stopped > visible than..\nvisibleSize = 0.300122;    // AmovPknlMstpSlowWrflDnon        ..when kneeling > visible than..\nvisibleSize = 0.100123;    // AmovPpneMstpSrasWrflDnon        ..when prone.\n```\n\n### CfgSurfaces\n\n#### A\n\n##### AIAvoidStance\n\nInteger: Allows restricting the AI from entering prone with two levels of emphasis\n\n| Value | Description |\n|---|---|\n| `0` | No change in behavior |\n| `1` | Less preference for going prone - avoid prone (unless stealth or suppressed or *) |\n| `2` | Almost never going prone - never prone (unless *) |\n\n```\n* means commanded, injured, animated, forced, ...\n```\n\n#### G\n\n##### grassCover\n\nFloat: Reduces visibleSize (taken from CfgMovesBasic) of unit for AI visibility movement computations (cannot make fully invisible) - it is NOT about visual drawing\n\n```cpp\ngrassCover = 0;        // Used by GdtStratisConcrete, there will be no simulated grass cover at a distance\ngrassCover = 0.05;    // Used by GdtStratisGreenGrass, there will be some simulated grass cover at a distance\n```\n\n### CfgCloudlets\n\n#### B\n\n##### blockAIVisibility\n\nSets if particles are in the AI visibility tests (default true) - false for better performance but AI is able to see through particles\n\nBoolean\n\n```cpp\nblockAIVisibility = true;\n```\n\n### CfgFormations\n\nThis class lists the formations for each side, each side containing nine classes:\n\n| CfgFormations class | formation |\n|---|---|\n| Diamond | \"DIAMOND\" |\n| EchelonLeft | \"ECH LEFT\" |\n| EcholonRight | \"ECH RIGHT\" |\n| File | \"FILE\" |\n| formColumnFixed | \"COLUMN\" |\n| Line | \"LINE\" |\n| Vee | \"VEE\" |\n| Wedge | \"WEDGE\" |\n\n#### F\n\n##### Fixed\n\nSubclass of above formation classes, contains fixed positions for formation\n\n###### FormationPositionInfoN[]\n\nArray: Sets fixed position from formation center for position N [*citation needed*]\n\n```cpp\nclass Fixed // Taken from Wedge class\n{\n    FormationPositionInfo1[] = {-1,0,0,0};\n    FormationPositionInfo2[] = {0,1,-1,0.785398};\n};\n```\n\n##### Pattern\n\nSubclass of above formation classes, contains pattern for when there are not enough Fixed positions\n\n###### FormationPositionInfoN[]\n\nArray: Sets pattern position from previous fixed/pattern position N [*citation needed*]\n\n```cpp\nclass Pattern // Taken from Wedge class\n{\n    FormationPositionInfo1[] = {-2,-1,-1,-0.785398};\n    FormationPositionInfo2[] = {-1,1,-1,0.785398};\n};\n```","sections":[{"heading":null,"level":1,"markdown":"> [!NOTE]\n> Note that this is the relevant page for Arma 3 AI configuration. Implementations for older Arma titles differ somewhat, but are irrelevant for Arma 3."},{"heading":"CfgBrains Config Reference","level":2,"markdown":"As of Arma 3 v2.00 it contains three classes\n\n- DefaultAnimalBrain\n- DefaultCivilianBrain\n- DefaultSoldierBrain\n\nEach of which contains a Components class. Only DefaultSoldierBrain includes any components by default.\n\nSources:\n\n1. [oukej, BI-Forums, AI Discussion](https://forums.bohemia.net/forums/topic/150499-ai-discussion-dev-branch/?do=findComment&comment=3367671)\n1. [klamacz, BI-Forums, AI Discussion](https://forums.bohemia.net/forums/topic/150499-ai-discussion-dev-branch/?page=168&tab=comments#comment-3075074)\n1. [.kju, BI-Forums, AI must have better autonomy.](https://forums.bohemia.net/forums/topic/217481-ai-must-have-better-autonomy/?do=findComment&comment=3300586)\n\n> [!IMPORTANT]\n> Source 2 states that you can create a custom soldier brain, but nowhere is it stated which brain a unit will use."},{"heading":"AIBrainAimingErrorComponent","level":3,"markdown":""},{"heading":"B","level":4,"markdown":""},{"heading":"best/worstDecreaseTime","level":5,"markdown":"**Description:** How long (in seconds) it should take a 1 and 0 skilled unit respectivelly to stabilize their aim completely"},{"heading":"bestDecreaseTime","level":6,"markdown":"**Type:** Float\n\n**Default:** 0.2"},{"heading":"worstDecreaseTime","level":6,"markdown":"**Type:** Float\n\n**Default:** 2"},{"heading":"D","level":4,"markdown":""},{"heading":"damageCoef","level":5,"markdown":"**Type:** Float\n\n**Default:** 10\n\n**Description:** Importance of damage of entity, multiplier"},{"heading":"F","level":4,"markdown":""},{"heading":"fatigueCoef","level":5,"markdown":"**Type:** Float\n\n**Default:** 10\n\n**Description:** Importance of damage of entity, multiplier"},{"heading":"L","level":4,"markdown":""},{"heading":"lostTargetCoef","level":5,"markdown":"**Type:** Float\n\n**Default:** 3\n\n**Description:** Importance of loosing target event, multiplier"},{"heading":"lostTargetTimeMax","level":5,"markdown":"**Type:** Float\n\n**Default:** 3\n\n**Description:** How long error is raising after loosing sight of target"},{"heading":"lostTargetTimeMin","level":5,"markdown":"**Type:** Float\n\n**Default:** 0.5\n\n**Description:** How soon after loosing sight of target, error starts to raise"},{"heading":"M","level":4,"markdown":""},{"heading":"maxAngularError","level":5,"markdown":"**Type:** Float\n\n**Default:** 0.1309\n\n**Description:** Half of the error cone in radians"},{"heading":"maxAngularErrorTurrets","level":5,"markdown":"**Type:** Float\n\n**Default:** ? (*0.0872*, but sources do not all match)\n\n**Description:** Half of the error cone in radians, used for turrets"},{"heading":"movingInfluence","level":5,"markdown":"**Type:** Float\n\n**Default:** 1\n\n**Description:** Importance of moving in algorithm, multiplier"},{"heading":"S","level":4,"markdown":""},{"heading":"shootingInfluence","level":5,"markdown":"**Type:** Float\n\n**Default:** 0.4\n\n**Description:** Importance of shooting in algorithm, multiplier"},{"heading":"suppressionCoef","level":5,"markdown":"**Type:** Float\n\n**Default:** 0.5\n\n**Description:** Importance of suppression value, multiplier"},{"heading":"T","level":4,"markdown":""},{"heading":"turningInfluence","level":5,"markdown":"**Type:** Float\n\n**Default:** 1\n\n**Description:** Importance of turning in algorithm, multiplier"},{"heading":"AIBrainCountermeasuresComponent","level":3,"markdown":""},{"heading":"C","level":4,"markdown":""},{"heading":"CMCheckDelay","level":5,"markdown":"**Type:** Float\n\n**Default:** 0.8"},{"heading":"CMOnTargettedProbability","level":5,"markdown":"**Type:** Float\n\n**Default:** 0.1"},{"heading":"N","level":4,"markdown":""},{"heading":"nonLeaderSmokeProbability","level":5,"markdown":"**Type:** Float\n\n**Default:** 0.1"},{"heading":"M","level":4,"markdown":""},{"heading":"minimalThrowDistance","level":5,"markdown":"Clarify\n\n**Type:** Integer\n\n**Default:** 900"},{"heading":"minReactionTime","level":5,"markdown":"**Type:** Float\n\n**Default:** 0.1"},{"heading":"maxReactionTime","level":5,"markdown":"**Type:** Float\n\n**Default:** 3"},{"heading":"R","level":4,"markdown":""},{"heading":"randomReactionTimePercent","level":5,"markdown":"**Type:** Float\n\n**Default:** 0.2"},{"heading":"S","level":4,"markdown":""},{"heading":"suppressionThreshold","level":5,"markdown":"**Type:** Float\n\n**Default:** 0.8"},{"heading":"suppressionTimerMax","level":5,"markdown":"**Type:** Float\n\n**Default:** 2"},{"heading":"U","level":4,"markdown":""},{"heading":"useSmokeGrenadeDelay","level":5,"markdown":"**Type:** Integer\n\n**Default:** 20"},{"heading":"AIBrainSuppressionComponent","level":3,"markdown":""},{"heading":"C","level":4,"markdown":""},{"heading":"cause...","level":5,"markdown":"**Type:** Float\n\n**Description:** How much impact different danger causes will have on suppression"},{"heading":"causeBulletCloseWeight","level":6,"markdown":"**Type:** Float\n\n**Default:** 0.5\n\n> [!NOTE]\n> Source 1 and 2 provides conflicting default values of 0.5 and 0.15"},{"heading":"causeExplosionWeight","level":6,"markdown":"**Type:** Float\n\n**Default:** 0.5\n\n> [!NOTE]\n> Source 1 and 2 provides conflicting default values of 0.5 and 0.15"},{"heading":"causeFireWeight","level":6,"markdown":"**Type:** Float\n\n**Default:** 0.5"},{"heading":"causeHitWeight","level":6,"markdown":"**Type:** Float\n\n**Default:** 0.5"},{"heading":"D","level":4,"markdown":""},{"heading":"...DecreaseTime","level":5,"markdown":"**Type:** Float\n\n**Description:** How long it will take for a unit to loose suppression"},{"heading":"bestDecreaseTime","level":6,"markdown":"**Type:** Float\n\n**Default:** 1\n\n**Description:** How long it will take for a skill 1 unit to loose suppression[*citation needed*]"},{"heading":"worstDecreaseTime","level":6,"markdown":"**Type:** Float\n\n**Default:** 10\n\n**Description:** How long it will take for a skill 0 unit to loose suppression[*citation needed*]"},{"heading":"M","level":4,"markdown":""},{"heading":"maxSuppression","level":5,"markdown":"**Type:** Float\n\n**Default:** 1.0\n\n**Description:** Maximum level of suppression"},{"heading":"suppressionRange","level":5,"markdown":"**Type:** Float\n\n**Default:** 1.0 / 20.0 ?\n\n**Description:** Default suppression range, if not provided by ammo type\n\n> [!NOTE]\n> Source 1 and 2 provides conflicting default values of 1.0 and 20.0"},{"heading":"suppressionThreshold","level":5,"markdown":"**Type:** Float\n\n**Default:** 0.7\n\n**Description:** Threshold to change behavior (use smoke grenades for example)"},{"heading":"AIBrainTargetSelectorComponent","level":3,"markdown":"As of Arma 3 v2.00 this component appears to be unimplemented and empty."},{"heading":"AI Skill Config Reference","level":2,"markdown":""},{"heading":"CfgAILevelPresets","level":3,"markdown":"This sets the values for the different presets available in Game Settings, by default there are four classes available:\n\n- AILevelHigh\n- AILevelMedium\n- AILevelLow\n- Custom\n\nEach of which feature the following properties"},{"heading":"D","level":4,"markdown":""},{"heading":"displayName","level":5,"markdown":"**Type:** String\n\n**Description:** Text displayed in the dropdown menu\n\n```cpp\ndisplayName = \"Custom\"\n```"},{"heading":"P","level":4,"markdown":""},{"heading":"precisionAI","level":5,"markdown":"**Type:** Float\n\n**Description:** Coefficient applied to all accuracy skills"},{"heading":"S","level":4,"markdown":""},{"heading":"skillAI","level":5,"markdown":"**Type:** Float\n\n**Description:** Coefficient applied to all utility skills"},{"heading":"CfgAISkill","level":3,"markdown":""},{"heading":"A","level":4,"markdown":""},{"heading":"aimingAccuracy","level":5,"markdown":"**Type:** Array\n\n**Default:** {0,0,1,1}"},{"heading":"aimingShake","level":5,"markdown":"**Type:** Array\n\n**Default:** {0,0,1,1}"},{"heading":"aimingSpeed","level":5,"markdown":"**Type:** Array\n\n**Default:** {0,0.5,1,1}"},{"heading":"C","level":4,"markdown":""},{"heading":"commanding","level":5,"markdown":"**Type:** Array\n\n**Default:** {0,0,1,1}"},{"heading":"courage","level":5,"markdown":"**Type:** Array\n\n**Default:** {0,0,1,1}"},{"heading":"E","level":4,"markdown":""},{"heading":"endurance","level":5,"markdown":"> [!IMPORTANT]\n> This tokenName is no longer available in Arma 3.\n\n**Type:** Array\n\n**Default:** {0,0,1,1}"},{"heading":"G","level":4,"markdown":""},{"heading":"general","level":5,"markdown":"**Type:** Array\n\n**Default:** {0,0,1,1}"},{"heading":"R","level":4,"markdown":""},{"heading":"reloadSpeed","level":5,"markdown":"**Type:** Array\n\n**Default:** {0,0,1,1}"},{"heading":"S","level":4,"markdown":""},{"heading":"spotDistance","level":5,"markdown":"**Type:** Array\n\n**Default:** {0,0,1,1}"},{"heading":"spotTime","level":5,"markdown":"**Type:** Array\n\n**Default:** {0,0,1,1}"},{"heading":"CfgDifficultyPresets","level":3,"markdown":""},{"heading":"L","level":4,"markdown":""},{"heading":"levelAI","level":5,"markdown":"**Type:** String\n\n**Description:** Refers to CfgAILevelPresets"},{"heading":"AI Steering Components","level":2,"markdown":"Subclasses of *(configFile >> \"CfgVehicles\" >> _vehicle >> \"components\")* class"},{"heading":"AICarSteeringComponent","level":3,"markdown":"*Default values taken from Car_F class*"},{"heading":"A","level":4,"markdown":""},{"heading":"allow...","level":5,"markdown":"boolean\n\n```cpp\nallowOvertaking = true;            // overtaking is part of collision avoidance\nallowCollisionAvoidance = true;\nallowDrifting = false;            // allow using movement vector as direction\n```"},{"heading":"C","level":4,"markdown":""},{"heading":"commandTurnFactor","level":5,"markdown":"How strong AI will turn when commanded left/right\n\nfloat\n\n```cpp\ncommandTurnFactor = 1.0;\n```"},{"heading":"convoyPIDWeights[]","level":5,"markdown":"Array\n\n```cpp\nconvoyPIDWeights[] = {1,0.01,0.01};\n```"},{"heading":"D","level":4,"markdown":""},{"heading":"differenceAngleCoef","level":5,"markdown":"float\n\n```cpp\ndifferenceAngleCoef = 1.0;\n```"},{"heading":"doPredictForward","level":5,"markdown":"Prediction ahead is used for both steering and analysing of shape to modify the speed\n\nBoolean\n\n```cpp\ndoPredictForward = true;\n```"},{"heading":"predictForwardRange[]","level":6,"markdown":"Array\n\n```cpp\npredictForwardRange[] = { 1, 20 };\n```"},{"heading":"steerAheadSaturation[]","level":6,"markdown":"Steer ahead is a point to steer to, saturated down to given range, in meters\n\nArray\n\n```cpp\nsteerAheadSaturation[] = { 0.01, 0.4 };\n```"},{"heading":"doRemapSpeed","level":5,"markdown":"Remapping of maxSpeed of vehicle, for fast vehicles we want to lower the used speed\n\nBoolean\n\n```cpp\ndoRemapSpeed = true;\n```"},{"heading":"remapSpeedRange","level":6,"markdown":"Array\n\n```cpp\nremapSpeedRange[] = { 30.0, 70.0 };\n```"},{"heading":"remapSpeedScalar","level":6,"markdown":"Array\n\n```cpp\nremapSpeedScalar[] = { 1.0, 0.35 };\n```"},{"heading":"S","level":4,"markdown":""},{"heading":"speedPIDWeights","level":5,"markdown":"Controls working parameters of speed PID controller (Kp, Ki, Kd)\n\nArray\n\n```cpp\nspeedPIDWeights[] = { 0.7, 0.2, 0.0 };\n```"},{"heading":"speedPredictionMethod","level":5,"markdown":"Integer: Determines the manipulability of the class.\n\n| Value | Type |\n|---|---|\n| `0` | Three angles method |\n| `1` | Wheel direction method |\n| `2` | Combined method |\n\n```cpp\nspeedPredictionMethod = 2;\n```"},{"heading":"...AngleCoef","level":6,"markdown":"Four coef's to determine how much given angle should influence slowing down\n\nFloat\n\n```cpp\nwheelAngleCoef = 0.7;\nforwardAngleCoef = 0.7;\nsteeringAngleCoef = 1.0;\ndifferenceAngleCoef = 0.4;\n```"},{"heading":"minSpeedToKeep","level":6,"markdown":"Parameter of predictionMethod = 1\n\nFloat\n\n```cpp\nminSpeedToKeep = 0.1;\n```"},{"heading":"maxWheelAngleDiff","level":6,"markdown":"Parameter of predictionMethod = 1\n\nFloat\n\n```cpp\nmaxWheelAngleDiff = 0.2616;\n```"},{"heading":"steeringPIDWeights","level":5,"markdown":"Controls working parameters of steering PID controller (Kp, Ki, Kd)\n\nArray\n\n```cpp\nsteeringPIDWeights[] = { 1.2, 0.1, 0.2 };\n```"},{"heading":"stuckMaxTime","level":5,"markdown":"For how long we allow to be not moving, before we consider us stuck\n\nfloat\n\n```cpp\nstuckMaxTime = 3.0;\n```"},{"heading":"AITankSteeringComponent","level":3,"markdown":"*Default values taken from Tank_F class*"},{"heading":"A","level":4,"markdown":""},{"heading":"allow...","level":5,"markdown":"boolean\n\n```cpp\nallowOvertaking = true;            // overtaking is part of collision avoidance\nallowCollisionAvoidance = true;\nallowDrifting = false;            // allow using movement vector as direction\nallowTurnAroundInPoint = true;\n```"},{"heading":"C","level":4,"markdown":""},{"heading":"commandTurnFactor","level":5,"markdown":"How strong AI will turn when commanded left/right\n\nfloat\n\n```cpp\ncommandTurnFactor = 1.0;\n```"},{"heading":"convoyPIDWeights[]","level":5,"markdown":"Array\n\n```cpp\nconvoyPIDWeights[] = {1,0,0};\n```"},{"heading":"D","level":4,"markdown":""},{"heading":"differenceAngleCoef","level":5,"markdown":"float\n\n```cpp\ndifferenceAngleCoef = 1.0;\n```"},{"heading":"doPredictForward","level":5,"markdown":"Prediction ahead is used for both steering and analysing of shape to modify the speed\n\nBoolean\n\n```cpp\ndoPredictForward = true;\n```"},{"heading":"predictForwardRange[]","level":6,"markdown":"Array\n\n```cpp\npredictForwardRange[] = { 1, 20 };\n```"},{"heading":"steerAheadSaturation[]","level":6,"markdown":"Steer ahead is a point to steer to, saturated down to given range, in meters\n\nArray\n\n```cpp\nsteerAheadSaturation[] = { 0.01, 0.4 };\n```"},{"heading":"doRemapSpeed","level":5,"markdown":"Remapping of maxSpeed of vehicle, for fast vehicles we want to lower the used speed\n\nBoolean\n\n```cpp\ndoRemapSpeed = false;\n```"},{"heading":"remapSpeedRange","level":6,"markdown":"Array\n\n```cpp\nremapSpeedRange[] = { 30.0, 70.0 };\n```"},{"heading":"remapSpeedScalar","level":6,"markdown":"Array\n\n```cpp\nremapSpeedScalar[] = { 1.0, 0.35 };\n```"},{"heading":"M","level":4,"markdown":""},{"heading":"maxWheelAngleDiff","level":5,"markdown":"Parameter of predictionMethod = 1\n\nFloat\n\n```cpp\nmaxWheelAngleDiff = 0.2616;\n```"},{"heading":"minSpeedToKeep","level":5,"markdown":"Parameter of predictionMethod = 1\n\nFloat\n\n```cpp\nminSpeedToKeep = 0.1;\n```"},{"heading":"P","level":4,"markdown":""},{"heading":"predictForwardMaxSpeed","level":5,"markdown":"Integer\n\n```cpp\nminSpeedToKeep = 15;\n```"},{"heading":"S","level":4,"markdown":""},{"heading":"speedPIDWeights","level":5,"markdown":"Controls working parameters of speed PID controller (Kp, Ki, Kd)\n\nArray\n\n```cpp\nspeedPIDWeights[] = { 0.7, 0.2, 0.0 };\n```"},{"heading":"speedPredictionMethod","level":5,"markdown":"Integer: Determines the manipulability of the class.\n\n| Value | Type |\n|---|---|\n| `0` | Three angles method |\n| `1` | Wheel direction method |\n| `2` | Combined method |\n\n```cpp\nspeedPredictionMethod = 3; // ?\n```"},{"heading":"...AngleCoef","level":6,"markdown":"Four coef's to determine how much given angle should influence slowing down\n\nFloat\n\n```cpp\nwheelAngleCoef = 0.7;\nforwardAngleCoef = 0.7;\nsteeringAngleCoef = 1.0;\ndifferenceAngleCoef = 1.0;\n```"},{"heading":"steeringPIDWeights","level":5,"markdown":"Controls working parameters of steering PID controller (Kp, Ki, Kd)\n\nArray\n\n```cpp\nsteeringPIDWeights[] = { 1.2, 0.1, 0.2 };\n```"},{"heading":"stuckMaxTime","level":5,"markdown":"For how long we allow to be not moving, before we consider us stuck\n\nfloat\n\n```cpp\nstuckMaxTime = 3.0;\n```"},{"heading":"Other","level":2,"markdown":""},{"heading":"CfgAmmo","level":3,"markdown":""},{"heading":"A","level":4,"markdown":""},{"heading":"aiAmmoUsageFlags","level":5,"markdown":"**Type:** Integer\n\n**Description:** Tells the AI how to use this Ammo. NOTE: Feature still WIP, some functions may not work yet or be removed later. See: [AI Devbranch](http://forums.bistudio.com/showthread.php?159711-Development-Branch-Captain-s-AI-Log&p=2945231&viewfull=1#post2945231)\n\n| Value | Type | Description |\n|---|---|---|\n| `0` | None | ??? |\n| `1` | Light | used for illumination |\n| `2` | Marking | ??? |\n| `4` | Concealment | used for smokes |\n| `8` | CounterMeasures | ??? |\n| `16` | Mine | ??? |\n| `32` | Underwater | used in underwater environment |\n| `64` | OffensiveInf | against infantry |\n| `128` | OffensiveVeh | against vehicles |\n| `256` | OffensiveAir | against air |\n| `512` | OffensiveArmour | against armored vehicles |\n\nMultiple flags can be combined by adding the values together\n\n```cpp\naiAmmoUsageFlags = 4; //for concealment only\naiAmmoUsageFlags = \"64 + 128\"; //against infantry and light vehicles\n```"},{"heading":"airLock","level":5,"markdown":"**Type:** Boolean\n\n**Description:** Declares if ammo can lock on air targets. Also makes *AI* to decide whether to engage air units with the particular ammo."},{"heading":"allowAgainstInfantry","level":5,"markdown":"**Type:** Boolean\n\n**Description:** Default `true`. If `false`, the *AI* will not (deliberately) employ this weapon against infantry targets. Used to override *cost* behaviour."},{"heading":"audibleFire","level":5,"markdown":"**Type:** Float\n\n**Description:** How much can *AI* hear when given weapon is fired.\n\n```cpp\naudibleFire = 5.0;\n```"},{"heading":"C","level":4,"markdown":""},{"heading":"cost","level":5,"markdown":"**Type:** Integer\n\n**Description:** *Cost-gain* evaluation is performed to choose an appropriate weapon.\n\n*Gain* includes self-preservation.\n*Cost* includes time required to complete the attack.\n\nAs a result, weapons with *high cost* are unlikely to be used against common targets, esp. when *low cost* weapons are available. Still, there may be situation where *AI* may decide to use high cost weapon, esp. when it thinks it has little chance of survival and needs to attempt destroying enemy quickly.\n\n```cpp\ncost = 5000;\n```"},{"heading":"D","level":4,"markdown":""},{"heading":"dangerRadiusBulletClose","level":5,"markdown":"**Type:** Integer\n\n**Description:** Defines how far in meters the AI gets alerted by the bullet's pass. Default value -1 disables the detection. (works only for bullets, no other projectiles).\n\n```cpp\ndeflecting = -1;\n```"},{"heading":"dangerRadiusHit","level":5,"markdown":"**Type:** Integer\n\n**Description:** Defines how far in meters the AI gets alerted by the projectile's impact or explosion. Default value -1 makes this distance be automatically derived from the hit and indirectHit properties (hit * 0.5 + indirectHit * indirectHitRange * 0.5 - but there's also an energy factor).\n\n```cpp\ndeflecting = -1;\n```"},{"heading":"M","level":4,"markdown":""},{"heading":"min/mid/maxRange...","level":5,"markdown":"**Description:** These tokens are present in OFP only. They were badly classed in OFP, causing all weapons using this specific *bullet* to exhibit this behaviour rather than the behaviour of the *rifle*. As such they were transferred to Arma's *cfgWeapons*Clarify.\n\n**Above statement is not true**; Even in Arma 2 and Arma 2:OA, these values still exist and affect the *AI* **and only the AI** in the following ways:\n\nThe tokens are found/put on each weapons \"*firing modes*\", or on the gun itself, if it has no separate firing modesClarify."},{"heading":"minRange","level":6,"markdown":"**Type:** Float\n\n**Description:** *Minimum* engagement range for the *AI*.\n\nBelow given values, the *AI* **will not** engage but just \"*stare them down*\", even if they get shot at, and (most likely) killed.\n\n```cpp\nMinrange = 5;\n```"},{"heading":"minRangeProbab","level":6,"markdown":"**Type:** Float\n\n**Description:** *Probability* declaring how ***high*** the chance is that the *AI* will engage a target at *minRange* using *this (current)* firing mode.\n\nValues are `0.0` to `1.0` where `1.0` equates to a *100% likelihood*.\n\n```cpp\nminRangeProbab = 0.02;\n```"},{"heading":"midRange","level":6,"markdown":"**Type:** Float\n\n**Description:** *Mid-Range* engagement range for *AI'*s using *this (current)* firing mode.\n\n```cpp\nmidRange = 150;\n```"},{"heading":"midRangeProbab","level":6,"markdown":"**Type:** Float\n\n**Description:** *Probability* declaring how ***high*** the chance is that the *AI* will engage a target at *midRange*.\n\nValues are `0.0` to `1.0` where `1.0` equates to a *100% likelihood*.\n\n```cpp\nmidRangeProbab = 0.7;\n```"},{"heading":"maxRange","level":6,"markdown":"**Type:** Float\n\n**Description:** *Maximum* range possible for the *AI*.\n\nAlthough *AI's* **may** engage targets slightly beyond *maxRange*, this is how far the *AI* will try to shoot at targets. Targets definitely beyond *maxRange* are ignored.\n\n```cpp\nmaxRange = 500;\n```"},{"heading":"maxRangeProbab","level":6,"markdown":"**Type:** Float\n\n**Description:** *Probability* declaring how ***high*** the chance is that the *AI* will engage a target at *maxRange* (or slightly below).\n\nValues are `0.0` to `1.0` where `1.0` equates to a *100% likelihood*.\n\n```cpp\nmaxRangeProbab = 0.51;\n```"},{"heading":"mineTrigger","level":5,"markdown":"**Type:** String\n\n**Description:** is a in CfgMineTriggers defined class"},{"heading":"S","level":4,"markdown":""},{"heading":"suppressionRadiusBulletClose","level":5,"markdown":"**Type:** Integer\n\n**Description:** Defines the max. distance in meters at which the AI becomes suppressed by the bullet's pass. Default value -1 disables the suppressive effect (works only for bullets, no other projectiles).\n\n```cpp\nsuppressionRadiusBulletClose = -1;\n```"},{"heading":"suppressionRadiusHit","level":5,"markdown":"**Type:** Integer\n\n**Description:** Defines the max. distance in meters at which the AI becomes suppressed by the projectile's impact or explosion. Default value -1 disables the suppressive effect.\n\n```cpp\nsuppressionRadiusHit = -1;\n```"},{"heading":"V","level":4,"markdown":""},{"heading":"visibleFire","level":5,"markdown":"**Type:** Float\n\n**Description:** How much does *AI* see a unit firing this weapon.\n\n```cpp\nvisibleFire = 18;\n```"},{"heading":"visibleFireTime","level":5,"markdown":"**Type:** Integer\n\n**Description:** How long is one shot assumed to be noticeable by the *AI*.\n\nValues under `5` should be avoided, as *AI* can perform in cycles with 5s of no testing in between.\n\n```cpp\nvisibleFireTime = 18;\n```"},{"heading":"CfgWeapons","level":3,"markdown":""},{"heading":"A","level":4,"markdown":""},{"heading":"aiBurstTerminable","level":5,"markdown":"**Class:** ModeClass\n\n**Type:** Boolean\n\n**Description:** AI firemode parameter, when true, AI will terminate burst when target is dead or out of sight"},{"heading":"aiDispersionCoefX","level":5,"markdown":"**Type:** Float\n\n**Description:** Dispersion multiplier for *AI* units (axis X - left to right)."},{"heading":"aiDispersionCoefY","level":5,"markdown":"**Type:** Float\n\n**Description:** Dispersion multiplier for *AI* units (axis Y - top-down)."},{"heading":"aiRateOfFire","level":5,"markdown":"**Class:** ModeClass\n\n**Type:** Float\n\n**Description:** Delay between shots at given *aiRateOfFireDistance*."},{"heading":"aiRateOfFireDistance","level":5,"markdown":"**Class:** ModeClass\n\n**Type:** Integer\n\n**Description:** At shorter distance delay (*aiRateOfFire*) goes linearly to zero."},{"heading":"aiRateOfFireDispersion","level":5,"markdown":"**Class:** ModeClass\n\n**Type:** Float\n\n**Description:** Property that affects the randomness of delay between shots. Value sets the maximum of the range in which a random number influencing the delay between shots is generated. 0 means the delay between shots will be the same (with given actual distance). The bigger the value the longer delay can be generated.\n\n```cpp\n// randomized delay after shot\ntimeToShot = aiRateOfFire + aiRateOfFireDispersion * Random<0,1>\n```"},{"heading":"autoFire","level":5,"markdown":"**Class:** ModeClass\n\n**Type:** Boolean\n\n**Description:** If `true`, weapon will fire repeatedly all the while you hold the fire button down.\n\nAnd if `true` the gunner can use the weapon on his own discretion (no *commander* fire order needed - like *MG* type)."},{"heading":"M","level":4,"markdown":""},{"heading":"min/mid/maxRange...","level":5,"markdown":"**Class:** ArmaModeClass\n\n**Type:** Integer\n\n**Description:** Together with *range* and *rangeProbab* values, defines probability to use this weapon for *AI* units at given distance."},{"heading":"minRange","level":5,"markdown":"**Type:** Integer"},{"heading":"minRangeProbab","level":5,"markdown":"**Type:** Float"},{"heading":"midRange","level":5,"markdown":"**Type:** Integer"},{"heading":"midRangeProbab","level":5,"markdown":"**Type:** Float"},{"heading":"maxRange","level":5,"markdown":"**Type:** Integer"},{"heading":"maxRangeProbab","level":5,"markdown":"**Type:** Float"},{"heading":"O","level":4,"markdown":""},{"heading":"opticType","level":5,"markdown":"**Class:** ItemInfo\n\n**Type:** Integer\n\n**Description:** Parameter which defines opticType of given optics. It is used together requiredOpticType to create additional fire modes with higher engagement ranges\n\n```cpp\nopticType = 0; // Typically used for optics without magnification (Default)\nopticType = 1; // Typically used for optics with magnification level between 2.5 - 5x\nopticType = 2; // Typically used for scopes with high magnification (>5x)\n```"},{"heading":"R","level":4,"markdown":""},{"heading":"requiredOpticType","level":5,"markdown":"**Class:** ModeClass\n\n**Type:** Integer\n\n**Description:** Required opticType for AI to be able to use this fire mode. It is mainly use to increase maximum engagement distance of AI depending on the optics it has mount on its rifle\n\n```cpp\n        class single_close_optics1 : Single // This optic mode will be used if AI unit has optic mounted on this weapon with opticType >= 1. AI will engage between\n        {\n            requiredOpticType = 1;\n            showToPlayer = 0;\n            minRange = 2;\n            minRangeProbab = 0.05;\n            midRange = 300;\n            midRangeProbab = 0.8;\n            maxRange = 500;\n            maxRangeProbab = 0.01;\n            aiRateOfFire = 2;\n            aiRateOfFireDistance = 300;\n        };\n        class single_medium_optics1 : single_close_optics1 // Same as single_close_optics1 - requiredOpticType is inherited and therefore opticType >= 1 is required\n        {\n            minRange = 300;\n            minRangeProbab = 0.05;\n            midRange = 500;\n            midRangeProbab = 0.7;\n            maxRange = 700;\n            maxRangeProbab = 0.05;\n            aiRateOfFire = 2;\n            aiRateOfFireDistance = 500;\n        };\n        class single_far_optics1 : single_medium_optics1 // this optic mode will be only used if AI unit has optic with opticType = 2 mounted. With this fire mode AI will engage enemies up to 1km\n        {\n            requiredOpticType = 2;\n            minRange = 300;\n            minRangeProbab = 0.05;\n            midRange = 700;\n            midRangeProbab = 0.5;\n            maxRange = 1000;\n            maxRangeProbab = 0.05;\n            aiRateOfFire = 4;\n            aiRateOfFireDistance = 600;\n        };\n```"},{"heading":"S","level":4,"markdown":""},{"heading":"showToPlayer","level":5,"markdown":"**Class:** ModeClass\n\n**Type:** Boolean\n\n**Description:** Some modes defined for *AI* usage (*e.g.* burst modes for full auto weapons) can be hidden from player with this parameter."},{"heading":"CfgVehicles","level":3,"markdown":""},{"heading":"A","level":4,"markdown":""},{"heading":"accuracy","level":5,"markdown":"Float: Default value = 0.02.\n\nDetermines how easy an object is to identify. Smaller values are easier to detect.\n\nTypically, buildings are 0.2, vehicles, 0.5\n\n**A value of 1000 causes the underlying class to be identified instead.** Eg bushy trees, pink trees and yellow trees, can all be 'identified' as \"trees\". The description \"bushy trees\" is then used solely when Editing. See #VehicleClass\n\n```cpp\naccuracy = 0.2;        // buildings\naccuracy = 0.5;        // small vehicles\naccuracy = 0.9;        // truck\naccuracy = 3.500000;    // sniper\naccuracy = 1.500000;    // lawsoldier\naccuracy = 1000;        // soldier // identify (most) solders as 'man'\n```\n\nRelationship to #camouflage:\n\n**accuracy** defines how hard it is for the AI to recognise the correct class of a unit. But even if it can't recognise the correct class it can still recognise it as an enemy and engage it.\n\n**camouflage** defines how hard it is for the AI to *see* that the unit is there."},{"heading":"attendant","level":5,"markdown":"Boolean: Default false\n\nUsed for 'vehicles' to repair other 'vehicles'. Thus a hospital has an attendant that can repair soldiers. Adds the action \"Heal at XXX\"\n\n```cpp\nattendant = true;\n```"},{"heading":"AttributeValues","level":5,"markdown":"> [!NOTE]\n> **Eden Editor:** Editing the *AttributeValues* class of objects allows you to change the default values."},{"heading":"Skill","level":6,"markdown":"Float: Default 0.5\n\nChanges the default Skill slider value of the unit\n\n```cpp\nclass AttributeValues\n{\n    Skill = 0.5;\n};\n```"},{"heading":"UnitPos","level":6,"markdown":"Integer: Default 0\n\nChanges the default setUnitPos toolbox value of the unit\n\n| Numeric value | unitPos |\n|---|---|\n| 0 | \"AUTO\" |\n| 1 | \"DOWN\" |\n| 2 | \"MIDDLE\" |\n| 3 | \"UP\" |\n\n```cpp\nclass AttributeValues\n{\n    UnitPos = 0; // \"AUTO\"\n};\n```"},{"heading":"audible","level":5,"markdown":"float: Default Value 1\n\n```cpp\naudible = .05;    // man\naudible = 3;    // motorcycle\naudible = 6;    // tank/ship\n```\n\nHow loud you are. The bigger value, the better the unit is heard.\n\nsee #camouflage"},{"heading":"C","level":4,"markdown":""},{"heading":"...CanSee","level":5,"markdown":"Integer\n\nUsed to describe which sensory inputs are available to which crew members.\n\n| Numeric value | CanSee.. define | Description |\n|---|---|---|\n| 1 | Radar | Enables top left radar (OA) for a vehicle (top centre in arma and OFP). |\n| 2 | Eye | Effect unknown - maybe affects AI capabilities? |\n| 4 | Optics | Effect unknown - maybe affects AI capabilities? |\n| 8 | Ear | Effect unknown - maybe affects AI capabilities? |\n| 16 | Compass | Enables top centre compass bar and digital compass in A2/OA. |\n| 32 | Peripheral | Enables small colored blobs at the edge of the screen that indicate nearby units. |\n\nMultiple values can be added (or binary ored, giving the same result) together.\n\n```cpp\ncommanderCanSee = 31;    // default\ngunnerCanSee = 4+8+16;    // default\ndriverCanSee = 2+8+16;    // default\n```\n\n```cpp\n#define CanSeeRadar 1\n#define CanSeeEye 2\n#define CanSeeOptics 4\n#define CanSeeEar 8\n#define CanSeeCompass 16\n#define CanSeeAll 31\n#define CanSeePeripheral 32\n#define CanSeeRadarC CanSeeRadar+CanSeeCompass\n```\n\n```cpp\ncommanderCanSee = CanSeeAll;\ngunnerCanSee = CanSeeOptics+CanSeeEar+CanSeeCompass;\ndriverCanSee = CanSeeEye+CanSeeEar+CanSeeCompass;\n```"},{"heading":"camouflage","level":5,"markdown":"Float: Default Value = 2.\n\nhow difficult to spot. bigger = easier\n\n```cpp\ncamouflage = 0.6;    // snipers\ncamouflage = 1;        // man\ncamouflage = 4;        // trucks\ncamouflage = 8;        // tanks\n```\n\nRelationship to #accuracy:\n\n**camouflage** defines how hard it is for the AI to *see* that the unit is there. The AI will not spot an enemy that has a camouflage setting of 0 (maybe this needs some more testing) even if it stands directly in front of it *as long as the enemy doesn't fire*.\n\n**accuracy** defines how hard it is for the AI to recognise the correct class of a unit. But even if it can't recognise the correct class it can still recognise it as an enemy and engage it.\n\nRelated TokenNames\n#accuracy, #nameSound, #camouflage"},{"heading":"canDeactivateMines","level":5,"markdown":"Boolean: Default false\n\npart of the man class.\n\n```cpp\ncanDeactivateMines= true;    // SoldierEngineer\n```"},{"heading":"coefInside...","level":5,"markdown":"Float:\n\n```cpp\ncoefInside = 2;            // cost for movement inside buildings\ncoefInsideHeur = 4.3;    // estimation of cost based on in/out points\ncoefSpeedInside = 2; // we must go slowly inside houses\n```\n\nUsed by the static class for non moving objects such as buildings\n\n```cpp\ncoefInside = 1;    // forest\ncoefInsideHeur = 0.25;\n```"},{"heading":"cost","level":5,"markdown":"Float: Default Value 50,0000\n\nThis value reflects the attractiveness of the target to the enemy AI. When *all other considerations are equal*. A soldier eg is not interested in Air, despite it is highly attractive cost values. On the other hand, he is interested in a medic, since a medic (in normal configs) has a (while small) a higher cost, than others in the group, including the officer.\n\n```cpp\ncost = 10000000;    // an air vehicle is typically this value\ncost = 8;            // a medic;\ncost = 1;            // a grunt\ncost = 4;            // an officer\ncost = 0;            // most buildings;\n```\n\nRelated TokenNames: type, #cost, #threat"},{"heading":"D","level":4,"markdown":""},{"heading":"driveThroughEnabled","level":5,"markdown":"Determines if AI can decide to go through the object. This parameter skips regular mass checking if object can smashed through\n\n```cpp\ndriveThroughEnabled            = 1; // test parameter for AI knowing they can drive through the object\n```"},{"heading":"ejectDamageLimit","level":5,"markdown":"Float: If the damage value of the vehicle is higher than the ejectDamageLimit, AI will disembark the vehicle.\n\n```cpp\nejectDamageLimit = 0.75;\n```"},{"heading":"E","level":4,"markdown":""},{"heading":"enableSweep","level":5,"markdown":"Boolean: Default true. Used by Helicopter class\n\n```cpp\nenableSweep = false;    / /UH60MG\n```\n\nIs sweeping over the target a valid technique for given helicopter?"},{"heading":"F","level":4,"markdown":""},{"heading":"formation...","level":5,"markdown":"Integer:\n\n```cpp\nformationX = 10;    // default meters\nformationZ = 20;    // default meters\nformationTime = 10;    // default seconds\n```\n\nOne or both X Z values are used to keep objects separated (in meters) depending on\nwedge, echelon, V, single line, formations."},{"heading":"fsmDanger","level":5,"markdown":"String: Path to FSM file or CfgFSMs class\n\nFiles can be found at:\n\n- \\a3\\characters_f\\scripts\\danger.fsm\n- \\a3\\characters_f\\scripts\\formationCDanger.fsm\n\n```cpp\nfsmDanger = \"-\"; // CAManBase\nfsmDanger = \"A3\\characters_f\\scripts\\formationCDanger.fsm\"; // Civilian_F\n```"},{"heading":"fsmFormation","level":5,"markdown":"String: Path to FSM file or CfgFSMs class\n\nFiles can be found at:\n\n- A3\\characters_f\\scripts\\formationCDanger.fsm\n\n```cpp\nfsmFormation = \"Formation\"; // CAManBase, referring to (configFile >> \"CfgFSMs\" >> \"Formation\")\nfsmDanger = \"A3\\characters_f\\scripts\\formationCDanger.fsm\"; // Civilian_F\n```"},{"heading":"G","level":4,"markdown":""},{"heading":"...Gun...","level":5,"markdown":"Integer:degrees\n\n```cpp\nminGunElev = -60;\nmaxGunElev = 60;\nminGunTurn = -5;\nmaxGunTurn = 5;\nminGunTurnAI = -30;\nmaxGunTurnAI = 30;\n```"},{"heading":"H","level":4,"markdown":""},{"heading":"...HeadTurnAI","level":5,"markdown":"Integer Degrees\n\n```cpp\nminHeadTurnAI = -70;    // man class\nmaxHeadTurnAI = 70;\n```"},{"heading":"I","level":4,"markdown":""},{"heading":"irScanGround","level":5,"markdown":"Boolean: Default true.\n\nProbaly used to stop ai looking down\n\n```cpp\nirScanGround = false;    // tanks\n```"},{"heading":"irScanRange...","level":5,"markdown":"Integer: Default 0\n\n```cpp\nirScanRange = 4000;        // outdated (since Resistance)\nirScanRangeMin = 500;    // tanks general\nirScanRangeMax = 4000;\nirScanRangeMin = 2000;    // air\nirScanRangeMax = 10000;\nirScanRangeMin = 4000;    // a vulcan\nirScanRangeMax = 10000;\n```"},{"heading":"irScanToEyeFactor","level":5,"markdown":"Integer: Default 1\n\n```cpp\nirScanToEyeFactor = 2;    // air\nirScanToEyeFactor = 5;    // shilka\n```"},{"heading":"irTarget","level":5,"markdown":"Boolean: Default true.\n\nUsed for (some) buildings so that they don't show up on tank radar. Save for very limited exceptions, this token should be enabled for all vehicle units.\n\nDisabling it will make the vehicle NOT to be engaged by infantry anti-tank gunners nor vehicle weapons. It will only be engaged by small arms, and only if its armor value is low enough for AI infantry to think it can damage it by shooting at it.\n\n```cpp\nirTarget = false;    // man\n```"},{"heading":"M","level":4,"markdown":""},{"heading":"minFireTime","level":5,"markdown":"Integer: Default 20 seconds\n\n```cpp\nminFireTime = 20;\n```\n\nMinimal time spent firing on single target."},{"heading":"N","level":4,"markdown":""},{"heading":"nameSound","level":5,"markdown":"String: Default value: \"Target\"\n\nNamesound is used by the AI audio to indicate verbally where to go, what 'vehicle' to attack. Thus the audio speech \"move to 'rock' 3 o'clock' is derived from the *nameSound*.\n\n```cpp\nnameSound = \"rock\";\n```\n\nMany different nameSounds can be selected. Here are just a few.\n\n```cpp\nnameSound = crew;\nnameSound = target;\nnameSound = tank;\nnameSound = house;\n```\n\nThe actual descriptive text accompanying the 'sound' can be different see #displayName\n\nTypically, a collection of buildings (eg) will be configured as follows\n\n```cpp\nclass GenBuilding : NonStrategic {\n    scope=private; // internal use only\n    VehicleClass=\"Some Editor Group Name\";\n    namesound=\"house\";\n};\nclass YellowBuilding : GenBuilding {\n    scope=public;\n    name=\"YellowBuilding\";\n    model=\"Some yellow building.p3d\";\n};\n```\n\nRelated TokenNames\n#accuracy, #vehicleClass, #nameSound, #camouflage"},{"heading":"P","level":4,"markdown":""},{"heading":"preferRoads","level":5,"markdown":"Boolean: Default false\n\n```cpp\npreferRoads = true;    // all vehicles\n```"},{"heading":"S","level":4,"markdown":""},{"heading":"sensitivityEar","level":5,"markdown":"Float: Default 0.0075\n\nSets how well can the given unit hear others.\nThe bigger the value, the better the hearing.\n\n```cpp\nsensitivityEar = 0.13;    // man\n```"},{"heading":"...Speed","level":5,"markdown":"Float: In Kph.\n\nSetting maxSpeed for infantry units too low might cause problems when working with waypoints (units won't be able to fully complete them or won't move towards them).\n\n```cpp\nminSpeed = -0.5;    // range 0->1\nmaxSpeed = 80;        // default\nmaxSpeed = 30;        // tractor\nmaxSpeed = 60;        // boat\n```"},{"heading":"T","level":4,"markdown":"Related TokenNames: type, #cost, #threat"},{"heading":"threat","level":5,"markdown":"float Array: Default Value {0.700000, 0.500000, 0.300000};\n\nHow threatening you are to unit types {Soft, Armor, Air}, respectively.\n\nThe ai for this model selects targets of opportunity, based on these values.\n\n```cpp\nthreat[] = {1, 0.0500000, 0.050000};        // soldier\nthreat[] = {1, 0.900000, 0.100000};            // law soldier\nthreat[] = {0.900000, 0.700000, 0.300000};    // bmp\n```\n\nRelated TokenNames: type, #cost, #threat"},{"heading":"type","level":5,"markdown":"Integer: Default Value: Armored\n\nThis indicates the threat type of the 'vehicle'.\n\nIn well written configs, the 3 possible values are declared as defines at top of file for legibility\n\n```cpp\n#define VSoft 0\n#define VArmor 1\n#define VAir 2\n\ntype = VAir;\n```\n\nVehicles (and buildings) are armoured, humans are 'soft' and aircraft (obviously) are air\n\nRelated TokenNames: type, #cost, #threat"},{"heading":"U","level":4,"markdown":""},{"heading":"unloadInCombat","level":5,"markdown":"Boolean: default true\n\n```cpp\nunloadInCombat = false;\n```\n\nAll true vehicles will cause ai to disembark when in combat."},{"heading":"CfgMoves","level":3,"markdown":""},{"heading":"V","level":4,"markdown":""},{"heading":"variantsAI[]","level":5,"markdown":"**Type:** Array\n\n**Description:** Found in *States* when there are several variations on the same animation (usually idles) that can be played randomly.\n\nIt lists the animations to be randomly cycled. The numbers represent the probability of that animation being played, the higher the number, the more likely the animation will get to play.\n\nThe sum of these numbers is always `1`.\n\n```cpp\n//Default\nvariantsAI[] = {\"\"};\n//AidlPercMstpSnonWnonDnon\nvariantsAI[] = {\"AidlPercMstpSnonWnonDnon01\", 0.01,\n    \"AidlPercMstpSnonWnonDnon02\", 0.01,\n    \"AidlPercMstpSnonWnonDnon03\", 0.01,\n    \"AidlPercMstpSnonWnonDnon04\", 0.01,\n    \"AidlPercMstpSnonWnonDnon05\", 0.01,\n    \"AidlPercMstpSnonWnonDnon06\", 0.01,\n    \"AidlPercMstpSnonWnonDnon07\", 0.01,\n    \"AidlPercMstpSnonWnonDnon08\", 0.01,\n    \"AidlPercMstpSnonWnonDnon_idleSteady04\", 0.23,\n    \"AidlPercMstpSnonWnonDnon_idleSteady03\", 0.23,\n    \"AidlPercMstpSnonWnonDnon_idleSteady02\", 0.23,\n    \"AidlPercMstpSnonWnonDnon_idleSteady01\", 0.23};\n//ActsPsitMstpSnonWnonDnon_varSittingOnTheWall\nvariantsAI[] = {\"Mi17_Cargo02\", 0.4, \"Mi17_Cargo02_V1\", 0.1, \"Mi17_Cargo02_V2\", 0.1, \"Mi17_Cargo02_V3\", 0.1,\n    \"Mi17_Cargo02_V4\", 0.1, \"Mi17_Cargo02_V5\", 0.1, \"Mi17_Cargo02_V6\", 0.1};\n//aidlpercmstpsraswlnrdnon_S\nvariantsAI[] = {\"aidlpercmstpsraswlnrdnon_1\", 0.333, \"aidlpercmstpsraswlnrdnon_2\", 0.333, \"aidlpercmstpsraswlnrdnon_3\", 0.334};\n```"},{"heading":"visibleSize","level":5,"markdown":"**Type:** Float\n\n**Description:** Found in *States*, probably used for calculating how visible a character is for the *AI*, based on his stance/animation.\n\n```cpp\nvisibleSize = 1.00012;    // SprintBaseDf                    when sprinting more visible than..\nvisibleSize = 0.700121;    // AmovPercMstpSrasWrflDnon        ..when stopped > visible than..\nvisibleSize = 0.300122;    // AmovPknlMstpSlowWrflDnon        ..when kneeling > visible than..\nvisibleSize = 0.100123;    // AmovPpneMstpSrasWrflDnon        ..when prone.\n```"},{"heading":"CfgSurfaces","level":3,"markdown":""},{"heading":"A","level":4,"markdown":""},{"heading":"AIAvoidStance","level":5,"markdown":"Integer: Allows restricting the AI from entering prone with two levels of emphasis\n\n| Value | Description |\n|---|---|\n| `0` | No change in behavior |\n| `1` | Less preference for going prone - avoid prone (unless stealth or suppressed or *) |\n| `2` | Almost never going prone - never prone (unless *) |\n\n```\n* means commanded, injured, animated, forced, ...\n```"},{"heading":"G","level":4,"markdown":""},{"heading":"grassCover","level":5,"markdown":"Float: Reduces visibleSize (taken from CfgMovesBasic) of unit for AI visibility movement computations (cannot make fully invisible) - it is NOT about visual drawing\n\n```cpp\ngrassCover = 0;        // Used by GdtStratisConcrete, there will be no simulated grass cover at a distance\ngrassCover = 0.05;    // Used by GdtStratisGreenGrass, there will be some simulated grass cover at a distance\n```"},{"heading":"CfgCloudlets","level":3,"markdown":""},{"heading":"B","level":4,"markdown":""},{"heading":"blockAIVisibility","level":5,"markdown":"Sets if particles are in the AI visibility tests (default true) - false for better performance but AI is able to see through particles\n\nBoolean\n\n```cpp\nblockAIVisibility = true;\n```"},{"heading":"CfgFormations","level":3,"markdown":"This class lists the formations for each side, each side containing nine classes:\n\n| CfgFormations class | formation |\n|---|---|\n| Diamond | \"DIAMOND\" |\n| EchelonLeft | \"ECH LEFT\" |\n| EcholonRight | \"ECH RIGHT\" |\n| File | \"FILE\" |\n| formColumnFixed | \"COLUMN\" |\n| Line | \"LINE\" |\n| Vee | \"VEE\" |\n| Wedge | \"WEDGE\" |"},{"heading":"F","level":4,"markdown":""},{"heading":"Fixed","level":5,"markdown":"Subclass of above formation classes, contains fixed positions for formation"},{"heading":"FormationPositionInfoN[]","level":6,"markdown":"Array: Sets fixed position from formation center for position N [*citation needed*]\n\n```cpp\nclass Fixed // Taken from Wedge class\n{\n    FormationPositionInfo1[] = {-1,0,0,0};\n    FormationPositionInfo2[] = {0,1,-1,0.785398};\n};\n```"},{"heading":"Pattern","level":5,"markdown":"Subclass of above formation classes, contains pattern for when there are not enough Fixed positions"},{"heading":"FormationPositionInfoN[]","level":6,"markdown":"Array: Sets pattern position from previous fixed/pattern position N [*citation needed*]\n\n```cpp\nclass Pattern // Taken from Wedge class\n{\n    FormationPositionInfo1[] = {-2,-1,-1,-0.785398};\n    FormationPositionInfo2[] = {-1,1,-1,0.785398};\n};\n```"}],"categories":["AI","Arma 3: Reference Lists","Clarification needed","Stubs"],"groups":["Reference Lists"]}