CfgVehicles Config Reference: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Part of the way toward better. A lot left to do, but it's a very long page...)
No edit summary
Line 1: Line 1:
[[Category:Arma 3: Tutorials]]
[[Category:Arma 3: Editing]]
{{Cfg ref|start}}
{{Cfg ref|start}}
==Introduction==
=INTRO=
<big>TokenName Config.cpp Reference</big>
Arma 3 documentation is scattered to the 4 winds, and this applies to config file properties as much as anything. This is an attempt to make a single master list of properties '''with links to [sources]'''. Yes, there are other partial lists but they have problems: short/confusing "official" descriptions, obsolete information, and no links to further sources. So rather than wreak havoc with these lists, this article is an attempt to make an easier-to-digest resource (at least by Arma standards!).


Simply put, Token Name & Value pairs are as follows
(P.S. This list was initially compiled in Fall of 2014, and should be up-to-date as of that point.)


<syntaxhighlight lang="c">
<span style="color:#FFFF00; background:#8B0000">WARNING! Work in progress! Lots of missing entries, resorting to do, etc.</span>
SomeName = SomeValue;
</syntaxhighlight>


Token Names are used extensively throughout ofp 'text' files.
==Existing Config pages==
Here is a list of existing config pages on the Biki. They contain mostly semi-official descriptions of properties. Unfortunately, these descriptions tend to be short, incomplete, and/or confusing--particularly for new modders:


An example is, when creating a model using class statements inside a [[Config.cpp]], to access it later, via the mission editor
[[CfgVehicles Config Reference]]<br>
[[CfgAmmo Config Reference]]<br>
[[CfgMagazines Config Reference]]<br>
[[CfgWeapons Config Reference]]<br>
[[Model Config]]


<syntaxhighlight lang="c">
This page is like a "Config Properties for Dummies" or a "Config Properties Explained". If you want the official description, go to the linked pages. If you want a more thorough explanation, use this page.
scope=2;
</syntaxhighlight>


This article details the token-names specifically available within the '''[[Models & Classnames: CfgVehicles - Vehicles|CfgVehicles]]''' class of a [[Config.cpp]]. The primary focus of this document is the TokenNames used for various aspects of controlling models within '''Addons'''.  
(Once this page is complete, a sensible route may be to integrate its information into the existing pages to reduce redundancy).


Unlike a command reference, where one meaning fits all, Token names are '''not''' verbs. The meaning of the name, it's effect, can be different, depending on context. You are advised therefore, that these names, as listed, apply ''only'' to the CfgVehicles class. They may, or may not, have identical meanings (if found), in other classes.
==How Do Configs Work?==
All configs get merged into one big config in memory when the game starts. Where duplicates exist, which config takes precedence depends on load order - the last config loaded "wins" by overwriting any previous value(s). Load order is determined by mod folder order, PBO name, but most importantly/properly by the "requiredAddons" section of the CfgPatches class.
==CfgPatches & requiredAddons==
The requiredAddons array in CfgPatches is how you control the load order of configs. "requiredAddons" means "load these other config files before you load this one." (And "this one" means the name of the class containing the requiredAddons statement). [ [http://forums.bistudio.com/showthread.php?162880-Little-question-about-cfgpatches A],...]


This article lists token names, their value ranges, and their type.
==How Many Config Files?==
One consequence of the above discussion is the fact that you can ''technically'' spread your configs across tons of little files or ball them up into one big one or anything in between--with some exceptions^ (which are dicussed further below). Barring those exceptions, there is no iron-clad rule that requires certain classes (e.g. CfgAmmo, CfgVehicles, etc.) to be separated or located within particular filenames. It is essentially a matter of clarity, ease of editing, and consistency to help others understand your work.


===TokenTypes===
^Known exceptions:
[[TokenNameValueTypes|Integer]]: A signed value that will be held in 4 bytes.
# #include'd .h/.hpp files are usually in the same folder or a subfolder of the #include'ing config, but apparently they can be anywhere as long as you #include "pathtofile".
# CfgSkeleton & CfgModels classes should be in either: a "model.cfg" file or a "[same-name-as-P3D].cfg" file. Unlike other config classes, these ones should not be thrown into random files.
# The model.cfg file must be in the same folder as--or in a parent folder of--the object (P3D) it configures.


[[TokenNameValueTypes|Boolean]]: An [[TokenNameValueTypes|Integer]] value of 0 or 1. This is a 'convenience type' in humanly readable text. The engine stores it as an integer.
=WEAPONS=
For understandable reasons, weapons data is scattered across several different config classes. Defining a weapon properly requires working with all these classes.
==CfgAmmo==
Most projectile-specific properties are located here. Some relevant properties you might expect to find here however--muzzle velocity for example--are located in the other weapon classes (either CfgMagazines or CfgWeapons).


[[TokenNameValueTypes|String]]: Any string value.
===airFriction===
<tt>'''float'''</tt>


For elite only (not ArmA, or OFP) ''ALL STRINGS MUST BE ENCLOSED IN QUOTES''.  
How much the projectile slows down as it travels through the air^. (A way of expressing aerodynamic drag).


[[TokenNameValueTypes|Array]]: An array [] = {...}
This & initSpeed define a projectile's trajectory in Arma (for unpowered ones like Bullets & Shells--Rockets & Missiles have additional rocket thrust features that influence their flight). As soon as an unpowered projectile is fired, it starts to slow down due to drag. The formula is:


float Array: An array of floats only
<tt>airFriction = deceleration / velocity<sup>2</sup></tt>


string Arrray: should be obvious
e.g. a projectile with a muzzle velocity of 1640 m/s which slows down 94 m/s/s (i.e. by 94 m/s in the first second) has an airFriction of:


integer Array: ditto
<tt>-94/1640<sup>2</sup> &asymp; 0.0000035</tt>


Complex Array: A mixture of multiple types, including embedded arrays.
(This property appears to be equivalent to Bird-Livingston's "ballistic K factor" * 0.0000001).


Variable Array: the number of elements for '''this''' array in '''this''' class model can have a varying number of elements (depending on context)
^A different formula based on bulletPenetrability & caliber is applied to slow projectiles passing through solid targets (fire geometry).


===Filenames and Paths===
[[https://community.bistudio.com/wiki/Weapons_settings A], [http://forums.bistudio.com/showthread.php?153417-airFriction B], "WW2 Ballistics: Armor and Gunnery" (Bird-Livingston, 2001)]
Filenames are case '''in'''sensitive.


====Pbo File conventions====
===airLock===
The root path of the filename is (generally) the name of the pbo
<tt>'''bool'''</tt>


<syntaxhighlight lang="c">
Whether this ammo type (& AI using it) can lock onto airborne targets.
model= "\anypbofile\'''anywhere'''\....";
</syntaxhighlight>


note the pbo extension is inferred
(Provided the related CfgWeapons also has locking capability--"canLock" is true). (see "irLock", "laserLock"). (Unlike irLock & laserLock--which have corresponding CfgVehicles properties that they lock onto, airborne targets are identified in some other way).


'''anywhere''' is an (optional) (series of) folder(s) INSIDE the pbo.
[[https://manuals.bisimulations.com/vbs3/3-0/devref/#Config_Manual/CfgAmmo/amm_airLock.htm?Highlight=airlock A],[https://community.bistudio.com/wiki/A3_Locking_Review#airLock B],[http://forums.bistudio.com/showthread.php?47996-Airlock-only C]].


Depending on the file referred to, eg a p3d file for a model, the extension (in this case .p3d) is not required.
===caliber===
<tt>'''float&ge;0'''</tt>


====p3d files====
Ability of the projectile to penetrate through target fire geometry (buildings, vehicle armor and components, people, etc.).
<syntaxhighlight lang="c">
model="\anypbofilename\anyp3d(.p3d)";
</syntaxhighlight>


====paa/pac====
Penetration power is dependent on caliber and the projectile's speed. The formula for mm of penetration is:
wherever these file types are indicated, the default extension is paa


<syntaxhighlight lang="c">
<tt>(projectile speed / 1000)x(caliber)x(bulletPenetrability of the target BISURF)</tt>
icon=\somepbo\anyicon(.paa);
</syntaxhighlight>


====jpeg====
So higher values mean more penetration. And, of course, as the projectile slows down during its flight, penetration decreases. Restating the formula:
jpeg pictures are usable anywhere a pac (or pac) file is indicated. It is never default.


<u>Exception</u>: Operation Flashpoint Elite specifically, cannot handle jpg.
<tt>caliber = (mm penetration @speedX)*1000 / (bulletPenetrability * speedX)</tt>


<syntaxhighlight lang="c">
(A value of 1 is standardized as 15mm of RHA penetration at 1000m/s.) Note! Adding caliber values to missile or rockets is bugged and results in missiles flying through targets.
picture="\AnyPbo\AnyPicture.jpg";
</syntaxhighlight>


====Sound files====
[[http://resources.bisimulations.com/wiki/Damage_Modeling:_Simulation#Penetration A]]
wss is the default extension if not declared.


<syntaxhighlight lang="c">
===cost===
sound="\AnyPbo\AnySoundFolder\AnySound(.wss)";
<tt>'''int''', ~$, (AI only)</tt>
</syntaxhighlight>


Otherwise use Ogg Vorbis format (extension .ogg).
A "monetary" value for each weapon.


===Vehicle vs 'Vehicle'===
This helps AI units decide on whether a weapon is worth using. Presumably AI does not waste high-cost weapons on low-threat or otherwise inappropriate targets. Seems to be vaguely calibrated in units of 1/3-1/4 $USD.
In this document. a vehicle, is a true vehicle of some kind. Be it a tank, or a car.


A 'vehicle' on the other hand covers cfgVehicles as defined in a config.cpp which would include '''men''' or '''buildings''', since ofp considers them ''all'' to be 'vehicles'
[[https://community.bistudio.com/wiki/CfgAmmo_Config_Reference#cost A], [https://manuals.bisimulations.com/vbs3/3-0/devref/#Config_Manual/CfgAmmo/amm_cost.htm%3FTocPath%3D4%2520Configuration%2520Manual%7CcfgAmmo%7C_____12 B] (contradictory)]


===Config.bin vs Config.cpp===
===deflecting===
<u>By convention only</u>, [[Config.cpp|config.'''cpp''']] is the humanly readable text equivalent of [[Config.bin|config.'''bin''']].
<tt>'''int&ge;0''', angle in degrees</tt>


The engine will accept either or '''both'''.
Determines how much a projectile ricochets.


When both are encountered, it is the <u>text</u> file that is predominant (the raPified file is ignored). (Which is the text file, and which is the 'binary' is moot, see below).
When the ammo impacts something at this angle or less, there is a ''chance'' it will ricochet--bouncing off the target and doing less than full kinetic damage. Impact angles greater than this will not ricochet. If deflecting = 0, the projectile will never ricochet. Ricochets can occur off of anything other than water: the ground, buildings, vehicles, etc.


While unusual to have both, it is common for an addon, eg a pbo, to have '''both''' inside where the config.cpp is a 'work in progress' that might later be 'binarised' to raP, and the cpp removed.
[[https://manuals.bisimulations.com/vbs3/3-0/devref/#Config_Manual/CfgAmmo/amm_deflecting.htm%3FTocPath%3D4%2520Configuration%2520Manual%7CcfgAmmo%7C_____15 A]]


===raP files===
===explosive===
So-called 'binarised' or 'binary' files are encoded in [[raP File Format - Elite | raP file format]]. They are not in the conventional sense a "binary"&mdash;machine readable code or data&mdash;but rather a more convenient encoded form of the text file (from the engine's perspective). They represent the stripping out of comments and extraneous crud, with bells on. For example, save files are raP encoded, just like config.bin is.
<tt>'''1&ge;float&ge;0'''</tt>


By convention only, a config.cpp is a text file. The engine does not actually care; if it encounters a config.cpp with a raP signature, it is treated as per a config.bin.
The proportion of the projectile's damage that is explosive (rather than kinetic).


The engine unconditionally converts text files to raP encoding before it uses it further. This (obviously) slows game or mission loading and (less obviously) is a source of 'undocumented features'. Prior to finishing your addon, it is a Good Idea&trade; to 'binarise' the config into raP encoding and rename the cpp file to .txt for documentation purposes.
Unlike kinetic damage, explosive damage does ''not'' fall off as the projectile gradually loses speed. A value of 1 means the damage is fully explosive, while 0 means fully kinetic. (This property has nothing to do with the colloquial sense of an explosion as 'splash' damage--that property is covered by "indirectHit"). NOTE! Values >=0.7 nullify the penetration capability of the projectile, so keep values ''below'' this if you want the projectile to be able to penetrate armor at all. (See "hit", "typicalSpeed").


==Alphabetical Order==
===hit===
{{Cfg ref|abc}}
<tt>'''float>0'''</tt>
===A===
====...Action====
[[TokenNameValueTypes|String]] : defaults ManActCargo


<syntaxhighlight lang="c">
The damage done by a direct hit from this projectile.
commanderAction = "ManActM60CommanderOut";
driverAction = "ManActShipDriver";
gunnerAction = "ManActJeepGunner";
commanderInAction = "ManActTestDriver";
driverInAction = "ManActM113Driver";
gunnerInAction = "ManActM1A1Gunner";
getInAction = ManActGetInTank; // default
getOutAction = ManActGetOutTank; // default
</syntaxhighlight>


=====cargoAction=====
Damage is applied to global hitpoints ("armor" int) as well as locational ones ("armor" float). (The actual formula for applying damage is somewhat complex, so there is not necessarily a one-to-one application of hit value against hitpoints).[[https://resources.bisimulations.com/w/index.php?title=Damage A]]
Variable String [[TokenNameValueTypes|Array]]: default {ManActCargo}


<syntaxhighlight lang="c">
===indirectHit===
cargoAction[] = {"ManActM113Medic", "ManActM113Medic", "ManActM113Injured"};
<tt>'''float&ge;0'''</tt>
</syntaxhighlight>


'''Note''' that unlike driverAction and gunnerAction this is an array. (for multiple positions)
'Splash' damage done by a near miss from this projectile.


The number of elements in this array correspond to the [[#transportSoldier]] value declared for this class.
Projectiles with indirectHit values do damage within a sphere around their impact point (whether they hit the ground or an object). The size of the sphere is determined by "indirectHitRange" and targets within the sphere receive damage.  


see [[#cargoIsCoDriver]]
[[https://resources.bisimulations.com/w/index.php?title=Damage A]]


====...AngleX/Y====
===indirectHitRange===
[[TokenNameValueTypes|Float]] Degrees
<tt>'''float&ge;0''', meters</tt>


<syntaxhighlight lang="c">
Describes the range of a projectile's 'splash' damage.
initAngleX = 0;
minAngleX = -30;
maxAngleX = 30;
</syntaxhighlight>


<syntaxhighlight lang="c">
This is the ''base'' radius within which indirectHit damage is applied. indirectHit damage is actually applied '''''out to 4x this radius''''', with linear falloff starting at indirectHit and ending at 0. (See "indirectHit"). [[https://resources.bisimulations.com/w/index.php?title=Damage A]]
initAngleY = 0;
minAngleY = -100;
maxAngleY = 100;
</syntaxhighlight>


<syntaxhighlight lang="c">
===initTime===
initFov = 0.700000;
<tt>'''float&ge;0''', seconds, (Missiles only)</tt>
minFov = 0.420000;
maxFov = 0.850000;
</syntaxhighlight>


used by car.ViewPilot class
How long it takes the missile's rocket motor to start producing thrust after launch.


====angle====
Missiles are launched at initSpeed. After initTime, the missile starts accelerating based on its thrust parameters. (see "thrust", "thrustTime").
[[TokenNameValueTypes|Float]]: Degrees


<syntaxhighlight lang="c">
===irLock===
angle = -240;
<tt>'''bool'''</tt>
</syntaxhighlight>


see [[#Indicator... Class]] Or [[#Hatch... Class]]
Whether this ammo type (& AI using it) can lock onto radar targets (CfgVehicles.irTarget = true).


====access====
irTarget vehicles are ones that are config'ed to show up on the game's simple "radar" overlay--i.e. tanks, trucks, etc., not humans. (You'd think "ir" would refer to infrared, but it actually refers to radar). (Provided the related CfgWeapons also has locking capability--"canLock" is true).
[[TokenNameValueTypes|Integer]]: Determines the manipulability of the class.


<syntaxhighlight lang="c">
[[https://community.bistudio.com/wiki/A3_Locking_Review#irLock A]].
access=1;
</syntaxhighlight>


0 ReadAndWrite additional values can be added
===laserLock===
1 ReadAndCreate only adding new class members is allowed
<tt>'''bool'''</tt>
2 ReadOnly no modifications enabled
3 ReadOnlyVerified no modifications enabled, CRC test applied


All ''BIS'' classes are '''ReadOnlyVerified''' and can only be inherited into a new class
Whether this ammo type (& AI using it) can lock onto "laser targets", i.e. a laser designator dot (CfgVehicles.laserTarget = true). (Provided the related CfgWeapons also has locking capability--"canLock" is true).


====accuracy====
[[https://community.bistudio.com/wiki/A3_Locking_Review#laserLock A],[https://manuals.bisimulations.com/vbs3/3-0/devref/#Config_Manual/CfgAmmo/amm_laserLock.htm%3FTocPath%3D4%2520Configuration%2520Manual%7CcfgAmmo%7C_____40 B]].
[[TokenNameValueTypes|Float]]: Default value = 0.02.


Determines how easy an object is to identify. Smaller values are easier to detect.
===manualControl===
<tt>'''bool''', (Missiles only)</tt>


Typically, buildings are 0.2, vehicles, 0.5
A type of missile guidance.


'''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]]
True means the missile has SACLOS guidance (i.e. it continuously adjusts to fly toward wherever the player's crosshairs point).


<syntaxhighlight lang="c">
[[https://community.bistudio.com/wiki/CfgAmmo_Config_Reference#manualControl A],[https://manuals.bisimulations.com/vbs3/3-0/devref/#Config_Manual/CfgAmmo/amm_manualControl.htm?Highlight=manualcontrol B]]
accuracy = 0.2; // buildings
accuracy = 0.5; // small vehicles
accuracy = 0.9; // truck
accuracy = 3.500000; // sniper
accuracy = 1.500000; // lawsoldier
accuracy = 1000; // soldier // identify (most) solders as 'man'
</syntaxhighlight>


Relationship to [[#camouflage]]:
===manuevrability===


'''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.
===maxControlRange===


'''camouflage''' defines how hard it is for the AI to ''see'' that the unit is there.
===maxRange===


<u>Related TokenNames</u>
===maxRangeProbab===
[[#scope]], [[#accuracy]], [[#displayName]], [[#vehicleClass]], [[#nameSound]], [[#camouflage]]


====acceleration====
===maxSpeed===
[[TokenNameValueTypes|Float]]: metres per second
<tt>'''float>0''', m/s, (Missiles only)</tt>


<syntaxhighlight lang="c">
Missile speed limit.
acceleration = 7;
</syntaxhighlight>


====airFriction====
This value imposes an upper limit to the speed at which a missile can travel, regardless of its thrust properties. (see "thrust", "thrustTime").
[[TokenNameValueTypes|Array]]: 3 separate tokens, airFriction0[], airFriction1[], airFriction2[] that define the X Y and Z component respectively.


<syntaxhighlight lang="c">
===minRange===
airFriction2[] = {25, 12, 2.500000};
</syntaxhighlight>


====ambient====
===minRangeProbab===
Float [[TokenNameValueTypes|Array]]:


<syntaxhighlight lang="c">
===midRange===
ambient[] = {0.07, 0.07, 0.07, 1.0};
</syntaxhighlight>


See [[#Reflectors Class]], [[#Light Class]], [[#CargoLight Class]]
===midRangeProbab===


====animated====
===muzzle velocity===
[[TokenNameValueTypes|Bool]] : Default Value true
Surprise! Muzzle velocity for a projectile is not found in CfgAmmo at all! Instead it is defined in the relevant CfgMagazines class and the property is called "initSpeed".


Used by class models that inherit an animated 'vehicle' to turn those aspects of the vehicle off.
===thrust===
[[https://community.bistudio.com/wiki/Weapons_settings A],[https://community.bistudio.com/wiki/CfgAmmo_Config_Reference#thrustTime B]]


<syntaxhighlight lang="c">
===thrustTime===
animated = false;
<tt>'''float>0''', seconds, (Missiles only)</tt>
</syntaxhighlight>


model is animated, or not.
How many seconds the rocket motor will produces thrust before dying out.


when set true, the animation class, if any, happens, otherwise it doesn't
(Keep in mind that regardless of these thrust properties, "maxSpeed" puts a ceiling on missile speed).


see animations class
[[https://community.bistudio.com/wiki/Weapons_settings A],[https://community.bistudio.com/wiki/CfgAmmo_Config_Reference#thrustTime B], [https://manuals.bisimulations.com/vbs3/3-0/devref/#Config_Manual/CfgAmmo/amm_thrustTime.htm?Highlight=thrusttime C]]


====animPeriod====
===timeToLive===
[[TokenNameValueTypes|float]]: Seconds.


This TokenName is generally used inside AnimationSources class (ArmA only). It's use in OFP:R is as follows
===typicalspeed===
<tt>'''int>0''', m/s</tt>


<syntaxhighlight lang="c">
Influences how much damage the projectile does when it hits.
animPeriod = 1.33; // a fountain
</syntaxhighlight>


====animation...====
Speed at which the projectile produces full "hit" damage; anything lower produces proportionately less damage (exception: any "explosive" damage component is always full value regardless of the impact speed). Note that this property does ''nothing'' to influence the projectile velocity, it used only in the damage calculation. (See "initSpeed", "explosive").
[[TokenNameValueTypes|String]]: These animation strings point to rtm files to create the movement.


<syntaxhighlight lang="c">
===nvgOnly===
animationFlag = "\AnyAddon\AnyRTM(.rtm)"; // to wiggle flag in wind
animationOpen = "\AnyAddon\AnyRTM(.rtm)"; // to open or close doors (eg)
animationDrop = "\AnyAddon\AnyRTM(.rtm)";
</syntaxhighlight>


====animationSource...====
===visibleFire===
[[TokenNameValueTypes|String]]


<syntaxhighlight lang="c">
===visibleFireTime===
animationSourceBody = "Turret_2";
animationSourceGun = "Gun_2";
animationSourceHatch = "hatchCommander";
</syntaxhighlight>


====armor (integer)====
==CfgMagazines==
[[TokenNameValueTypes|Float]]: A strength value of the object, how much external damage can be taken before 'destruction'. It is calculated together with object volume size! (bounding sphere calculated in geometry) Below are general ranges to give some idea.
Magazine properties plus some projectile-specific stuff that gets stored here instead of CfgAmmo.
===initSpeed===
<tt>'''int>0''', m/s</tt>


<syntaxhighlight lang="c">
Sets the muzzle velocity of ammo fired from this Magazine.
approx strength = (0.27/tgtRadius)^2 / armorInConfig


armor = 3; // man
(Not to be confused with typicalSpeed, which does not affect projectile speed at all and is instead used for damage calculation only).
armor = 10; // motorcycle
armor = 20; // a small car
armor = 15..60; // aircraft
armor = 150; // buildings
armor = 150..300; // bmp
armor = 400...900; // tank
armor = 300; // boat
armor = 10000; // ship
</syntaxhighlight>


If unspecified (or not inherited) the default value is 30
==CfgWeapons==
Gun/launcher-specific properties.
===autoFire===
<tt>'''bool'''</tt>


1 bullet will kill armor <=20
Whether the weapon will continue to fire if you hold down trigger.


2 bullets <=40
[[https://manuals.bisimulations.com/vbs2/2-00/devref/Content/Config_Manual/CfgWeapons/wpn_autoFire.htm A]].


3 bullets 50
===ballisticsComputer===


====armor (float)====
===canLock===
[[TokenNameValueTypes|Float]]: The floating version of armor type is only used in Hit... classes, eg HitTurret HitBody
<tt>'''bool'''</tt>


<syntaxhighlight lang="c">
Whether the weapon can lock on to a target (e.g. when a player hits the TAB key)
armor = 1.4; // a bee
armor = 0.8; // a turret
</syntaxhighlight>


<u>Related TokenNames</u>: [[#armor (float)]], [[#material]], [[#name]], [[#passThrough]]
Must be true for any of the other lock modes to work (airLock, irLock, laserLock). 0 = never, 1 = in cadet mode only, 2 = always.


====armor...====
[[https://community.bistudio.com/wiki/A3_Locking_Review#canLock A], [https://manuals.bisimulations.com/vbs3/3-0/devref/#Config_Manual/CfgWeapons/wpn_canLock.htm%3FTocPath%3D4%2520Configuration%2520Manual%7CCfgWeapons%7C_____18 B]]
[[TokenNameValueTypes|Float]]:


<syntaxhighlight lang="c">
===dispersion===
// for vehicles general
<tt>'''float>0'''</tt>
armorStructural= 1; // ranges between 1 and 4.0, default 1
armorFuel = 1.4; // default
armorGlass = 0.5; // default
armorLights = 0.4; // default 0.4 in all models.
armorWheels = 0.05; // default
// for tanks
armorHull = 1;
armorTurret = 0.8;
armorGun = 0.6;
armorEngine = 0.8;
armorTracks = 0.6;
// for men
armorHead = 0.7;
armorHands = 0.5;
armorLegs = 0.5;
// helicopters
armorHull = 0.5;
armorEngine = 0.6;
armorAvionics = 1.4;
armorVRotor = 0.5;
armorHRotor = 0.7;
armorMissiles = 1.6;
armorGlass = 0.5;
</syntaxhighlight>


====attendant====
Basic weapon accuracy.
[[TokenNameValueTypes|Bool]]: Default false


Used for 'vehicles' to repair other 'vehicles'. Thus a hospital has an attendant that can repair soldiers. Adds the action "Heal at XXX"
This affects all projectiles fired from this weapon independent of other effects like AI skill, etc. It describes the
weapon's dispersion in radians (1 milliradian = 1 angular mil = 0.001 dispersion, 1 MOA = 0.000290888 dispersion)


<syntaxhighlight lang="c">
===weaponLockSystem===
attendant = true;
<tt>'''cumulative int'''</tt>
</syntaxhighlight>


<u>Related TokenNames</u>: [[#hiddenSelections]]
How the weapon triggers a target's warning system.


====audible====
What type(s) of lockDetectionSystem is set off in a vehicle targeted by this weapon: 0 = none, 1 = CM_Lock_Visual, 2 = CM_Lock_IR, 4 = CM_Lock_Laser, 8 = CM_Lock_Radar. Presumably canLock must = 1 for this to be relevant.
[[TokenNameValueTypes|float]]: Default Value 1


<syntaxhighlight lang="c">
[[https://community.bistudio.com/wiki/A3_Locking_Review#weaponLockSystem A]].
audible = .05; // man
audible = 3; // motorcycle
audible = 6; // tank/ship
</syntaxhighlight>


How loud you are. The bigger value, the better the unit is heard.
=VEHICLES=
tbd
==CfgVehicles==
===armor (global)===
<tt>'''int>0'''</tt>


see [[#camouflage]]
Overall hit points/'health' for the vehicle.


====autocenter====
You will often see this property referred to as "armor (int)". Supposedly object radius somehow modifies this value, although the formulas offered by BI don't make much sense. Note that locational hit-points are derived from this value--determined by the HitPoint class's own "armor" (float) value. So the lower this value, the weaker all the vehicle's corresponding location HitPoints will also be (i.e. the more damage a location takes with each hit).
[[TokenNameValueTypes|bool]]: Default true


<syntaxhighlight lang="c">
[[https://resources.bisimulations.com/w/index.php?title=Damage_Modeling:_Objects#armor A], [https://community.bistudio.com/wiki/CfgVehicles_Config_Reference#armor_.28integer.29 B], [https://community.bistudio.com/wiki/Damage C]].
autocenter = false; // man
</syntaxhighlight>


====axis====
===armorStructural===
[[TokenNameValueTypes|String]]:
<tt>'''int>0'''</tt>


<syntaxhighlight lang="c">
Divisor to global damage; the higher the value (beyond 1), the less global damage ("armor"/"hit points") occurs whenever the vehicle gets hit. HitPoints class location damage is ''not'' affected by this property; the location takes damage from the hit without modification. Extremely high values practically nullify the (in)famous cumulative "hit points" system of vehicle damage (e.g. plinking a tank to death with a rifle).
axis = osa_poklop_driver;
</syntaxhighlight>


see [[#Indicator... Class]] Or [[#Hatch... Class]], [[#hour|IndicatorWatch Class]]
[[https://resources.bisimulations.com/w/index.php?title=Damage_Modeling:_Objects#armorStructural A]].


===B===
===crewVulnerable===
====body====
<tt>'''bool''', (AI only)</tt>
[[TokenNameValueTypes|String]]:


<syntaxhighlight lang="c">
===damageResistance===
body = "mainTurret";
<tt>'''float>0'''</tt>
</syntaxhighlight>


see [[#Turret Class]]
Tells AI units how resistant this vehicle is to damage (so they can decide whether or not to bother attacking based on the weapons they are carrying). The calculation appears to be based only on the target's global armor and size, along with the weapon's hit value; armor & penetration are not factors. The formula for deriving this value is supposedly:


====brakeDistance====
(minHit^2) * (1/armor) * ([0.27/tgtRadius]^2)
[[TokenNameValueTypes|Float]]: default 5 meters per sec


<syntaxhighlight lang="c">
where "miHit" is the "hit" value for the ''weakest weapon that the AI should find useful against the vehicle''. How exactly the value is used by the game is a mystery. Possibly the AI check their weapon with this formula and compare it to the config value. Simplifying, one could say the AI checks it's weapon "hit" value against the minimum useful "hit" value the config has defined; if the AI weapon is >= the minimum value, the AI will consider attacking. If the AI's weapon is weaker, it won't.
brakeDistance = 1; // man
brakeDistance = 14; // tank
brakeDistance = 500;// plane
brakeDistance = 50; // boat
</syntaxhighlight>


====brightness====
[[https://resources.bisimulations.com/w/index.php?title=Damage A],[https://manuals.bisimulations.com/vbs3/3-0/devref/#Config_Manual/CfgVehicles/D_cpp/cpp_damageResistance.htm?Highlight=damageresistance B],c]
[[TokenNameValueTypes|Float]]:


<syntaxhighlight lang="c">
===explosionShielding (global)===
brightness = 1.0;
<tt>'''float&ge;0'''</tt>
</syntaxhighlight>


See [[#Reflectors Class]], [[#Light Class]], [[#CargoLight Class]]
Modifies how global vehicle health is affected by 'splash' damage (indirectHit).


===C===
This works the same way as explosionShielding for HitPoint locations: indirectHit damage received is multiplied by this value.
====...CanSee====
[[TokenNameValueTypes|Integer]]


Used to describe which sensory inputs are available to which crew members.
(This property is 10-24-14 devbranch only currently)


{| class="bikitable"
===hiddenSelections[]===
! Numeric value !! CanSee.. define !! Description
<tt>'''string array'''</tt>
|-
| 1 || Radar || Enables top left radar (OA) for a vehicle (top centre in arma and OFP).
|-
| 2 || Eye || Effect unknown - maybe affects AI capabilities?
|-
| 4 || Optics || Effect unknown - maybe affects AI capabilities?
|-
| 8 || Ear || Effect unknown - maybe affects AI capabilities?
|-
| 16 || Compass || Enables top centre compass bar and digital compass in A2/OA.
|-
| 32 || Peripheral || Enables small colored blobs at the edge of the screen that indicate nearby units.
|}


Multiple values can be added (or binary ored, giving the same result) together.
These are references to particular "sections" from the CfgModel (which in turn correspond to selection sets in the P3D) for this vehicle. These sections are designed to create variety within a single model by allowing the parts to be hidden and/or have alternate textures swapped out for variety.


<syntaxhighlight lang="c">
[ [https://manuals.bisimulations.com/vbs3/3-0/devref/Content/Config_Manual/CfgVehicles/H_cpp/cpp_hiddenSelections.htm A],[http://forums.bistudio.com/showthread.php?93033-Hidden-Selections B], fab.ofp.free.fr/Tutorials/Hidden_Selections.htm, tactical.nekromantix.com/wiki/doku.php?id=arma2:texturing:hiddenselectionstextures]
commanderCanSee = 31; // default
gunnerCanSee = 4+8+16; // default
driverCanSee = 2+8+16; // default
</syntaxhighlight>


<syntaxhighlight lang="c">
===hiddenSelectionsTextures[]===
#define CanSeeRadar 1
<tt>'''string array'''</tt>
#define CanSeeEye 2
#define CanSeeOptics 4
#define CanSeeEar 8
#define CanSeeCompass 16
#define CanSeeAll 31
#define CanSeePeripheral 32
#define CanSeeRadarC CanSeeRadar+CanSeeCompass
</syntaxhighlight>


<syntaxhighlight lang="c">
A list of (pathed) textures for use with hiddenSelections[]. The textures are assigned to the hiddenSelections[] elements in the order they are listed (first texture goes to the first element, and so on). hiddenSelections[] elements with no texture listed will be hidden at game startup, while those with a texture will be displayed and use the texture assigned. (see "hiddenSelections[]").
commanderCanSee = CanSeeAll;
gunnerCanSee = CanSeeOptics+CanSeeEar+CanSeeCompass;
driverCanSee = CanSeeEye+CanSeeEar+CanSeeCompass;
</syntaxhighlight>


====...CargoAngleY====
===discreteDistance[]===
[[TokenNameValueTypes|Float]] Degrees


Found within vehicle classes.
===discreteDistanceInitIndex===


Orientation of the man sitting in the cargo space.
===enginePower===
<tt>'''int>0''', kilowatts, (PhysX)</tt>


<syntaxhighlight lang="c">
Engine power. (hp * 0.745699872 = kW).
initCargoAngleY = 185; // Truck5t
initCargoAngleY = 90; // M113
</syntaxhighlight>


<syntaxhighlight lang="c">
[[https://community.bistudio.com/wiki/Arma_3_Cars_Config_Guidelines#Engine_parameters A]]
initCargoAngleY = 10; // UH60
minCargoAngleY = -60;
maxCargoAngleY = 120;
</syntaxhighlight>


====camouflage====
===maxOmega===
[[TokenNameValueTypes|Float]]: Default Value = 2.
<tt>'''int>;0''', radians per second, (PhysX)</tt>


how difficult to spot. bigger = easier
Maximum rotational speed of engine. (RPM * 0.104719755 = radians/s).


<syntaxhighlight lang="c">
[[https://community.bistudio.com/wiki/Arma_3_Cars_Config_Guidelines#Engine_parameters A], [https://developer.nvidia.com/sites/default/files/akamai/physx/Docs/Vehicles.html#pxvehicleenginedata B]]
camouflage = 0.6; // snipers
camouflage = 1; // man
camouflage = 4; // trucks
camouflage = 8; // tanks
</syntaxhighlight>


Relationship to [[#accuracy]]:
===peakTorque===
<tt>'''int>0''', Newton-meters, (PhysX)</tt>


'''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''.
Maximum engine torque. (<tt>=enginePower*1000/maxOmega</tt>).


'''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.
[[https://community.bistudio.com/wiki/Arma_3_Cars_Config_Guidelines#Engine_parameters A], [https://developer.nvidia.com/sites/default/files/akamai/physx/Docs/Vehicles.html#pxvehicleenginedata B]]


<u>Related TokenNames</u>
===torqueCurve[]===
[[#scope]], [[#accuracy]], [[#displayName]], [[#vehicleClass]], [[#nameSound]], [[#camouflage]]
<tt>'''float array''', (PhysX)</tt>


====can...====
An array describing how much torque the engine generates at various rotational speeds.
=====canBeShot=====
[[TokenNameValueTypes|Boolean]]: Declares whether bullets have any effect


<syntaxhighlight lang="c">
The values are normalized (0-1) so any units can be used to derive these values. The array consists of pairs of values in the form { {rotation1,torque1},{rotation2, torque2}, ...}. The first value in each pair tells the game how far along the RPM curve we are, the second value tells it how much to scale the peakTorque output. These are used to create a virtual graph which the game uses to determine engine power at various rotational speeds.
canBeShot = true;
</syntaxhighlight>


=====canDeactivateMines=====
[[https://community.bistudio.com/wiki/Arma_3_Cars_Config_Guidelines#Engine_parameters A], [https://developer.nvidia.com/sites/default/files/akamai/physx/Docs/Vehicles.html#pxvehicleenginedata B]]
[[TokenNameValueTypes|Boolean]]: Default false


part of the man class.
===thrustDelay===
<tt>'''int&ge;0''', seconds, (PhysX)</tt>


<syntaxhighlight lang="c">
Time it takes for engine to send power to the wheels from a stop.
canDeactivateMines= true; // SoldierEngineer
</syntaxhighlight>


=====canFloat=====
This property does not affect already moving vehicles (see "clutchStrength" for something along those lines). Values >0 are suggested to reduce the chance that the vehicle's wheels slip every time it starts from a stop.
[[TokenNameValueTypes|Boolean]]: Default value: false


Used to allow vehicles (such as BMP) not to sink !
[[https://community.bistudio.com/wiki/Arma_3_Cars_Config_Guidelines#PhysX_3_integration A]]


<syntaxhighlight lang="c">
===clutchStrength===
canFloat = true;
<tt>'''float>0''', (PhysX)</tt>
</syntaxhighlight>


=====canHideBodies=====
How 'tight' the clutch is--how quickly gear changes affect wheel speed.
[[TokenNameValueTypes|Boolean]]: Default false


part of the man class.
Low values will mean more slippage and more gradual acceleration after gear changes, higher values mean less slippage and quick delivery of torque to the wheels after gear shifts. BI recommends starting with a value of 10 (for CarX anyway, TankX config values are typically closer to 100).


<syntaxhighlight lang="c">
[[https://community.bistudio.com/wiki/Arma_3_Cars_Config_Guidelines#Differential_parameters A], [https://developer.nvidia.com/sites/default/files/akamai/physx/Docs/Vehicles.html#pxvehicleclutchdata B]]
canHideBodies = true; // SoldierWSaboteur
</syntaxhighlight>


=====canLock=====
===fuelCapacity===
[[TokenNameValueTypes|Integer]]:
<tt>'''int>0'''</tt>


This token declares if the weapon is able to lock targets.<br>
===brakeIdleSpeed===
Values: 0 = false, 1 = cadet mode only, 2 = always.
<tt>'''float>0'''</tt>


<syntaxhighlight lang="c">
===latency===
canLock = 0;
</syntaxhighlight>


====cargoIsCoDriver====
===tankTurnForce===
Variable [[TokenNameValueTypes|Boolean]] [[TokenNameValueTypes|Array]] : Default {false};
<tt>'''int>0'''</tt>


This token declares which (if any) cargo positions are 'in the front' (Ie front windscreen)
===normalSpeedForwardCoef===
<tt>'''float>0'''</tt>


<syntaxhighlight lang="c">
===idleRpm===
cargoIsCoDriver[] = {true, true, false}; // 1st two passenger positions for a 5T truck
<tt>'''int>0'''</tt>
</syntaxhighlight>


The number of elements in '''this''' array correspond to the [[#transportSoldier]] value declared for '''this''' class model.
===redRpm===
<tt>'''int>0'''</tt>


====cast...Shadow====
===engineLosses===
[[TokenNameValueTypes|Boolean]]: Default false
<tt>'''int&ge;0'''</tt>


<syntaxhighlight lang="c">
===transmissionLosses===
castCargoShadow = false;
<tt>'''int&ge;0'''</tt>
castCommanderShadow = false;
castDriverShadow = false;
castGunnerShadow = true;
</syntaxhighlight>


Normally used to shadow 'soldiers' standing up in vehicle objects, such as the MG Jeep and Machine Guns.
===changeGearMinEffectivity[]===
<tt>'''float array'''</tt>


====Classes Embedded====
===__Fov===
see [[#Embedded ClassNames]]


====cloud...====
===gunnerOpticsModel===
Various([[TokenNameValueTypes|Strings]], [[TokenNameValueTypes|Floats]], [[TokenNameValueTypes|Arrays]])


<syntaxhighlight lang="c">
===gunnerOutOpticsModel===
cloudletDuration = 0.9;
cloudletAnimPeriod = 1.0;
cloudletSize = 0.1;
cloudletAlpha = 0.8;
cloudletGrowUp = 0.4;
cloudletFadeIn = 0.0;
cloudletFadeOut = 5.0;
cloudletAccY = -0.1;
cloudletMinYSpeed = 0.3;
cloudletMaxYSpeed = 1.5;
cloudletShape = "\ca\data\cl_basic";
cloudletColor[] = {1, 1, 1, 0};
</syntaxhighlight>


See [[#Smoke Class]]
===gunnerOpticsEffect[]===


====cobraLight====
===gunnerHasFlares===
[[TokenNameValueTypes|String]] : Used as a core model for all other 'air' craft.


<syntaxhighlight lang="c">
===hideWeapons__===
cobraLight = "AnyAddon\AnyP3d(.p3d)";
<tt>'''bool'''</tt>
</syntaxhighlight>


====coefInside...====
===inGunnerMayFire===
[[TokenNameValueTypes|Float]]:


<syntaxhighlight lang="c">
===lockDetectionSystem===
coefInside = 2; // default
coefInsideHeur = 4.3; // default
</syntaxhighlight>


Used by the static class for non moving objects such as buildings
===magazines[]===


<syntaxhighlight lang="c">
===minTotalDamageTreshold===
coefInside = 1; // forest
<tt>'''float&ge;0'''</tt>
coefInsideHeur = 0.25;
</syntaxhighlight>


====color====
Protects global vehicle health from damage.
Float [[TokenNameValueTypes|Array]]: of floats.  


<syntaxhighlight lang="c">
This works the same way as minimalHit for HitPoint locations: damage received below this value is ignored.
color[] = {0.8, 0.8, 1.0, 1.0};
</syntaxhighlight>


This is a fixed four dimension array consisting of the color values for a RGBA model.
(This property is 10-24-14 devbranch only currently)


See [[#Reflectors Class]], [[#Light Class]], [[#CargoLight Class]], [[#Smoke Class]]
===outGunnerMayFire===


====commanding====
===radarType===
[[TokenNameValueTypes|Integer]]: part of Turret class


<syntaxhighlight lang="c">
===secondaryExplosion===
commanding = -1;
<tt>'''bool''', obsolete?</tt>
</syntaxhighlight>


====cost====
Does not appear to be used in Arma 3. There are secondary explosions for certain types of destroyed vehicles, but they appear to be hardcoded.
[[TokenNameValueTypes|Float]]: Default Value 50,0000


This 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's 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.
[[http://resources.bisimulations.com/wiki/Damage_Modeling:_Objects#armor A]].


<syntaxhighlight lang="c">
===simulation===
cost = 10000000; // an air vehicle is typically this value
<tt>'''string'''</tt>
cost = 8; // a medic;
cost = 1; // a grunt
cost = 4; // an officer
cost = 0; // most buildings;
</syntaxhighlight>


<u>Related TokenNames</u>: [[#type (threat)|type]], [[#cost]], [[#threat]]
===thermalMode[]===
<tt>'''string array'''</tt>


====count====
===threat[]===
[[TokenNameValueTypes|String or Integer]]: (math formula).
<tt>'''float array'''</tt>


<syntaxhighlight lang="c">
[[https://manuals.bisimulations.com/vbs3/3-0/devref/#Config_Manual/CfgVehicles/T_cpp/cpp_Threat.htm%3FTocPath%3D4%20Configuration%20Manual%7CCfgVehicles%7C_____455 A]]
weapon = M60;
count = "30*1";
</syntaxhighlight>


this token is always associated in a weapon or magazine couplet, inside a TransportWeapons, or
===transportSoldier===
TransportMagazines class.
<tt>'''int&ge;0'''</tt>


The value is mostly represented as a string as above (a math formula), or it can be (unusually)
===viewGunnerInExternal===


<syntaxhighlight lang="c">
===visionmode[]===
count = 2;
<tt>'''string array'''</tt>
</syntaxhighlight>


See [[TokenNameValueTypes|At the End of the Day]] in the TokenNameValueTypes page for an explanation how this duality is possible.
Which vision types are available to toggle through ("N" key) in this optics view. Options are "Normal","TI","NVG".


====crew====
===waterPPInVehicle===
[[TokenNameValueTypes|String]]: Default Civilian
<tt>'''bool'''</tt>


Reflects whether vehicle is manned, and what with.
===weapons[]===


<syntaxhighlight lang="c">
===''HitPoints class properties''===
crew = <ClassName>
crew = "SoldierWPilot";
</syntaxhighlight>


'SoldierWPilot' is a class declared in same file.
====armor (local)====
<tt>'''float&ge;0'''</tt>


===D===
You will often see this property referred to as "armor (float)".
====dammage...====
Variable String [[TokenNameValueTypes|Array]]:


<syntaxhighlight lang="c">
====depends====
dammageHalf[] = {"\AnyAddon\AnyPAA.paa", "\AnyAddon\AnyOtherPAA.paa", ...};
dammageFull[] = {"\AnyAddon\AnyPAA.paa", "\AnyAddon\AnyOtherPAA.paa", ...};
</syntaxhighlight>


When 'vehicle' is considered at least half way to destruction, the series of pictures is applied to the model.
====explosionShielding====
<tt>'''float&ge;0'''</tt>


=====damageResistance=====
Modifies how global vehicle health is affected by 'splash' damage (indirectHit).
Since ArmA 1.00
Only for AI, to know when to shoot and when not.


<syntaxhighlight lang="c">
A factor applied to indirectHit damage. Values < 1 make a location resistant to indirectHit damage. Theoretically, values > 1 would make the location more sensitive, but this has not been confirmed (some properties have undocumented, hardcoded upper/lower limits). (See "explosionShielding (global)").
damageResistance = 0.004;
</syntaxhighlight>


You can calculate it from vehicle armor and hit value of weapon that should be able to harm the vehicle. tgtRadius is radius of virtual bounding sphere calculated in vehicle geometry. [[CfgVehicles_Config_Reference#armor_.28integer.29]]
[ [http://community.bistudio.com/wiki/Arma_3_Weapon_Config_Guidelines#Explosion_shielding A], [http://community.bistudio.com/wiki/Arma_3_Tanks_Config_Guidelines#New_attributes B] ].
 
<syntaxhighlight lang="c">
damageResistance = (HIT*HIT)/Armor*((0.27/tgtRadius)*(0.27/tgtRadius))
</syntaxhighlight>
 
====damper...====
[[TokenNameValueTypes|Float]]:
 
<syntaxhighlight lang="c">
damperSize = 0.1; // default
damperForce = 3; // default
</syntaxhighlight>
 
====deltaT====
[[TokenNameValueTypes|Float]]
 
<syntaxhighlight lang="c">
deltaT = -500;
</syntaxhighlight>
 
See [[#Smoke Class]]
 
====density====
[[TokenNameValueTypes|Float]]
 
<syntaxhighlight lang="c">
density = 0.5;
</syntaxhighlight>
 
See [[#Smoke Class]]
 
====destrType====
[[TokenNameValueTypes|String]]: Default Value = DestructDefault
 
Used for animation, sound, and final 'look' of vehicle.
 
<syntaxhighlight lang="c">
destrType = "DestructNo"; // nothing happens
destrType = "DestructBuilding"; // smoke. explosion
destrType = "DestructEngine"; // smoke only
destrType = "DestructTree"; // smoke, crushing, falls over
destrType = "DestructTent"; // smoke, crushing, flattens
destrType = "DestructMan";
destrType = "DestructDefault"; // =building
</syntaxhighlight>
 
Tent and Tree are no longer identifiable when destroyed if not class 'things'
 
====disappearAtContact====
[[TokenNameValueTypes|Bool]]: Default false;
 
<syntaxhighlight lang="c">
disappearAtContact = true; // FxCartridge
</syntaxhighlight>
 
====direction====
[[TokenNameValueTypes|string]]:
 
<syntaxhighlight lang="c">
direction = "konec L svetla";
</syntaxhighlight>
 
see [[#Reflectors Class]]
 
====displayName====
[[TokenNameValueTypes|String]]: Default value = "Unknown" or "Vehicle"
 
Selects object uniquely in the Mission Editor, and separately, is used to identify object in game according to [[#accuracy]]. For instance when pointing your men to an object while in a mission, it is this ''displayName'' that is used.
 
It is good practice to use a [[stringtable.csv]] that should accompany your addon so that
# All names and labels are in one place instead of hunting for them.
# For language differences
 
<syntaxhighlight lang="c">
displayName = "$STR_DN_AH1Z";
</syntaxhighlight>
 
Note, that will careful crafting of classes, different colored 'rocks' can all be called the same displayName (rock) in the mission itself. See [[#scope]] and [[#accuracy]] for details.
 
See [[#nameSound]] for definition of what is actually 'said'
 
<u>Related TokenNames</u>
[[#scope]], [[#accuracy]], [[#displayName]], [[#vehicleClass]], [[#nameSound]], [[#camouflage]]
 
=====displayNameShort=====
[[TokenNameValueTypes|String]]:
 
<syntaxhighlight lang="c">
displayNameShort = "$STR_DN_UH60";
</syntaxhighlight>
 
====driverIsCommander====
[[TokenNameValueTypes|Bool]] : Default false. When not set, the turret [[CfgVehicles_Config_Reference#commanding|commanding]] values are used to determine who is the commander. ([https://dev-heaven.net/issues/27614#note-10 source])
 
<syntaxhighlight lang="c">
driverIsCommander = true;
</syntaxhighlight>
 
For boat, MG Jeep and helicopters
 
see [[#has...]]
 
====driverForceOptics====
[[TokenNameValueTypes|Bool]]
'''Description:''' Determines if the driver can freely look around inside the vehicle or if he is locked to looking forward through the hatch/optics.
 
<syntaxhighlight lang="c">
driverForceOptics = true;
</syntaxhighlight>
 
====...DustEffect====
[[TokenNameValueTypes|String]]
 
Defines the effect that will be spawned at the position of the LandContact points.
 
<syntaxhighlight lang="c">
leftDustEffect = "vbs2_fx_lowTrackDustEffects";
rightDustEffect = "vbs2_fx_lowTrackDustEffects";
</syntaxhighlight>
 
see [[#...WaterEffect]]
 
===E===
====...Elev====
[[TokenNameValueTypes|Integers]]:Degrees
 
'''Description:''' How far the mounted weapon and viewpoint (through optics only) can be lowered or raised, and how much the initial elevation is. Values of max and min = 90 effectively allows a weapon to be lowered into the ground/straight into the air.
 
<syntaxhighlight lang="c">
initElev = -80;
minElev = -60;
maxElev = 10;
</syntaxhighlight>
 
part of any [[#Turret Class]] (tanks eg)
 
====ejectDamageLimit====
[[TokenNameValueTypes|Float]]: If the damage value of the vehicle is higher than the ejectDamageLimit, AI will disembark the vehicle.
 
<syntaxhighlight lang="c">
ejectDamageLimit = 0.75;
</syntaxhighlight>
 
====ejectDead...====
[[TokenNameValueTypes|Boolean]] : Default false
 
<syntaxhighlight lang="c">
ejectDeadGunner = false;
ejectDeadCargo = false;
ejectDeadDriver = false;
ejectDeadCommander = false;
</syntaxhighlight>
 
Causes that unit to 'unmount' the vehicle. Such as an MG nest, or motorcycle.
 
====ejectSpeed====
[[TokenNameValueTypes|Array]]: Speed vector of ejection seat. Therefore only applies to planes.
 
<syntaxhighlight lang="c">
ejectSpeed[] = {0, 0, 0}; // cant eject in a Cessna
</syntaxhighlight>
 
====Embedded ClassNames====
Some Token Names are encountered only within an embedded classname, rather than the main 'vehicle' body.
 
An embedded classname conveniently adds a unique feature to the 'vehicle'. Such as smoke, such as, a turret for a tank.
 
Embedded class names are used extensively in animated buildings for the quite logical reason that identical Token Names for door1 cannot be the same as Door2.
 
Below is a list of embedded classnames that (in most cases) use a TokenName uniquely. It is not found elsewhere and is better served describing that Token Name in the context it is found in, ie, an embedded class.
 
=====Hatch... Class=====
<syntaxhighlight lang="c">
class HatchDriver {
selection = poklop_driver;
axis = osa_poklop_driver;
angle = -100;
};
</syntaxhighlight>
 
=====Indicator... Class=====
<syntaxhighlight lang="c">
class IndicatorSpeed {
selection = ukaz_rychlo;
axis = osa_rychlo;
angle = -240;
min = 0;
max = 60 / 3.6;
};
</syntaxhighlight>
 
=====Light Class=====
<syntaxhighlight lang="c">
class Light {
ambient[] = {0.3, 0.15, 0.0, 1.0};
brightness = 0.08;
color[] = {1.0, 0.5, 0.0, 1.0};
position = ohniste;
shape = koulesvetlo;
size = 0.3;
};
</syntaxhighlight>
 
=====CargoLight Class=====
<syntaxhighlight lang="c">
class CargoLight {
ambient[] = {0.6, 0, 0.15, 1};
brightness = 0.007;
color[] = {0, 0, 0, 0};
};
</syntaxhighlight>
 
=====Reflectors Class=====
<syntaxhighlight lang="c">
Reflectors ::LandVehicle {
ambient[] = {0.1, 0.1, 0.1, 1.0};
brightness = 0.25;
color[] = {0.9, 0.8, 0.8, 1.0};
position = L svetlo;
size = 0.5;
direction = konec L svetla;
hitpoint = L svetlo;
selection = L svetlo;
};
</syntaxhighlight>
 
=====Smoke Class=====
<syntaxhighlight lang="c">
class Smoke {
density = 0.5;
deltaT = -500;
in = 0.0;
out = 0.0;
initT = 1000;
initYSpeed = 1.7;
interval = 0.01;
size = 0.1;
timeToLive = 100000002004087730000.0;
//
cloudletDuration = 0.9;
cloudletAnimPeriod = 1.0;
cloudletSize = 0.1;
cloudletAlpha = 0.8;
cloudletGrowUp = 0.4;
cloudletFadeIn = 0.0;
cloudletFadeOut = 5.0;
cloudletAccY = -0.1;
cloudletMinYSpeed = 0.3;
cloudletMaxYSpeed = 1.5;
cloudletShape = cl_basic;
cloudletColor[] = {1, 1, 1, 0};
class Table {
class T1 {
maxT = 0;
color[] = {0.8, 0.8, 0.8, 1};
};
class T2 {
maxT = 900;
color[] = {0.3, 0.3, 0.3, 1};
};
class T3 {
maxT = 1000;
color[] = {1, 0.5, 0, 0.5};
};
};
};
</syntaxhighlight>
 
====Turret Class====
(Tanks eg)
 
<syntaxhighlight lang="c">
class TurretBase {
body = OtocVez;
gun = OtocHlaven;
gunAxis = OsaHlavne;
gunBeg = usti hlavne;
gunEnd = konec hlavne;
minElev = -4;
maxElev = 20;
minTurn = -360;
maxTurn = 360;
soundServo[] = {Vehicles\gun_elevate, 0.031623, 1.000000};
turretAxis = OsaVeze;
};
</syntaxhighlight>
 
====Embedded TokenNames====
see [[#Embedded ClassNames]]
 
====enableSweep====
[[TokenNameValueTypes|Bool]]: Default true. Used by Helicopter class
 
<syntaxhighlight lang="c">
enableSweep = false; / /UH60MG
</syntaxhighlight>
 
Is sweeping over the target a valid technique for given helicopter?
 
====envelope====
[[TokenNameValueTypes|Float]] [[TokenNameValueTypes|Array]]
 
<syntaxhighlight lang="c">
// lift (G) based on speed
envelope[] = {
// speed relative to max. speed -> lift
// 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 // rel. speed
0.0, 0.2, 0.9, 2.1, 2.5, 3.3, 3.5, 3.2, 2.5, 2.0, 1.5, 1.0, 0.9, 0.7, 0.5 // lift
};
</syntaxhighlight>
 
Info by [http://forums.bistudio.com/showpost.php?p=2037721&postcount=9 RKSL-Rock]:
 
The top speed is set via the mass. So you will need MLODs to alter it. So it is the same issue as the original OP.
The config maxspeed value is only really used by the AI and the engine as a base variable in some calculations.
You can change the acceleration though by using the envelope command.
This will change the vertical speed relative to the maxspeed in the config in steps of 10% of the stated max speed.
This is the envelope from the RKSL Lynx AH7:
 
<syntaxhighlight lang="c">
envelope[] = {1.7, 2.50, 3.50, 4.50, 5.50, 5.50, 5.15, 5.15, 5.15, 5.15, 4.15, 3.15, 2.15, 2.15, 1.15};
</syntaxhighlight>
There are normally 15 values representing the vertical lift in m/s at 10% steps from 0 to 140% of the max speed.
So, if the max speed is 500 and the first value is always 0:
 
2nd value = 50kph and 2.5 m/s vertical speed
3rd value = 100kph and 3.5 m/s vertical speed
...
11th value = 500kph and 4.15 m/s vertical speed
...
15th value = 700kph and 1.15 m/s vertical speed.
You wont affect the top speed but it will make it easier to handle.
 
====extCameraPosition[]====
float [[TokenNameValueTypes|Array]]: Default {0, 2, -20};
 
<syntaxhighlight lang="c">
extCameraPosition[] = {0, 5, -30}; // plane
extCameraPosition[] = {0, 1, -10}; // cars
extCameraPosition[] = {0, 1.500000, -9}; // tanks
extCameraPosition[] = {0, 0.300000, -3.500000}; // man
</syntaxhighlight>
 
===F===
====minFireTime====
[[TokenNameValueTypes|Integer]]: Default 20 seconds
 
<syntaxhighlight lang="c">
minFireTime = 20;
</syntaxhighlight>
 
Minimal time spent firing on single target.
 
====fired====
[[TokenNameValueTypes|String]]: [[:Category:Event Handlers|Event Handlers]]
 
<syntaxhighlight lang="c">
fired = "_this exec ""\AnyAddon\AnySQS.sqs"""; // note the ""
</syntaxhighlight>
 
====flapsFrictionCoef====
[[TokenNameValueTypes|Float]]: Default 0.5
 
<syntaxhighlight lang="c">
flapsFrictionCoef = 2; // can be integer too.
</syntaxhighlight>
 
====forceHide...====
[[TokenNameValueTypes|Boolean]] : Default false
 
<syntaxhighlight lang="c">
forceHideDriver = true; // shilka
forceHideGunner = true; // tank
forceHideCommander = true;
</syntaxhighlight>
 
Disables the turnout option for that particular crew member
 
====forceSupply====
[[TokenNameValueTypes|Boolean]] : Default
 
<syntaxhighlight lang="c">
forceSupply = true;
</syntaxhighlight>
 
Found only in Weapon holders. Is used to make the weaponholder disappear when empty.
 
====formation...====
[[TokenNameValueTypes|Integer]]:
 
<syntaxhighlight lang="c">
formationX = 10; // default meters
formationZ = 20; // default meters
formationTime = 10; // default seconds
</syntaxhighlight>
 
One or both X Z values are used to keep objects separated (in meters) depending on
wedge, echelon, V, single line, formations.
 
====fov====
[[TokenNameValueTypes|Float]]
 
<syntaxhighlight lang="c">
fov = 0.85; // Cessna
fov = 0.85; // man
fov = 1.0; // truck
</syntaxhighlight>
 
====...Fov====
[[TokenNameValueTypes|Float]]
 
<syntaxhighlight lang="c">
minFov = 0.420000; // man
maxFov = 0.850000;
minFov = 0.600000; // truck
maxFov = 1.400000;
</syntaxhighlight>
 
also used by [[#...AngleX/Y|ViewPilot Classes]]
 
====fuelCapacity====
[[TokenNameValueTypes|Integer]]: Default Value 0 (litres)
 
<syntaxhighlight lang="c">
fuelCapacity = 50; // motorcycle
fuelCapacity = 100; // car
fuelCapacity = 700; // tank
fuelCapacity = 1000;// air
</syntaxhighlight>
 
===G===
====...Gun...====
[[TokenNameValueTypes|Integer]]:degrees
 
<syntaxhighlight lang="c">
minGunElev = -60;
maxGunElev = 60;
minGunTurn = -5;
maxGunTurn = 5;
minGunTurnAI = -30;
maxGunTurnAI = 30;
</syntaxhighlight>
 
====...GunnerMayFire====
[[TokenNameValueTypes|Boolean]]: Default false
 
<syntaxhighlight lang="c">
outGunnerMayFire = true; // m113
inGunnerMayFire = false;
</syntaxhighlight>
 
====...GunClouds Class====
This is a reference to the external WeaponCloudsGun classes
 
most models simply inherit the defaults
 
<syntaxhighlight lang="c">
class GunClouds: WeaponCloudsGun{};
class MGunClouds: WeaponCloudsMGun{};
</syntaxhighlight>
 
here is an example of over-rides for class man
 
<syntaxhighlight lang="c">
class GunClouds:WeaponCloudsGun {
cloudletGrowUp = 0.200000;
cloudletFadeIn = 0;
cloudletFadeOut = 0.400000;
cloudletDuration = 0.200000;
cloudletAlpha = 1;
cloudletAccY = 2;
cloudletMinYSpeed = -10;
cloudletMaxYSpeed = 10;
interval = 0.020000;
size = 0.300000;
sourceSize = 0.015000;
};
</syntaxhighlight>
 
====...GunFire Class====
This is a reference to the external WeaponFireGun classes
 
most models simply inherit the defaults
 
<syntaxhighlight lang="c">
class GunFire: WeaponFireGun {};
class MGunFire: WeaponFireMGun {};
</syntaxhighlight>
 
====gearbox[]====
[[TokenNameValueTypes|Array]]
 
'''Description:''' Changes acceleration and max speed values of certain Vehicles. If changed, impact to the acceleration is minor (if notable at all!) to catastrophic (worsened acceleration/maxspeed). Best to leave as-is.
 
<syntaxhighlight lang="c">
gearbox[] = {-18, 0, 110, 16.15, 14.44, 13.33};
</syntaxhighlight>
 
====gearRetracting====
[[TokenNameValueTypes|Bool]]: Default true
 
<syntaxhighlight lang="c">
gearRetracting = false; // Cessna
</syntaxhighlight>
 
more correctly viewed as HasRetractingGear.
 
====gun====
[[TokenNameValueTypes|String]]:
 
<syntaxhighlight lang="c">
gun = OtocHlaven;
</syntaxhighlight>
 
see [[#Turret Class]]
 
====gunAimDown====
[[TokenNameValueTypes|Float]]
 
'''Description:''' Aircraft only. How far a hardpoint-mounted gun "aims down"; high values allow for strafing runs without the need to nose-dive down too much, but also shift the targeting reticle in the aircraft's HUD; if too high, targeting reticle is only visible in 3rd Person (if available).
 
<syntaxhighlight lang="c">
gunAimDown = 0.07;
</syntaxhighlight>
 
====gunAxis====
 
====gunBeg====
 
====gunEnd====
see [[#Turret Class]]
 
====gunnerHasFlares====
[[TokenNameValueTypes|Boolean]]
 
<syntaxhighlight lang="c">
gunnerHasFlares = false;
</syntaxhighlight>
 
====gunnerName====
[[TokenNameValueTypes|String]]
 
<syntaxhighlight lang="c">
gunnerName = "$STR_POSITION_CREWCHIEF";
</syntaxhighlight>
 
====gunnerOutOptics...====
[[TokenNameValueTypes|String]]
 
<syntaxhighlight lang="c">
gunnerOutOpticsModel = "";
</syntaxhighlight>
 
[[TokenNameValueTypes|Array]]
 
<syntaxhighlight lang="c">
gunnerOutOpticsColor[] = {0, 0, 0, 1};
</syntaxhighlight>
 
[[TokenNameValueTypes|Boolean]]
 
<syntaxhighlight lang="c">
gunnerOutForceOptics = false;
</syntaxhighlight>
 
[[TokenNameValueTypes|Boolean]]
 
<syntaxhighlight lang="c">
gunnerOutOpticsShowCursor = false;
</syntaxhighlight>
 
===H===
====...Height====
[[TokenNameValueTypes|Integer]]:
 
<syntaxhighlight lang="c">
minHeight = 5; // Min height in metres above sea-level.
maxHeight = 50; // Max height above sea level.
avgHeight = 10;
</syntaxhighlight>
 
====has...====
[[TokenNameValueTypes|Bool]]:
 
<syntaxhighlight lang="c">
hasDriver = true; // default
hasGunner = false; // default
hasCommander =true; // default
</syntaxhighlight>
 
Depending on vehicle model.
 
Controls the 'get in' commands.
 
see [[#driverIsCommander]]
 
====...HeadTurnAI====
[[TokenNameValueTypes|Integer]] Degrees
 
<syntaxhighlight lang="c">
minHeadTurnAI = -70; // man class
maxHeadTurnAI = 70;
</syntaxhighlight>
 
====hiddenSelections====
[[TokenNameValueTypes|String]] [[TokenNameValueTypes|Array]]: Default none.
 
Here you can define selections on the model, which are not shown at mission startup. This is useful for creating variations of one model, where the different selections are left out with hiddenSelections. (ex: Soldiers have the hidden selection "medic", as they should not have a red cross at their body):
 
Aside from this, the hidden selections are used for runtime texture assignment. Every element in the hidden selection-array corresponds to an index, with the first element being 0. Only 10 elements are allowed in the array and are numbered 0-9.
 
<syntaxhighlight lang="c">
hiddenSelections[] = {"pruh"}; // bmp/tank
</syntaxhighlight>
 
Try {{Inline code|[[this]] [[setObjectTexture]] [0, "\data\duha.pac"];}} in the initline of a BMP and you'll see which parts are meant by the selection "pruh".
 
Don't forget to add the model and the selections in the [[CfgModels]], as the hidden selections won't work otherwise (at least not after [[Binarize|binarizing]]).
 
====hide...====
[[TokenNameValueTypes|Bool]]
 
<syntaxhighlight lang="c">
hideProxyInCombat = false; // default (true for tanks)
hideUnitInfo = false; // default see [[#unitInfoType]]
hideWeaponsCargo = false; // default
hideWeaponsCommander = true; // default
hideWeaponsDriver = true; // default
hideWeaponsGunner = true; // default
</syntaxhighlight>
 
====hitpoint====
[[TokenNameValueTypes|String]]:
 
<syntaxhighlight lang="c">
hitpoint = "L svetlo";
</syntaxhighlight>
 
See [[#Reflectors Class]]
 
====hitSound...====
<syntaxhighlight lang="c">
hitSound1[] = {voices\Hit11, 0.056234, 1};
...
hitSound20[] = {voices\Hit30, 0.056234, 1};
...
hitSounds[] = {hitSound1, 0.05, hitSound2, 0.05,....
</syntaxhighlight>
 
hitSounds is used by the engine to reference user generated hitSound...s
 
the number of user generated sounds, is limited only by the author.
 
====hour====
part of the IndicatorWatch class
 
<syntaxhighlight lang="c">
class IndicatorWatch {
hour = hodinova;
minute = minutova;
axis = osa_time;
reversed = 0;
};
</syntaxhighlight>
 
===I===
====icon====
[[TokenNameValueTypes|String]]: Default Value = "unknown_object.paa"
 
This value us used by the map editor to show the building or vehicle when editing. It is not normally visible during game play. (but can be)
 
The icon can be any jpg, paa, or pac file. paa is default. Note that Elite cannot handle jpegs.
 
<syntaxhighlight lang="c">
icon = "\AnyAddon\AnyPAA(.paa)";
</syntaxhighlight>
 
<u>Related TokenName</u>(s): [[#mapSize]]
 
====in/out====
[[TokenNameValueTypes|Float]]: These TokenNames are used inside the [[#Smoke Class]]
 
<syntaxhighlight lang="c">
in = 0.0;
out = 0.0;
</syntaxhighlight>
 
====init====
[[TokenNameValueTypes|String]]: [[:Category:Event Handlers|Event Handlers]]
The Event Handler receives an array '''_this''' (the exact content of which still has to be documented), of which the first element contains the vehicle (e.g. _this select 0).
 
<syntaxhighlight lang="c">
init = "[(_this select 0)] exec ""\AnyAddon\AnySqs.sqs""";
</syntaxhighlight>
 
====initT====
[[TokenNameValueTypes|Integer]]: This TokenName is used inside the [[#Smoke Class]]
 
<syntaxhighlight lang="c">
initT = 1000;
</syntaxhighlight>
 
====initYSpeed====
[[TokenNameValueTypes|Float]]: This TokenName is used inside the [[#Smoke Class]]
 
<syntaxhighlight lang="c">
initYSpeed = 1.7;
</syntaxhighlight>
 
====insideSoundCoef====
[[TokenNameValueTypes|Float]]: default 0.5
 
<syntaxhighlight lang="c">
insideSoundCoef = 0.05; // air vehicles are 2%
</syntaxhighlight>
 
====interval====
[[TokenNameValueTypes|Float]]: This TokenName is used inside the [[#Smoke Class]]
 
<syntaxhighlight lang="c">
interval = 0.01;
</syntaxhighlight>
 
====irScanGround====
[[TokenNameValueTypes|Bool]]: Default true.
 
Probaly used to stop ai looking down
 
<syntaxhighlight lang="c">
irScanGround = false; // tanks
</syntaxhighlight>
 
====irScanRange...====
[[TokenNameValueTypes|Integer]]: Default 0
 
<syntaxhighlight lang="c">
irScanRange = 4000; // outdated (since Resistance)
irScanRangeMin = 500; // tanks general
irScanRangeMax = 4000;
irScanRangeMin = 2000; // air
irScanRangeMax = 10000;
irScanRangeMin = 4000; // a vulcan
irScanRangeMax = 10000;
</syntaxhighlight>
 
====irScanToEyeFactor====
[[TokenNameValueTypes|Integer]]: Default 1
 
<syntaxhighlight lang="c">
irScanToEyeFactor = 2; // air
irScanToEyeFactor = 5; // shilka
</syntaxhighlight>
 
====irTarget====
[[TokenNameValueTypes|Bool]]: Default true.
 
Used for (some) buildings so that they don't show up on tank radar
 
<syntaxhighlight lang="c">
irTarget = false; // man
</syntaxhighlight>
 
====isBicycle====
[[TokenNameValueTypes|Bool]]: Default false.
 
this value inside the motorcycle class is used to turn it on when inheriting to a real bicycle
 
====isMan====
[[TokenNameValueTypes|Bool]]: Default true.
 
<syntaxhighlight lang="c">
isMan = 1;
</syntaxhighlight>
Defined within the man class
 
===K===
====killed====
[[TokenNameValueTypes|String]]: [[:Category:Event Handlers|Event Handlers]]
 
<syntaxhighlight lang="c">
killed = "[(_this select 0), 1, 1, 0, 0] exec ""\AnyAddon\AnySQS.sqs"""; // note the ""
</syntaxhighlight>
 
===L===
====ladders====
Embedded [[TokenNameValueTypes|Array]]: The ladders array is used to declare one or more ladder pairs inside the model.
 
<syntaxhighlight lang="c">
ladders[] = { {"start", "end" } }; // a building with one ladder
ladders[] = { {"start1", "end1" }, {"start2", "end2" } }; // two ladder building
//...etc
</syntaxhighlight>
 
Note that unfortunately, the 'start' and 'end' labels are arbitrary for ''each'' model. You cannot have a generic ladder building as such.
 
====laser...====
[[TokenNameValueTypes|Boolean]]: Default false
 
Determines if a vehicle has laser capability.
 
<syntaxhighlight lang="c">
laserScanner = true;
laserTarget = true; // used as a generic class of All {} to default things true
</syntaxhighlight>
 
====landingAoa====
MathFormula [[TokenNameValueTypes|String]] Default 10*3.1415/180
 
Landing Angle of Approach. Used by plane class
 
<syntaxhighlight lang="c">
landingAoa = 7*3.1415/180; // Cessna
</syntaxhighlight>
 
====landingSpeed====
[[TokenNameValueTypes|Integer]]: Default 0 Kph.
 
<syntaxhighlight lang="c">
landingSpeed = 75; // plane vehicles
</syntaxhighlight>
 
====library====
[[TokenNameValueTypes|String]]: This TokenName is associated with the library class of a vehicle (if any). It is used to give a 'memo' style full screen info on the given object. Example of use:
 
<syntaxhighlight lang="c">
class Library {
libTextDesc = "$STR_LIB_AH1Z";
};
</syntaxhighlight>
 
===M===
====magazine====
[[TokenNameValueTypes|Array]]: used in TransportMagazines class this specifies the type of ammo in the magazine and the amount.
 
<syntaxhighlight lang="c">
{
magazine = "30Rnd_556x45_Stanag";
count = "30*1";
}
</syntaxhighlight>
 
Each of these couplets are contained within a 'weapon' classname within the magazine''S'' class itself. Example
 
<syntaxhighlight lang="c">
class TransportMagazines {
class _xx_M16 {
magazine = M16;
count = 30*1;
};
class _xx_M60 {
......
};
class _xx_PK {
......
};
...
};
</syntaxhighlight>
 
====magazines====
Variable string [[TokenNameValueTypes|Array]]: default {}
 
see [[#weapons]] for proper description
 
====mapSize====
[[TokenNameValueTypes|Float]]: Default Value = 10 (meters).
 
Used for the map editor to show the [[#icon|icon]] associated with this model class.
 
There is no x y component to this, the measurement units are meters.
 
To create a circular, rectangular or other 'non square' image, you need to make a pac file for the icon with, a transparent layer.
 
<syntaxhighlight lang="c">
mapSize = 0.7; // small object such as a tree
mapSize = 4; // a smallish building
</syntaxhighlight>
 
The Mission Editor map is not very good in this regard (as noted above). However, the main problem is the base classes of the engine. The mapSize= for most objects, ''particularly'' buildings, is a one shoe fits all. A forest, eg, is the same mapSize= as a tree !!!
 
Later Oem addons, *generally* are better and more specific in this regard, making position and fitting a little easier.
 
====marker====
[[TokenNameValueTypes|String]] : used as a core for all other air craft when looking on map.
 
<syntaxhighlight lang="c">
marker = "\AnyAddon\AnyP3d.(p3d")";
</syntaxhighlight>


====material====
====material====
[[TokenNameValueTypes|Integer]]:
Used in Hit... classes, eg HitTurret HitBody
<syntaxhighlight lang="c">
material = 50;
</syntaxhighlight>
<u>Related TokenNames</u>: [[#armor (float)]], [[#material]], [[#name]], [[#passThrough]]
====maxT====
[[TokenNameValueTypes|Integer]]: This TokenName is used inside the [[#Smoke Class]]
<syntaxhighlight lang="c">
maxT = 0;
</syntaxhighlight>
====min/max====
[[TokenNameValueTypes|String]] Degrees Math Formula
<syntaxhighlight lang="c">
min = 0;
max = 60 / 3.6;
</syntaxhighlight>
Note for readability, these values are ''normally'' expressed as strings which the engine itself will convert.
see [[#selection|Indicator Class]]
====memoryPointExhaust...====
[[TokenNameValueTypes|String]]:
<syntaxhighlight lang="c">
memoryPointExhaust = "exhaust_start";
memoryPointExhaustDir = "exhaust_end";
</syntaxhighlight>
====memoryPointGun====
[[TokenNameValueTypes|String]]:
<syntaxhighlight lang="c">
memoryPointGun = "machinegun";
</syntaxhighlight>
====memoryPointGunnerOptics====
[[TokenNameValueTypes|String]]
<syntaxhighlight lang="c">
memoryPointGunnerOptics = "gunnerview";
</syntaxhighlight>
====memoryPointGunnerOutOptics====
[[TokenNameValueTypes|String]]
<syntaxhighlight lang="c">
memoryPointGunnerOutOptics = "commander_weapon_view";
</syntaxhighlight>


====memoryPoint...Missile====
====minimalHit====
[[TokenNameValueTypes|String]]:
<tt>'''float&ge;0'''</tt>


<syntaxhighlight lang="c">
Protects the location from damage.
memoryPointLMissile = "Missile_1";
memoryPointRMissile = "Missile_2";
</syntaxhighlight>
====memoryPoint...Rocket====
[[TokenNameValueTypes|String]]:


<syntaxhighlight lang="c">
Damage received below this value is ignored. A value of 0 means the location acts 'normally' and even the slightest damage will reduce its health. (See "armor (local)", "minTotalDamageThreshold").
memoryPointLRocket = "Rocket_1";
memoryPointRRocket = "Rocket_2";
</syntaxhighlight>
====memoryPointsGetIn...====
[[TokenNameValueTypes|String]]:
 
<syntaxhighlight lang="c">
memoryPointsGetInCargo = "pos_cargo";
memoryPointsGetInCoDriver = "pos_codriver";
memoryPointsGetInCommander = "pos_commander";
memoryPointsGetInDriver = "pos_driver";
memoryPointsGetInGunner = "pos gunner";
</syntaxhighlight>
=====memoryPointsGetIn...Dir=====
[[TokenNameValueTypes|String]]:
 
<syntaxhighlight lang="c">
memoryPointsGetInCargoDir = "pos_cargo_dir";
memoryPointsGetInCoDriverDir = "pos_codriver_dir";
memoryPointsGetInCommanderDir = "pos_commander_dir";
memoryPointsGetInDriverDir = "pos_driver_dir";
memoryPointsGetInGunnerDir = "pos gunner dir";
</syntaxhighlight>
 
====memoryPointSupply====
[[TokenNameValueTypes|String]]:
 
<syntaxhighlight lang="c">
memoryPointSupply = "supply";
</syntaxhighlight>
 
====memoryPointTrack...====
[[TokenNameValueTypes|String]]:
 
<syntaxhighlight lang="c">
memoryPointTrackFLL = "tyreTrack_1_1l";
memoryPointTrackFLR = "tyreTrack_1_1r";
memoryPointTrackBLL = "tyreTrack_1_2l";
memoryPointTrackBLR = "tyreTrack_1_2r";
memoryPointTrackFRL = "tyreTrack_2_1l";
memoryPointTrackFRR = "tyreTrack_2_1r";
memoryPointTrackBRL = "tyreTrack_2_2l";
memoryPointTrackBRR = "tyreTrack_2_2r";
</syntaxhighlight>
 
====microMimics====
[[TokenNameValueTypes|String]]: Man class
 
This token refers to the class within the external cfgMimics class
 
<syntaxhighlight lang="c">
microMimics = Micro;
</syntaxhighlight>
 
====minute====
part of the IndicatorWatch class
 
see [[#hour]]
 
====model====
[[TokenNameValueTypes|String]]: Default Value= "empty.p3d"
 
Location in the addon where the p3d model resides.
 
<syntaxhighlight lang="c">
model = "\AddonName\anyp3d(.p3d)";
</syntaxhighlight>
 
Where a class is not a visible 'object', such as a BaseClass. You can specify
 
<syntaxhighlight lang="c">
model = "";
</syntaxhighlight>
 
this cuts down on load and access.
 
<u>Related TokenName</u>: [[#simulation]], [[#reversed]]
 
====moves====
[[TokenNameValueTypes|String]]: Default = NoDefaultMoves
 
applies to the man class and refers to a cfgMoves class
 
<syntaxhighlight lang="c">
moves = CfgMovesMC; // civilian, in fact, there isn't another
</syntaxhighlight>
 
===N===
====...NightLights...====
[[TokenNameValueTypes|Float]]:
 
<syntaxhighlight lang="c">
spotableNightLightsOff = 0.05; // default
spotableNightLightsOn = 4; // default
visibleNightLightsOff = 0.1; // default
visibleNightLightsOn = 0.2; // default
</syntaxhighlight>


====name====
====name====
[[TokenNameValueTypes|String]]:
<tt>'''string'''</tt>


<syntaxhighlight lang="c">
Associates the HitPoints location with a named selection set of vertices in the relevant P3D's HitPoints LOD. This way, the game knows what vertices in the model go with what hit location. Additionally, the set name should be the same as a CfgSkeletons bone (so the game also knows which verts move with which vehicle part). (See "visual").
name = "motor";
</syntaxhighlight>


Used in Hit... classes, eg HitTurret HitBody
<u>Related TokenNames</u>: [[#armor (float)]], [[#material]], [[#name]], [[#passThrough]]
====nameSound====
[[TokenNameValueTypes|String]]: Default value: "Target"
Namesound 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''.
<syntaxhighlight lang="c">
nameSound = "rock";
</syntaxhighlight>
Many different nameSounds can be selected. Here are just a few.
<syntaxhighlight lang="c">
nameSound = crew;
nameSound = target;
nameSound = tank;
nameSound = house;
</syntaxhighlight>
The actual descriptive text accompanying the 'sound' can be different see [[#displayName]]
Typically, a collection of buildings (eg) will be configured as follows
<syntaxhighlight lang="c">
class GenBuilding : NonStrategic {
scope=private; // internal use only
VehicleClass="Some Editor Group Name";
namesound="house";
};
class YellowBuilding: GenBuilding {
scope=public;
name="YellowBuilding";
model="Some yellow building.p3d";
};
</syntaxhighlight>
<u>Related TokenNames</u>
[[#scope]], [[#accuracy]], [[#displayName]], [[#vehicleClass]], [[#nameSound]], [[#camouflage]]
====noseDownCoef====
[[TokenNameValueTypes|Float]]: Default 1.0 used by Plane class
<syntaxhighlight lang="c">
noseDownCoef = 0.025; // Cessna
</syntaxhighlight>
How much the nose drops when banking.
''Note: Not used in ArmA any more''
====nightVision====
[[TokenNameValueTypes|Bool]]: Default false
<syntaxhighlight lang="c">
nightVision = true;
</syntaxhighlight>
present in lawsoldier, sniper, saboteur, tank, and air crew
''Note: obsolete, not used, NVG item is used instead''
===O===
====...OpticsColor====
Float [[TokenNameValueTypes|Array]] : Default {0, 0, 0, 1};
<syntaxhighlight lang="c">
driverOpticsColor[] = {0, 0, 0, 1};
gunnerOpticsColor[] = {0.910000, 0.230000, 0.230000, 1};
commanderOpticsColor[] = {0.910000, 0.230000, 0.230000, 1};
</syntaxhighlight>
====...OpticsModel====
[[TokenNameValueTypes|String]]: Default ""
<syntaxhighlight lang="c">
commanderOpticsModel= "\AnyPbo\AnyP3d(.p3d)";
driverOpticsModel = "\AnyPbo\AnyP3d(.p3d)";
gunnerOpticsModel= "\AnyPbo\AnyP3d(.p3d)";
</syntaxhighlight>
====gunnerOpticsShowCursor====
[[TokenNameValueTypes|Bool]]
<syntaxhighlight lang="c">
gunnerOpticsShowCursor = true;
</syntaxhighlight>
===P===
====passThrough====
====passThrough====
[[TokenNameValueTypes|Bool]]: Default true
<tt>'''1&ge;float&ge;0'''</tt>
 
<syntaxhighlight lang="c">
passThrough = 1;
</syntaxhighlight>
 
Used in Hit... classes, eg HitTurret HitBody
 
<u>Related TokenNames</u>: [[#armor (float)]], [[#material]], [[#name]], [[#passThrough]]
 
====picture====
[[TokenNameValueTypes|String]]: Default: iaston.paa
 
I think this is for briefing Information icon click
 
<syntaxhighlight lang="c">
picture = "\AnyAddon\AnyPAA(.paa)";
</syntaxhighlight>
 
"Picture" is used in config.cpp to display the 128 x 64
graphic file of the unit in the HUD and the bottom
of the screen while in game. A .pac file can be used
also. If using a .pac make your alpha channel pink -
RGB 255, 0, 255. Pink is invisible in .pac file.
 
====position====
[[TokenNameValueTypes|String]]:
 
<syntaxhighlight lang="c">
position = "ohniste";
position = "L svetlo";
</syntaxhighlight>
 
See [[#Reflectors Class]], [[#Light Class]]
 
====precision====
<syntaxhighlight lang="c">
precision = 1; // man
precision = 200; // air
precision = 50; // boat
</syntaxhighlight>
 
====preferRoads====
[[TokenNameValueTypes|Bool]]: Default false
 
<syntaxhighlight lang="c">
preferRoads = true; // all vehicles
</syntaxhighlight>
 
====primary====
[[TokenNameValueTypes|Boolean]]: For models that can have, (but don't necessarily do have) multiple internal objects of the same type (turrets eg). One of them, is declared the main, or primary turret. There may indeed be only one 'turret'. (Note: this entry has been replaced by the '''primary...''' entries. Please use those for your turret definitions to ensure maximal compatibility.)


<syntaxhighlight lang="c">
Proportion of damage to this location that is passed on to damage global vehicle hit points. 0 = the location can be destroyed without affecting  overall vehicle health. This ''cannot'' be used to make a location cause extra global damage (since values over 1 are treated as = 1). (For that feature, see "depends").
primary = true;
</syntaxhighlight>


====primary...====
====radius====
[[TokenNameValueTypes|Boolean]] A vehicle can have multiple turrets, but one of them normally is the primary gunner turret and one the primary vehicle commander turret (this can be the same turret or two different turrets, but you cannot have several primary gunner or commander turrets). Please use these entries instead of the more general '''primary''' entry.
<tt>'''float&ge;0'''</tt>


<syntaxhighlight lang="c">
Defines the size of the HitPoint vertices in this location of the vehicle's P3D model. The radius creates a "sphere" of effect around each vertex. When fire geometry within this sphere is hit, the location takes damage^.
primaryGunner = false;
primaryObserver = true; // Commander
</syntaxhighlight>


====proxyIndex====
[[https://community.bistudio.com/wiki/Arma_3_Tanks_Config_Guidelines#New_attributes A]].
[[TokenNameValueTypes|Integer]]


<syntaxhighlight lang="c">
^It's actually a bit more complex than this. It appears that the game applies some damage to ''all'' locations based on their distance from the hit, with the nearest location taking the most damage of course.
proxyIndex = 2;
</syntaxhighlight>


====proxyType====
====visual====
[[TokenNameValueTypes|String]]
<tt>'''string'''</tt>


<syntaxhighlight lang="c">
Associates the HitPoints location with a corresponding model "section" (defined in CfgModels). This is purely for visual purposes--if the section has multiple damage textures/states, this lets the game know which location damage causes a particular section's appearance to change. (See "name").
proxyType = "CPCommander";
</syntaxhighlight>


===R===
[Samples_F\Test_Tank_01\CfgVehicles.hpp].
====...Radius====
[[TokenNameValueTypes|Float]]:


Represents a circular area (radius in meters from '''centre''' of object for action to take place
===''Typical HitPoints classes''===
Existing HitPoints classes being used in the game have certain (hard-coded?) properties that you should be aware of.


<syntaxhighlight lang="c">
====HitHull====
getInRadius=2.5; // default
Used in tracked vehicles, this location automatically '''destroys''' the vehicle when depleted (''regardless'' of remaining global health/"armor").
getInRadius=3.5; // tank
getInRadius=10; // ship
'''supplyRadius''' = 2.5; // for fuel dumps ammo trucks etc
</syntaxhighlight>


====...RotorSpeed====
====HitFuel====
[[TokenNameValueTypes|float]]: Helicopters
Used in wheeled vehicles, this location automatically '''destroys''' the vehicle when depleted (''regardless'' of remaining global health/"armor").


<syntaxhighlight lang="c">
====HitTrack====
mainRotorSpeed = 1.0; // default
Restricts mobility when depleted. Because these locations are not protected by armor plates, they extremely vulnerable to damage unless protected by tweaking explosionShielding (<1) and(/or) minimalHit (>0).
backRotorSpeed = 1.5; // default
//
mainRotorSpeed = 1.0; // ch47d
backRotorSpeed = -1.0;
</syntaxhighlight>


====...RotorDive====
====HitWheel====
[[TokenNameValueTypes|float]]: Helicopters, Default 0.0
Restricts mobility when depleted. Because these locations are not protected by armor plates, they extremely vulnerable to damage unless protected by tweaking explosionShielding (<1) and(/or) minimalHit (>0).


<syntaxhighlight lang="c">
====HitTurret====
minMainRotorDive = -9; // CH47D
Prevents the turret (turret optics view) from rotating when depleted.
maxMainRotorDive = 15;
neutralMainRotorDive = -5;
minBackRotorDive = -15;
maxBackRotorDive = 9;
neutralBackRotorDive = -5;
</syntaxhighlight>


====ReloadAnimations Class====
====HitGun====
General useage in Helicopters, this class is 'looked for' by the engine. Various models, but normally only one, are specified as follows
Gun (turret optics view) is stuck at minimum elevation when depleted.


<syntaxhighlight lang="c">
====HitAmmo====
class ReloadAnimations {
Ammo locations are not used in vanilla Arma 3, but could be added. Because it has no hard-coded properties, the only way to make it destroy a vehicle is to use the "depends" property to pass on its damage to HitHull/HitFuel.
class SomeThingA {
...
};
...
class SomeThingZ {
...
};
};
</syntaxhighlight>


here is an example for an Mi24 helicopter
====HitEngine====
Restricts mobility when depleted.


<syntaxhighlight lang="c">
====HitAvionics====
class MachineGun30E {
Used in aircraft, it makes the HUD display flicker and disappear when depleted.
weapon = MachineGun30E;
angle0 = 0;
angle1 = -2 * 3.141592654;
multiplier = 500;
type = rotation;
animPeriod = 0.500000;
selection = gatling;
begin = usti hlavne;
end = konec hlavne;
};
</syntaxhighlight>


====rotL/R====
====HitVRotor====
defined within a tank.Wheels class to describe the series of small wheels on each side
Used in helicopters to represent the tail rotor, it causes the aircraft to spin out of control when depleted.


<syntaxhighlight lang="c">
====HitHRotor====
rotR[] = {kolL1, kolL2, kolL3, kolL4, kolL5, kolL6, kolL7, kolL8};
Used in helicopters to represent the main rotor, the aircraft loses power when this location is depleted.
rotL[] = {kolP1, kolP2, kolP3, kolP4, kolP5, kolP6, kolP7, kolP8};
upDownL[] = {koloP1, podkoloP1, koloP2, podkoloP2, koloP3, podkoloP3, koloP4, podkoloP4, koloP5, podkoloP5, koloP6, podkoloP6, koloP7, podkoloP7, koloP8, podkoloP8};
upDownR[] = {koloL1, podkoloL1, koloL2, podkoloL2, koloL3, podkoloL3, koloL4, podkoloL4, koloL5, podkoloL5, koloL6, podkoloL6, koloL7, podkoloL7, koloL8, podkoloL8};
</syntaxhighlight>


====reversed====
==Model.cfg==
[[TokenNameValueTypes|Boolean]]: Default true
A game model is defined by its P3D file and an associated model.cfg config file that describes the model's components. It consists of two classes: CfgSkeletons & CfgModels.


Normally, models ARE reversed with respect to how they present on the screen after editing with tools like oxygen (eg) This overrides the default. See [[#model]]
[ [https://community.bistudio.com/wiki/Model_Config A], [https://community.bistudio.com/wiki/ArmA:_Howto_Model_Config B], [https://manuals.bisimulations.com/vbs3/3-0/devref/Content/Adding_Models/AM_Model_cfg.htm C], [https://manuals.bisimulations.com/vbs3/3-0/devref/Content/Config_Manual/Model_cfg/Model_cfg.htm D] ]


<syntaxhighlight lang="c">
===CfgSkeletons===
reversed = false; // class thing
</syntaxhighlight>


====rotor...====
===CfgModels===
[[TokenNameValueTypes|String]]: Helicopters


<syntaxhighlight lang="c">
=ARMOR (Materials)=
rotorBig = "vrtule_velka"; // cobra
==''BISURF properties''==
rotorBigBlend = "vrtule_velka_bl";
BISURF material files are assigned to fire geometry in a vehicle's P3D file. They define the physical properties of whatever geometry they've been assigned to. Critical among these properties is armor value as defined by bulletPenetrability (or bulletPenetrabilityWithThickness & Thickness).
rotorSmall = "vrtule_mala";
rotorSmallBlend = "vrtule_mala_bl";
</syntaxhighlight>


===S===
===bulletPenetrability===
====...Sensitivity====
<tt>'''int>0'''</tt>
[[TokenNameValueTypes|Float]]: Default 1.0 Used by Plane Class


<syntaxhighlight lang="c">
Material strength in terms of how well it resists penetration: lower is stronger.
aileronSensitivity = 0.33; // Cessna
elevatorSensitivity = 0.1; // Cessna
wheelSteeringSensitivity = 1.0; // default
</syntaxhighlight>


====...Simul/Plan====
This is based on how far in mm a BI-standard "7.62mm NATO round" travelling at 1000m/s will penetrate the material. For example, RHA = 15. (Considering it penetrates 15mm of RHA, this is some kind of AP bullet obviously!) It doesn't really matter though, just make sure new weapons are correctly calibrated to penetrate real-world depths based on real-world velocities.
[[TokenNameValueTypes|float]]: in meters


<syntaxhighlight lang="c">
===bulletPenetrabilityWithThickness===
steerAheadSimul = 0.5; // default
<tt>'''int>0'''</tt>
steerAheadPlan = 0.35; // default
steerAheadSimul = 0.2; // man
steerAheadPlan = 0.2;


predictTurnSimul = 1.2; // default
If the material has a "thickness" property specified, put its bulletPenetrability value here instead. (See "bulletPenetrability").
predictTurnPlan = 1.2; // default
predictTurnSimul = 3; // ship
predictTurnPlan = 3;
</syntaxhighlight>


====scope====
===Density===
[[TokenNameValueTypes|Integer]]: Default value = private.


<syntaxhighlight lang="c">
===dust===
scope = public;
</syntaxhighlight>


Scope in concept is the same as the C++ reserved words of public, protected and private.
===friction===


Defines normally exist at the top of a well written config.cpp to make meanings clearer.
===impact===


<syntaxhighlight lang="c">
===isWater===
#define private 0
#define protected 1
#define public 2
</syntaxhighlight>


The meaning of each is as follows
===restitution===


'''private:'''
===rough===


Only other classes inherit this class. It is not createVehicle'able, nor can the class be accessed via the Mission Editor.
===soundEviron===


private is a common method of grouping base characteristics together and inheriting all those common characteristics into a class that can be viewed or accessed.
===soundHit===


'''public:'''
===Thickness===
<tt>'''int>0'''</tt>


Any classes declared public are CamCreateabale, '''and''' selectable via the Editor.
Sets a thickness ceiling to the geometry--the idea is to make it easier to model small/thin fire geometry. If the fire geometry is thinner, the actual thickness is used. If the fire geometry is thicker, the "thickness" property overrides it and is used. The game does appear to take into account LOS thickness by evaluating an incoming projectile's angle-of-incidence (relative to the geometry normal).
 
'''protected:'''
 
Identical to public, except the class will not be listed in the mission editor. A very common form of use for this is
 
<syntaxhighlight lang="c">
class vegetables {
scope = protected;
VehicleClass = "Fruit and Onions"; // a generic group in mission editor
displayName = "Generic Vegetable";
namesound = whatever;
icon = "vegetableIcon.paa";
// put any other common characteristics in here
};
class GreenOnions : vegetables {
scope = public;
displayName = "Green Onion;
}
class PurpleOnion : vegetables {
....
}
</syntaxhighlight>
 
The effect here is to reduce (considerably) not only the amount of typing, but memory storage too.
 
<u>It is only the public classes that are listed in the Mission Editor.</u>
 
So in above example while each one of these has a separate ''displayName='', they are ALL 'grouped' in the Editor's "Fruit and Onions", and '''all''' of them will be referred to ''in the mission'' as "Generic Vegetable". If you follow along, you should fully expect to see another protected class called "Generic Fruit"
 
In the above example, it is just as useful to declare the base class '''private''. But, see below, and see [[#accuracy]]
 
Protected classes are CamCreatable in the mission.sqm.
 
Protected classes are immensely useful to 'hide' obsolete models that are still required to maintain compatibility with older missions. Ie older missions will still be playable, but newly created ones will only 'get at' the newer improvements specified in a public class. This
 
<syntaxhighlight lang="c">
class OriginalThing {
scope=protected;
....
// lots of original things
....
};
class ImprovedThing : OriginalThing { // <<<< inherits it all
scope=public;
...
// lots of new improved things
...
};
</syntaxhighlight>
 
<u>Related TokenNames</u>
[[#scope]], [[#accuracy]], [[#displayName]], [[#vehicleClass]], [[#nameSound]], [[#camouflage]]
 
====secondaryExplosion====
[[TokenNameValueTypes|Integer]]: Default disabled (-1)
 
<syntaxhighlight lang="c">
secondaryExplosion = -1;
</syntaxhighlight>
 
====sensitivity====
[[TokenNameValueTypes|Float]]: Default 1.0
 
<syntaxhighlight lang="c">
sensitivity = 0.6; // cars
sensitivity = 2; // sniper
</syntaxhighlight>
 
The higher the sensitivity value for an unit, the better it can see.
 
The effect is not linear, but logarithmic. So for an unit with value 1 vs one with value 3 it must be 1.7 times closer (square root of 3). This example does not take into account other factors like zoom, binocular use, optics, camouflage and accuracy (knowsAbout value needed to detect the type and side).
 
1 equals roughly to 100 meters, 2.5 to 210m, 3 to 250m.
 
OA 1.62 state:
 
<syntaxhighlight lang="c">
class All
sensitivity = 2.5;
sensitivityEar = 0.0075;
class AllVehicles: All
class Land: AllVehicles
class LandVehicle: Land
class Car: LandVehicle
sensitivity = 3;
class Motorcycle: LandVehicle
sensitivity = 3;
class Bicycle: Motorcycle
class Tank: LandVehicle
sensitivityEar = "0.0075 /3";
class APC: Tank
class Man: Land
sensitivity = 3;
sensitivityEar = 0.5;
class Animal: Man
class Air: AllVehicles
class Helicopter: Air
class Plane: Air
class Ship: AllVehicles
class AH6X_EP1: AH6_Base_EP1
sensitivity = 2;
class Ka137_Base_PMC: Helicopter
sensitivity = 2;
</syntaxhighlight>
 
====sensitivityEar====
[[TokenNameValueTypes|Float]]: Default 0.0075
 
Sets how well can the given unit hear others.
The bigger the value, the better the hearing.
 
<syntaxhighlight lang="c">
sensitivityEar = 0.13; // man
</syntaxhighlight>
 
====selection====
[[TokenNameValueTypes|String]]:
 
<syntaxhighlight lang="c">
selection = L svetlo;
</syntaxhighlight>
 
See [[#Reflectors Class]], [[#ReloadAnimations Class]] (Arma Only), [[#Hatch... Class]], [[#Indicator Class]]
 
====selection...====
[[TokenNameValueTypes|String]]:
 
<syntaxhighlight lang="c">
selectionBackLights = "light_back";
selectionBrakeLights = "light_brake";
selectionFireAnim = "muzzleflash";
selectionHRotorStill= "mainRotorStatic";
selectionHRotorMove = "mainRotorBlurred";
selectionVRotorStill = "tailRotorStatic";
selectionVRotorMove = "tailRotorBlurred";
selectionFabric = "latka";
</syntaxhighlight>
 
====shape====
[[TokenNameValueTypes|Float]]: This TokenName is used inside the [[#Light Class]]
 
<syntaxhighlight lang="c">
shape = "koulesvetlo";
</syntaxhighlight>
 
See [[#Light Class]], [[#Reflectors Class]]
 
====showgunneroptics====
[[TokenNameValueTypes|Boolean]]:
 
<syntaxhighlight lang="c">
showgunneroptics = 0;
</syntaxhighlight>
 
====showWeaponCargo====
[[TokenNameValueTypes|Boolean]]:Default ?
 
<syntaxhighlight lang="c">
showWeaponCargo = true;
</syntaxhighlight>
 
Found inside weapon holders (ammo boxes)<br>
OFP: If it's set to true player won't be able to put weapons/magazines to container.
 
====sound====
[[TokenNameValueTypes|String]]:
Used by animated objects (campfire eg) to give sound effect. Or, simply by ambients(wolves)
 
<syntaxhighlight lang="c">
sound = "Fire";
sound = Fountain;
sound = OwlSfx;
</syntaxhighlight>
 
====SoundEnvironExt Class====
class SoundEnvironExt {
 
This is a <u>Class</u> used within the man class. Some/ None, or all sections of it can (of course) be over-ridden by inheritance.
 
The external class '''CfgManActions''' accesses the '''SoundEnvironExt''' class defined (or inherited) for any 'man' (soldier eg).
 
External class '''CfgManActions''' contains many clauses
 
<syntaxhighlight lang="c">
soundOverride = fallbody; // eg
</syntaxhighlight>
 
for instances of when it wants sounds for that 'action' to take place.
 
thus, you can define none some or all arrays (within class with your SoundEnvironExt{}) for the following
 
<syntaxhighlight lang="c">
normalExt[] =
normal[] =
road[] =
rock[] =
water[] =
gravel[] =
sand[] =
drygrass[] =
grass[] =
forest[] =
mud[] =
wood[] =
metal[] =
snow[] =
hallway[] =
fallbody[] =
laydown[] =
standup[] =
crawl[] =
</syntaxhighlight>
 
Example
 
<syntaxhighlight lang="c">
snow[] = {
{ People\snow_L, 0.000032,1 },
{ People\snow_R, 0.000032,1 }
};
</syntaxhighlight>
 
snow is a Variable length Sound [[TokenNameValueTypes|Array]]
 
see [[#Sounds Various|sounds[]]]
 
====Sounds Various====
Complex [[TokenNameValueTypes|Array]]:
 
All the following use
 
<syntaxhighlight lang="c">
nameOfSound[] = {"\AddonName\AnySound(.wss)", 0.000000, 1, 1};
</syntaxhighlight>
 
*1st parameter: Sound file (path). *.wss is default, *.ogg can be specified.
*2nd parameter: Change of volume compared to the strongest sound that is audible at the camera's (player's) position. It means that the strongest sound is played on 100% and this sound is played weaker (calculated from dB value, distance, occlude, ...). If this sound is alone in sound scene then it is played on 100% every time.
*3rd parameter: Speed of playing, 1 = normal speed/time of playing, 2 = 2 times slower, with half lower pitch.
 
=====...Sound=====
<syntaxhighlight lang="c">
flySound[] = {"\AddonName\AnySound.wss", 0.000000, 1, 1};
singSound[] = {"\AddonName\SoundFile.ogg", 0.031623, 1, 1};
scudSound[] = {weapons\rocketflying, 316.227783, 0.200000};
scudSoundElevate[] = {vehicles\gun_elevate, 0.010000, 1};
</syntaxhighlight>
 
=====sound...=====
<syntaxhighlight lang="c">
soundCrash[] = {"\AnyAddon\AnySound(.wss)", 0.010000, 1};
</syntaxhighlight>
 
default values
 
<syntaxhighlight lang="c">
soundCrash[] = {Vehicles\crash, 0.316228, 1};
soundDammage[] = {"", 1, 1};
soundEngine[] = {"", 1, 1};
soundEnviron[] = {"", 1, 1};
soundLandCrash[] = {Explosions\intoground, 0.316228, 1};
soundWaterCrash[] = {Explosions\intowater, 0.316228, 1};
soundGetIn[] = {Vehicles\get_in, 0.000316, 1};
soundGetOut[] = {Vehicles\get_out, 0.000316, 1};
soundServo[] = {Vehicles\gun_elevate, 0.010000, 0.500000};
soundGear[] = {"\AnyAddon\AnySound(.wss)", 0.316228, 1}; // no default
 
additionalSound[] = {\AnyAddon\AnySound(.wss), 0.000000, 1}; // man only
</syntaxhighlight>
 
=====sound[]=====
used by animations
 
<syntaxhighlight lang="c">
sound[] = {"\anyPbo\AnySound(.wss)", 10.000000, 1};
</syntaxhighlight>
 
====side====
[[TokenNameValueTypes|Integer]]: Default Value: NEUTRAL.
 
The side, when declared, sets the 'vehicle' to east, west, resistance, civilian. The effect differs according to the 'vehicle' itself. Eg soldiers, versus hospitals or repair trucks that can only be used by same side, if specifically sided.
 
Well written missions (and configs) use defines at top of file to make this more legible.
 
<syntaxhighlight lang="c">
#define NO_SIDE -1
#define EAST 0 // (Russian)
#define WEST 1 // (NATO)
#define RESISTANCE 2 // Guerilla
#define CIVILIAN 3
#define NEUTRAL 4
#define ENEMY 5
#define FRIENDLY 6
#define LOGIC 7
 
side = EAST;
</syntaxhighlight>
 
NEUTRAL is the general case for all objects.
 
NO_SIDE is used for ambient seagulls and wolves (see [[#sound]]). It differs from NEUTRAL in that the engine spends no time looking for interraction with other objects.
 
====simulation====
[[TokenNameValueTypes|String]]: Default value: invisible.
 
The engine behaviour with this [[#model]].
 
<syntaxhighlight lang="c">
simulation = "SeaGull";
simulation = "thing";
simulation = "fire";
simulation = "flag";
simulation = "house";
simulation = airplane, helicopter, tank // eg
</syntaxhighlight>
<u>Related TokenName</u>: [[#model]]
 
====size====
[[TokenNameValueTypes|Float]]: This TokenName is used inside the Smoke class and Reflector class
 
<syntaxhighlight lang="c">
size = 0.1;
</syntaxhighlight>
 
part of [[#direction|Reflectors class]]
 
====source====
[[TokenNameValueTypes|String]]: found in animationSources
 
<syntaxhighlight lang="c">
source = "reload";
source = "time";
</syntaxhighlight>
 
====sourceAddress====
[[TokenNameValueTypes|String]]: found in animationSources
 
<syntaxhighlight lang="c">
sourceAddress = "loop";
</syntaxhighlight>
 
====sourceSize====
[[TokenNameValueTypes|Float]]: This TokenName is used inside the [[#Light Class]]
 
<syntaxhighlight lang="c">
sourceSize = 0.015;
</syntaxhighlight>
 
====...Speed====
[[TokenNameValueTypes|Float]]: In Kph.
 
<syntaxhighlight lang="c">
minSpeed = -0.5; // range 0->1
maxSpeed = 80; // default
maxSpeed = 30; // tractor
maxSpeed = 60; // boat
</syntaxhighlight>
 
====scud...====
[[TokenNameValueTypes|String]]: Default ""
 
<syntaxhighlight lang="c">
scudLaunch = scudlunch.rtm;
scudStart = scudstart.rtm;
scudModel = scud_strela_proxy;
scudModelFire = scud_strela_ohen;
</syntaxhighlight>
 
====straightDistance====
[[TokenNameValueTypes|INTEGER]]:
 
<syntaxhighlight lang="c">
straightDistance = 50;
</syntaxhighlight>
 
====submerged..====
[[TokenNameValueTypes|Float]]: default 0.0
 
Almost all 'objects' are '''not''' submerged. This parameter is used to hide objects such as effects
 
<syntaxhighlight lang="c">
submerged = -0.5; // thing effect
submergeSpeed = 0.25; // positive value makes it go deeper (sound goes quieter)
</syntaxhighlight>
 
===T===
====...Turn====
[[TokenNameValueTypes|Integers]] Degrees
 
<syntaxhighlight lang="c">
initTurn = 90;
minTurn = -70;
maxTurn = 70;
</syntaxhighlight>
 
part of any Turret class (tanks eg)
 
see[[#gun]]
 
====TokenNames Embedded====
see [[#Embedded ClassNames]]
 
=====turning=====
[[TokenNameValueTypes|Boolean]]:
 
<syntaxhighlight lang="c">
turning = 1;
</syntaxhighlight>
 
=====turnCoef=====
[[TokenNameValueTypes|Float]]: Default 2.0
 
<syntaxhighlight lang="c">
turnCoef = 6.0; // truck
turnCoef = 9.0; // tractor
</syntaxhighlight>
 
====terrainCoef====
[[TokenNameValueTypes|Float]]: Default 3.0
 
<syntaxhighlight lang="c">
terrainCoef = 6.0; // skoda
</syntaxhighlight>
 
====threat====
float [[TokenNameValueTypes|Array]]: Default Value {0.700000, 0.500000, 0.300000};
 
How threatening you are to unit [[#type (threat)|types]] {Soft, Armor, Air}, respectively.
 
The ai for this model selects targets of opportunity, based on these values.
 
<syntaxhighlight lang="c">
threat[] = {1, 0.0500000, 0.050000}; // soldier
threat[] = {1, 0.900000, 0.100000}; // law soldier
threat[] = {0.900000, 0.700000, 0.300000}; // bmp
</syntaxhighlight>
 
<u>Related TokenNames</u>: [[#type (threat)|type]], [[#cost]], [[#threat]]
 
====timeToLive====
[[TokenNameValueTypes|Float]]: Default 10,000,000,000.0; // seconds?
 
<syntaxhighlight lang="c">
timeToLive = 20; // thing effects (bullets)
timeToLive = 100000002004087730000.0; // campfire
</syntaxhighlight>
 
See [[#Smoke Class]]
 
====transport...====
 
=====transportAmmo=====
[[TokenNameValueTypes|Integer]]: Used by supply 'vehicles' to determine total amount available for entire mission. Once depleted...
 
A 'vehicle' in this case can be a genuine repair truck, or, a building.
 
<syntaxhighlight lang="c">
transportAmmo = 300000; // reammo truck
transportAmmo = 10000000; // bigship
 
transportFuel = 3000; // refueltruck
transportRepair = 200000000; // repairtruck
</syntaxhighlight>
 
=====transportMax...=====
[[TokenNameValueTypes|Integer]]: default 0
 
<syntaxhighlight lang="c">
transportMaxMagazines = 50; // car
transportMaxWeapons = 10;
transportMaxMagazines = 5; // motorcycle
transportMaxWeapons = 0;
transportMaxMagazines = 50; // tank
transportMaxWeapons = 10;
transportMaxMagazines = 20; // air
transportMaxWeapons = 3;
transportMaxMagazines = 100; // boat
transportMaxWeapons = 20;
transportMaxMagazines = 500; // ship
transportMaxWeapons = 200;
transportMaxMagazines = 200; // truck
transportMaxWeapons = 50;
transportMaxMagazines = 100; // apc
transportMaxWeapons = 20;
transportMaxMagazines = 200; // helicopter
transportMaxWeapons = 50;
transportMaxWeapons = 500; // ammo boxes
transportMaxMagazines = 2000;
</syntaxhighlight>
Values vary depending on exact type of 'boat' eg.
 
These TokenNames ate used to indicate how many units of each type an object can hold. Most objects can't hold anything.
 
=====transportSoldier=====
[[TokenNameValueTypes|Integer]]: Default Value= 0.
 
Number of 'passengers' this vehicle can carry. The value does '''not''' include the driver, '''nor''' any vehicle positions such as gunner (if any) or commander(if any). See the JeepMg below for a 3 person vehicle which can only transport ONE soldier.
 
<syntaxhighlight lang="c">
transportSoldier = 3; // jeep/car
transportSoldier = 50; // large ship
transportSoldier = 6to10; // SmallShip
transportSoldier = 3; // a10
transportSoldier = 8to12; // helicopters
transportSoldier = 2or3; // ambulance
transportSoldier = 8; // apc/bmp
transportSoldier = 12; // truck
transportSoldier = 1; // jeepmg
transportSoldier = 1or2; // repair type truck
</syntaxhighlight>
 
to make the game 'interesting', similar vehicles on different sides, can carry non equivalent numbers.
 
====transportVehiclesCount====
[[TokenNameValueTypes|Integer]] : default 0
 
<syntaxhighlight lang="c">
transportVehiclesCount = 15; // a Carrier (big ship)
</syntaxhighlight>
 
====TransportMagazines Class====
 
====transportVehiclesMass====
[[TokenNameValueTypes|Integer]]: Default 0
 
<syntaxhighlight lang="c">
transportVehiclesMass = 0; // not used by any model
</syntaxhighlight>
 
====TransportWeapons Class====
 
====turretAxis====
[[TokenNameValueTypes|String]]:
 
<syntaxhighlight lang="c">
turretAxis = OsaVeze;
</syntaxhighlight>
 
see [[#Turret Class]]
 
====type (threat)====
[[TokenNameValueTypes|Integer]]: Default Value: Armored
 
This indicates the threat type of the 'vehicle'.
 
In well written configs, the 3 possible values are declared as defines at top of file for legibility
 
<syntaxhighlight lang="c">
#define VSoft 0
#define VArmor 1
#define VAir 2
 
type = VAir;
</syntaxhighlight>
 
Vehicles (and buildings) are armoured, humans are 'soft' and aircraft (obviously) are air
 
<u>Related TokenNames</u>: [[#type (threat)|type]], [[#cost]], [[#threat]]
 
====type (animation)====
'''old''' [[TokenNameValueTypes|Unknown]]: Default Value: rotation
 
This appears in the ReloadAnimations class
 
<syntaxhighlight lang="c">
type = rotation;
</syntaxhighlight>
 
====typicalCargo====
Variable String [[TokenNameValueTypes|Array]]:Preloads vehicle with units (if auto)
 
This array can have zero or more strings.
 
<syntaxhighlight lang="c">
typicalCargo[] = {"Soldier", "Soldier", "SoldierLAW", "SoldierLAW"};
</syntaxhighlight>
 
Note that these are ''ClassNames'' of soldiers.
 
===U===
====...UsesPilotView====
[[TokenNameValueTypes|Bool]]: : Default false
 
<syntaxhighlight lang="c">
gunnerUsesPilotView = false; // some choppers (mi17)
commanderUsesPilotView = true;
</syntaxhighlight>
 
====unitInfoType====
[[TokenNameValueTypes|String]]
 
<syntaxhighlight lang="c">
unitInfoType = "UnitInfoSoldier";
</syntaxhighlight>
 
Certain 'vehicles' hide this information.
 
see [[#hide...|#hideUnitInfo]]
 
====unloadInCombat====
[[TokenNameValueTypes|bool]]: default true
 
<syntaxhighlight lang="c">
unloadInCombat = false;
</syntaxhighlight>
 
All true vehicles will cause ai to disembark when in combat.
 
====upDownL/R====
wheels class
see [[#rotL/R]]
 
===V===
====vehicleClass====
[[TokenNameValueTypes|String]]: Default Value= "Objects"
 
Used for Mission Editor basic category selection
 
<syntaxhighlight lang="c">
vehicleClass = "Air";
vehicleClass = "Support";
vehicleClass = "My Great Addon";
</syntaxhighlight>
 
<u>Related TokenNames</u>
[[#scope]], [[#accuracy]], [[#displayName]], [[#vehicleClass]], [[#nameSound]], [[#camouflage]]
 
====vehicleClass[]====
String [[TokenNameValueTypes|Array]]:
 
<syntaxhighlight lang="c">
vehicleClass[] = {Men, Car, Armored, Air, Support, Camera, Objects, Ammo, Sounds, Mines};
</syntaxhighlight>
 
====view...Shadow====
[[TokenNameValueTypes|Boolean]]:
 
<syntaxhighlight lang="c">
viewCargoShadow = true;
viewGunnerShadow = true;
</syntaxhighlight>
 
====viewGunnerInExternal====
[[TokenNameValueTypes|Boolean]]: default false
 
<syntaxhighlight lang="c">
viewGunnerInExternal = true; // for some turrets and M113
</syntaxhighlight>
 
===W===
====...WaterEffect====
[[TokenNameValueTypes|String]]
 
Defines the effect that will be spawned at the position of the LandContact points when vehicle is in/on the water.
 
<syntaxhighlight lang="c">
leftWaterEffect = "vbs2_fx_lowWaterEffects";
rightWaterEffect = "vbs2_fx_lowWaterEffects";
</syntaxhighlight>
 
see [[#...DustEffect]]
 
====weapon====
[[TokenNameValueTypes|String]]:
 
<syntaxhighlight lang="c">
weapon = "M197";
</syntaxhighlight>
 
Selects a weapon from the CfgWeapons class
 
====weapons====
Variable String [[TokenNameValueTypes|Array]]: default {};
 
Weaopns and Magazines contain individual description of what a 'vehicle' IS carrying.
 
<syntaxhighlight lang="c">
weapons[] = {"FFARLauncher", "TwinM134"}; // an aircraft
weapons[] = {CarHorn}; // truck
 
weapons[] = {M21, LAWLauncher, Throw, Put}; // soldier
magazines[] = {M21, M21, M21, M21, HandGrenade, HandGrenade, LAWLauncher};
</syntaxhighlight>
 
The amount of weapons (and magazines) that can be carried by the 'man' is determined by [[#weaponSlots]]
 
The names M21, Carhorn etc are external references to the cfgWeapons / cfgMagazines classes
 
====weaponSlots====
[[TokenNameValueTypes|Integer]]:
 
Weaponslots apply to man class (soldier, civilian, etc)
 
It indicates the 'gear' capacity.
 
<syntaxhighlight lang="c">
Soldier: 1 + 4 + 12*256 + 2*4096 + 2 + 8*16; // all soldiers/civilians
Medic : 1 + 4 + 8*256 + 2*4096 + 2 + 4*16;
 
weaponSlots = ;
 
1 = primary weapon
2 = handgun slot
4 = secondary weapon (launcher)
16 = handgun magazines (8x)(or grenades for M203/GP-25)
256 = magazine slots (12x / 8x for medics)
4096 = goggle slot (2x)
131072 = ?
</syntaxhighlight>
 
====wheelCircumference====
[[TokenNameValueTypes|Float]] Default 2.513 meters
 
<syntaxhighlight lang="c">
wheelCircumference = 8; // tractor
</syntaxhighlight>
 
====wounds====
string [[TokenNameValueTypes|Array]]:
 
<syntaxhighlight lang="c">
wounds[] = {xicht_a.paa, xicht_a_zranen, ...};
</syntaxhighlight>
 
this token is used in the man class to show a series of pac/paa files depending on damaged state of the body.


{{Cfg ref|end}}
{{Cfg ref|end}}
[[category:Operation Flashpoint: Modelling]]
[[category:Operation Flashpoint: Editing]]
[[Category:ArmA: Addon Configuration]]

Revision as of 06:07, 25 October 2014

Template:Cfg ref

INTRO

Arma 3 documentation is scattered to the 4 winds, and this applies to config file properties as much as anything. This is an attempt to make a single master list of properties with links to [sources]. Yes, there are other partial lists but they have problems: short/confusing "official" descriptions, obsolete information, and no links to further sources. So rather than wreak havoc with these lists, this article is an attempt to make an easier-to-digest resource (at least by Arma standards!).

(P.S. This list was initially compiled in Fall of 2014, and should be up-to-date as of that point.)

WARNING! Work in progress! Lots of missing entries, resorting to do, etc.

Existing Config pages

Here is a list of existing config pages on the Biki. They contain mostly semi-official descriptions of properties. Unfortunately, these descriptions tend to be short, incomplete, and/or confusing--particularly for new modders:

CfgVehicles Config Reference
CfgAmmo Config Reference
CfgMagazines Config Reference
CfgWeapons Config Reference
Model Config

This page is like a "Config Properties for Dummies" or a "Config Properties Explained". If you want the official description, go to the linked pages. If you want a more thorough explanation, use this page.

(Once this page is complete, a sensible route may be to integrate its information into the existing pages to reduce redundancy).

How Do Configs Work?

All configs get merged into one big config in memory when the game starts. Where duplicates exist, which config takes precedence depends on load order - the last config loaded "wins" by overwriting any previous value(s). Load order is determined by mod folder order, PBO name, but most importantly/properly by the "requiredAddons" section of the CfgPatches class.

CfgPatches & requiredAddons

The requiredAddons array in CfgPatches is how you control the load order of configs. "requiredAddons" means "load these other config files before you load this one." (And "this one" means the name of the class containing the requiredAddons statement). [ A,...]

How Many Config Files?

One consequence of the above discussion is the fact that you can technically spread your configs across tons of little files or ball them up into one big one or anything in between--with some exceptions^ (which are dicussed further below). Barring those exceptions, there is no iron-clad rule that requires certain classes (e.g. CfgAmmo, CfgVehicles, etc.) to be separated or located within particular filenames. It is essentially a matter of clarity, ease of editing, and consistency to help others understand your work.

^Known exceptions:

  1. #include'd .h/.hpp files are usually in the same folder or a subfolder of the #include'ing config, but apparently they can be anywhere as long as you #include "pathtofile".
  2. CfgSkeleton & CfgModels classes should be in either: a "model.cfg" file or a "[same-name-as-P3D].cfg" file. Unlike other config classes, these ones should not be thrown into random files.
  3. The model.cfg file must be in the same folder as--or in a parent folder of--the object (P3D) it configures.

WEAPONS

For understandable reasons, weapons data is scattered across several different config classes. Defining a weapon properly requires working with all these classes.

CfgAmmo

Most projectile-specific properties are located here. Some relevant properties you might expect to find here however--muzzle velocity for example--are located in the other weapon classes (either CfgMagazines or CfgWeapons).

airFriction

float

How much the projectile slows down as it travels through the air^. (A way of expressing aerodynamic drag).

This & initSpeed define a projectile's trajectory in Arma (for unpowered ones like Bullets & Shells--Rockets & Missiles have additional rocket thrust features that influence their flight). As soon as an unpowered projectile is fired, it starts to slow down due to drag. The formula is:

airFriction = deceleration / velocity2

e.g. a projectile with a muzzle velocity of 1640 m/s which slows down 94 m/s/s (i.e. by 94 m/s in the first second) has an airFriction of:

-94/16402 ≈ 0.0000035

(This property appears to be equivalent to Bird-Livingston's "ballistic K factor" * 0.0000001).

^A different formula based on bulletPenetrability & caliber is applied to slow projectiles passing through solid targets (fire geometry).

[A, B, "WW2 Ballistics: Armor and Gunnery" (Bird-Livingston, 2001)]

airLock

bool

Whether this ammo type (& AI using it) can lock onto airborne targets.

(Provided the related CfgWeapons also has locking capability--"canLock" is true). (see "irLock", "laserLock"). (Unlike irLock & laserLock--which have corresponding CfgVehicles properties that they lock onto, airborne targets are identified in some other way).

[A,B,C].

caliber

float≥0

Ability of the projectile to penetrate through target fire geometry (buildings, vehicle armor and components, people, etc.).

Penetration power is dependent on caliber and the projectile's speed. The formula for mm of penetration is:

(projectile speed / 1000)x(caliber)x(bulletPenetrability of the target BISURF)

So higher values mean more penetration. And, of course, as the projectile slows down during its flight, penetration decreases. Restating the formula:

caliber = (mm penetration @speedX)*1000 / (bulletPenetrability * speedX)

(A value of 1 is standardized as 15mm of RHA penetration at 1000m/s.) Note! Adding caliber values to missile or rockets is bugged and results in missiles flying through targets.

[A]

cost

int, ~$, (AI only)

A "monetary" value for each weapon.

This helps AI units decide on whether a weapon is worth using. Presumably AI does not waste high-cost weapons on low-threat or otherwise inappropriate targets. Seems to be vaguely calibrated in units of 1/3-1/4 $USD.

[A, B (contradictory)]

deflecting

int≥0, angle in degrees

Determines how much a projectile ricochets.

When the ammo impacts something at this angle or less, there is a chance it will ricochet--bouncing off the target and doing less than full kinetic damage. Impact angles greater than this will not ricochet. If deflecting = 0, the projectile will never ricochet. Ricochets can occur off of anything other than water: the ground, buildings, vehicles, etc.

[A]

explosive

1≥float≥0

The proportion of the projectile's damage that is explosive (rather than kinetic).

Unlike kinetic damage, explosive damage does not fall off as the projectile gradually loses speed. A value of 1 means the damage is fully explosive, while 0 means fully kinetic. (This property has nothing to do with the colloquial sense of an explosion as 'splash' damage--that property is covered by "indirectHit"). NOTE! Values >=0.7 nullify the penetration capability of the projectile, so keep values below this if you want the projectile to be able to penetrate armor at all. (See "hit", "typicalSpeed").

hit

float>0

The damage done by a direct hit from this projectile.

Damage is applied to global hitpoints ("armor" int) as well as locational ones ("armor" float). (The actual formula for applying damage is somewhat complex, so there is not necessarily a one-to-one application of hit value against hitpoints).[A]

indirectHit

float≥0

'Splash' damage done by a near miss from this projectile.

Projectiles with indirectHit values do damage within a sphere around their impact point (whether they hit the ground or an object). The size of the sphere is determined by "indirectHitRange" and targets within the sphere receive damage.

[A]

indirectHitRange

float≥0, meters

Describes the range of a projectile's 'splash' damage.

This is the base radius within which indirectHit damage is applied. indirectHit damage is actually applied out to 4x this radius, with linear falloff starting at indirectHit and ending at 0. (See "indirectHit"). [A]

initTime

float≥0, seconds, (Missiles only)

How long it takes the missile's rocket motor to start producing thrust after launch.

Missiles are launched at initSpeed. After initTime, the missile starts accelerating based on its thrust parameters. (see "thrust", "thrustTime").

irLock

bool

Whether this ammo type (& AI using it) can lock onto radar targets (CfgVehicles.irTarget = true).

irTarget vehicles are ones that are config'ed to show up on the game's simple "radar" overlay--i.e. tanks, trucks, etc., not humans. (You'd think "ir" would refer to infrared, but it actually refers to radar). (Provided the related CfgWeapons also has locking capability--"canLock" is true).

[A].

laserLock

bool

Whether this ammo type (& AI using it) can lock onto "laser targets", i.e. a laser designator dot (CfgVehicles.laserTarget = true). (Provided the related CfgWeapons also has locking capability--"canLock" is true).

[A,B].

manualControl

bool, (Missiles only)

A type of missile guidance.

True means the missile has SACLOS guidance (i.e. it continuously adjusts to fly toward wherever the player's crosshairs point).

[A,B]

manuevrability

maxControlRange

maxRange

maxRangeProbab

maxSpeed

float>0, m/s, (Missiles only)

Missile speed limit.

This value imposes an upper limit to the speed at which a missile can travel, regardless of its thrust properties. (see "thrust", "thrustTime").

minRange

minRangeProbab

midRange

midRangeProbab

muzzle velocity

Surprise! Muzzle velocity for a projectile is not found in CfgAmmo at all! Instead it is defined in the relevant CfgMagazines class and the property is called "initSpeed".

thrust

[A,B]

thrustTime

float>0, seconds, (Missiles only)

How many seconds the rocket motor will produces thrust before dying out.

(Keep in mind that regardless of these thrust properties, "maxSpeed" puts a ceiling on missile speed).

[A,B, C]

timeToLive

typicalspeed

int>0, m/s

Influences how much damage the projectile does when it hits.

Speed at which the projectile produces full "hit" damage; anything lower produces proportionately less damage (exception: any "explosive" damage component is always full value regardless of the impact speed). Note that this property does nothing to influence the projectile velocity, it used only in the damage calculation. (See "initSpeed", "explosive").

nvgOnly

visibleFire

visibleFireTime

CfgMagazines

Magazine properties plus some projectile-specific stuff that gets stored here instead of CfgAmmo.

initSpeed

int>0, m/s

Sets the muzzle velocity of ammo fired from this Magazine.

(Not to be confused with typicalSpeed, which does not affect projectile speed at all and is instead used for damage calculation only).

CfgWeapons

Gun/launcher-specific properties.

autoFire

bool

Whether the weapon will continue to fire if you hold down trigger.

[A].

ballisticsComputer

canLock

bool

Whether the weapon can lock on to a target (e.g. when a player hits the TAB key)

Must be true for any of the other lock modes to work (airLock, irLock, laserLock). 0 = never, 1 = in cadet mode only, 2 = always.

[A, B]

dispersion

float>0

Basic weapon accuracy.

This affects all projectiles fired from this weapon independent of other effects like AI skill, etc. It describes the weapon's dispersion in radians (1 milliradian = 1 angular mil = 0.001 dispersion, 1 MOA = 0.000290888 dispersion)

weaponLockSystem

cumulative int

How the weapon triggers a target's warning system.

What type(s) of lockDetectionSystem is set off in a vehicle targeted by this weapon: 0 = none, 1 = CM_Lock_Visual, 2 = CM_Lock_IR, 4 = CM_Lock_Laser, 8 = CM_Lock_Radar. Presumably canLock must = 1 for this to be relevant.

[A].

VEHICLES

tbd

CfgVehicles

armor (global)

int>0

Overall hit points/'health' for the vehicle.

You will often see this property referred to as "armor (int)". Supposedly object radius somehow modifies this value, although the formulas offered by BI don't make much sense. Note that locational hit-points are derived from this value--determined by the HitPoint class's own "armor" (float) value. So the lower this value, the weaker all the vehicle's corresponding location HitPoints will also be (i.e. the more damage a location takes with each hit).

[A, B, C].

armorStructural

int>0

Divisor to global damage; the higher the value (beyond 1), the less global damage ("armor"/"hit points") occurs whenever the vehicle gets hit. HitPoints class location damage is not affected by this property; the location takes damage from the hit without modification. Extremely high values practically nullify the (in)famous cumulative "hit points" system of vehicle damage (e.g. plinking a tank to death with a rifle).

[A].

crewVulnerable

bool, (AI only)

damageResistance

float>0

Tells AI units how resistant this vehicle is to damage (so they can decide whether or not to bother attacking based on the weapons they are carrying). The calculation appears to be based only on the target's global armor and size, along with the weapon's hit value; armor & penetration are not factors. The formula for deriving this value is supposedly:

(minHit^2) * (1/armor) * ([0.27/tgtRadius]^2)

where "miHit" is the "hit" value for the weakest weapon that the AI should find useful against the vehicle. How exactly the value is used by the game is a mystery. Possibly the AI check their weapon with this formula and compare it to the config value. Simplifying, one could say the AI checks it's weapon "hit" value against the minimum useful "hit" value the config has defined; if the AI weapon is >= the minimum value, the AI will consider attacking. If the AI's weapon is weaker, it won't.

[A,B,c]

explosionShielding (global)

float≥0

Modifies how global vehicle health is affected by 'splash' damage (indirectHit).

This works the same way as explosionShielding for HitPoint locations: indirectHit damage received is multiplied by this value.

(This property is 10-24-14 devbranch only currently)

hiddenSelections[]

string array

These are references to particular "sections" from the CfgModel (which in turn correspond to selection sets in the P3D) for this vehicle. These sections are designed to create variety within a single model by allowing the parts to be hidden and/or have alternate textures swapped out for variety.

[ A,B, fab.ofp.free.fr/Tutorials/Hidden_Selections.htm, tactical.nekromantix.com/wiki/doku.php?id=arma2:texturing:hiddenselectionstextures]

hiddenSelectionsTextures[]

string array

A list of (pathed) textures for use with hiddenSelections[]. The textures are assigned to the hiddenSelections[] elements in the order they are listed (first texture goes to the first element, and so on). hiddenSelections[] elements with no texture listed will be hidden at game startup, while those with a texture will be displayed and use the texture assigned. (see "hiddenSelections[]").

discreteDistance[]

discreteDistanceInitIndex

enginePower

int>0, kilowatts, (PhysX)

Engine power. (hp * 0.745699872 = kW).

[A]

maxOmega

int>;0, radians per second, (PhysX)

Maximum rotational speed of engine. (RPM * 0.104719755 = radians/s).

[A, B]

peakTorque

int>0, Newton-meters, (PhysX)

Maximum engine torque. (=enginePower*1000/maxOmega).

[A, B]

torqueCurve[]

float array, (PhysX)

An array describing how much torque the engine generates at various rotational speeds.

The values are normalized (0-1) so any units can be used to derive these values. The array consists of pairs of values in the form { {rotation1,torque1},{rotation2, torque2}, ...}. The first value in each pair tells the game how far along the RPM curve we are, the second value tells it how much to scale the peakTorque output. These are used to create a virtual graph which the game uses to determine engine power at various rotational speeds.

[A, B]

thrustDelay

int≥0, seconds, (PhysX)

Time it takes for engine to send power to the wheels from a stop.

This property does not affect already moving vehicles (see "clutchStrength" for something along those lines). Values >0 are suggested to reduce the chance that the vehicle's wheels slip every time it starts from a stop.

[A]

clutchStrength

float>0, (PhysX)

How 'tight' the clutch is--how quickly gear changes affect wheel speed.

Low values will mean more slippage and more gradual acceleration after gear changes, higher values mean less slippage and quick delivery of torque to the wheels after gear shifts. BI recommends starting with a value of 10 (for CarX anyway, TankX config values are typically closer to 100).

[A, B]

fuelCapacity

int>0

brakeIdleSpeed

float>0

latency

tankTurnForce

int>0

normalSpeedForwardCoef

float>0

idleRpm

int>0

redRpm

int>0

engineLosses

int≥0

transmissionLosses

int≥0

changeGearMinEffectivity[]

float array

__Fov

gunnerOpticsModel

gunnerOutOpticsModel

gunnerOpticsEffect[]

gunnerHasFlares

hideWeapons__

bool

inGunnerMayFire

lockDetectionSystem

magazines[]

minTotalDamageTreshold

float≥0

Protects global vehicle health from damage.

This works the same way as minimalHit for HitPoint locations: damage received below this value is ignored.

(This property is 10-24-14 devbranch only currently)

outGunnerMayFire

radarType

secondaryExplosion

bool, obsolete?

Does not appear to be used in Arma 3. There are secondary explosions for certain types of destroyed vehicles, but they appear to be hardcoded.

[A].

simulation

string

thermalMode[]

string array

threat[]

float array

[A]

transportSoldier

int≥0

viewGunnerInExternal

visionmode[]

string array

Which vision types are available to toggle through ("N" key) in this optics view. Options are "Normal","TI","NVG".

waterPPInVehicle

bool

weapons[]

HitPoints class properties

armor (local)

float≥0

You will often see this property referred to as "armor (float)".

depends

explosionShielding

float≥0

Modifies how global vehicle health is affected by 'splash' damage (indirectHit).

A factor applied to indirectHit damage. Values < 1 make a location resistant to indirectHit damage. Theoretically, values > 1 would make the location more sensitive, but this has not been confirmed (some properties have undocumented, hardcoded upper/lower limits). (See "explosionShielding (global)").

[ A, B ].

material

minimalHit

float≥0

Protects the location from damage.

Damage received below this value is ignored. A value of 0 means the location acts 'normally' and even the slightest damage will reduce its health. (See "armor (local)", "minTotalDamageThreshold").

name

string

Associates the HitPoints location with a named selection set of vertices in the relevant P3D's HitPoints LOD. This way, the game knows what vertices in the model go with what hit location. Additionally, the set name should be the same as a CfgSkeletons bone (so the game also knows which verts move with which vehicle part). (See "visual").

passThrough

1≥float≥0

Proportion of damage to this location that is passed on to damage global vehicle hit points. 0 = the location can be destroyed without affecting overall vehicle health. This cannot be used to make a location cause extra global damage (since values over 1 are treated as = 1). (For that feature, see "depends").

radius

float≥0

Defines the size of the HitPoint vertices in this location of the vehicle's P3D model. The radius creates a "sphere" of effect around each vertex. When fire geometry within this sphere is hit, the location takes damage^.

[A].

^It's actually a bit more complex than this. It appears that the game applies some damage to all locations based on their distance from the hit, with the nearest location taking the most damage of course.

visual

string

Associates the HitPoints location with a corresponding model "section" (defined in CfgModels). This is purely for visual purposes--if the section has multiple damage textures/states, this lets the game know which location damage causes a particular section's appearance to change. (See "name").

[Samples_F\Test_Tank_01\CfgVehicles.hpp].

Typical HitPoints classes

Existing HitPoints classes being used in the game have certain (hard-coded?) properties that you should be aware of.

HitHull

Used in tracked vehicles, this location automatically destroys the vehicle when depleted (regardless of remaining global health/"armor").

HitFuel

Used in wheeled vehicles, this location automatically destroys the vehicle when depleted (regardless of remaining global health/"armor").

HitTrack

Restricts mobility when depleted. Because these locations are not protected by armor plates, they extremely vulnerable to damage unless protected by tweaking explosionShielding (<1) and(/or) minimalHit (>0).

HitWheel

Restricts mobility when depleted. Because these locations are not protected by armor plates, they extremely vulnerable to damage unless protected by tweaking explosionShielding (<1) and(/or) minimalHit (>0).

HitTurret

Prevents the turret (turret optics view) from rotating when depleted.

HitGun

Gun (turret optics view) is stuck at minimum elevation when depleted.

HitAmmo

Ammo locations are not used in vanilla Arma 3, but could be added. Because it has no hard-coded properties, the only way to make it destroy a vehicle is to use the "depends" property to pass on its damage to HitHull/HitFuel.

HitEngine

Restricts mobility when depleted.

HitAvionics

Used in aircraft, it makes the HUD display flicker and disappear when depleted.

HitVRotor

Used in helicopters to represent the tail rotor, it causes the aircraft to spin out of control when depleted.

HitHRotor

Used in helicopters to represent the main rotor, the aircraft loses power when this location is depleted.

Model.cfg

A game model is defined by its P3D file and an associated model.cfg config file that describes the model's components. It consists of two classes: CfgSkeletons & CfgModels.

[ A, B, C, D ]

CfgSkeletons

CfgModels

ARMOR (Materials)

BISURF properties

BISURF material files are assigned to fire geometry in a vehicle's P3D file. They define the physical properties of whatever geometry they've been assigned to. Critical among these properties is armor value as defined by bulletPenetrability (or bulletPenetrabilityWithThickness & Thickness).

bulletPenetrability

int>0

Material strength in terms of how well it resists penetration: lower is stronger.

This is based on how far in mm a BI-standard "7.62mm NATO round" travelling at 1000m/s will penetrate the material. For example, RHA = 15. (Considering it penetrates 15mm of RHA, this is some kind of AP bullet obviously!) It doesn't really matter though, just make sure new weapons are correctly calibrated to penetrate real-world depths based on real-world velocities.

bulletPenetrabilityWithThickness

int>0

If the material has a "thickness" property specified, put its bulletPenetrability value here instead. (See "bulletPenetrability").

Density

dust

friction

impact

isWater

restitution

rough

soundEviron

soundHit

Thickness

int>0

Sets a thickness ceiling to the geometry--the idea is to make it easier to model small/thin fire geometry. If the fire geometry is thinner, the actual thickness is used. If the fire geometry is thicker, the "thickness" property overrides it and is used. The game does appear to take into account LOS thickness by evaluating an incoming projectile's angle-of-incidence (relative to the geometry normal).

Template:Cfg ref