{"name":"Turret Config Reference","title":"Turret Config Reference","type":"topic","url":"https://community.bistudio.com/wiki/Turret_Config_Reference","revid":378633,"updated":"2026-05-15T12:07:13Z","aliases":[],"markdown":"Operation Flashpoint used an optional turret class for some, few, models.\n\nThe next Arma titles use a **Turrets** (plural) class.\n\nGenerally, there is only a single \"MainTurret\" in the turrets class of any model that wants to have one. Or put another way, any model that has any turrets at all, will have a MainTurret class plus additionals if any.\n\nThis (often empty) Turrets class is embedded in the class heirarchy of many generic base models. A generic base model == Tank eg. Ie, a generic class that all real tanks inherit.\nFor the given tank (a T80 eg), it is expected, that values will be filled into the (often empty) Turrets class already provided.\nSome model families (HMMWV_Base eg) flesh out this turrets class for all their children, others do not.\nThe principle being, that many child models will inherit a Turrets class whether they want it or not.\n\nAs a consequence, **many** models that do not have turrets require the following:\n\n```cpp\nclass Turrets{};\n```\n\nI.e, their parent (or parents) have inherited a Turret class that needs to be ignored (for this model and it is children). It is good practice to put the above statement in your model (if you dont use turrets).\nA later change by you to a 'better' (™) parent might introduce unexpected errors if that parent has a turrets class and you didn't want one anyway.\n\n### Creating\n\nCreating any turret (singular) class for your model involves the use of:\n\n```cpp\nclass CfgVehicles\n{\n    class SomeModel // AllVehicles e.g\n    {\n        class NewTurret; // derive from your base base base class\n    };\n\n    class MyGreatModel : SomeModel // AllVehicles e.g\n    {\n        class Turrets\n        {\n            class MainTurret : NewTurret // build (or overwrite) a completely new turret\n            {\n                // ...\n            };\n\n            class MoreTurrets : NewTurret // if any\n            {\n                // ...\n            };\n        };\n    };\n};\n```\n\n`AllVehicles` is the lowest possible base class where you can obtain a pristine NewTurret class.\nIt would be an unusual model to inherit directly from `AllVehicles` (you might derive NewTurret from there, again, unusual), but you are unlikely to INHERIT `AllVehicles` directly.\nMore likely, you have got some other generic class that fills in much of the donkey work. For the purposes of obtaining a NewTurret, it matters diddly squat where it comes from. ALL models have one. Used, or not.\n\n### Inheriting\n\nThere are of course, derivations on the theme, a.k.a:\n\n```cpp\nclass CfgVehicles\n{\n    class Ship;\n    class Boat : Ship\n    {\n        class Turrets\n        {    // your model has to inherit from somewhere!\n            class NewTurret;    // create an entirely new animal OR\n            class MainTurret;    // twiddle what's already there IF there\n        };\n    };\n\n    class MyGreatModel : Boat\n    {\n        class Turrets : Turrets\n        {\n            class MainTurret : NewTurret    // create an entirely new one OR\n            class MainTurret : MainTurret    // just twiddle a few things from the generic class\n            {\n                // ...\n            };\n        };\n    };\n};\n```\n\nThe bottom line is that, ultimately, your turret will attach a **NewTurret class** (whether inherited, or, created right then)\n\n**ALL** models, ultimately, derive their turret(s), from this one, singular, NewTurret class.\n\nThe NewTurret class is embedded in **ALL** Vehicle classes (via the bin/config.bin). It can be used, or ignored, but it is unconditially there.\n\nThe following alphabetical sort describes all values that can be set in YOUR derived NewTurret (eg your MainTurret)\n\n### Notes\n\n- In the following list, the default value is declared. Ie the value that comes from the (sometimes inherited) NewTurret class. There should be no requirement to restate a default value unless the class you inherit from has done so.\n- Some values cannot be known by the NewTurret class and are defaulted to empty. They need you, to fill them in. They are of course string values pertaining to YOUR model.\n\nVery fortunately, these values (e.g memory points), are almost universal. It is a strange and wonderful model indeed that strays from the standard Czech names for these points.\n\nIn General, an inherited model will have already had these standard Czech names supplied by the parent.\nSo at best, they are *generally* not required to be stated, and at worst, using the 'example' name supplied in the alpabetic list below is a fairly sage bet.\n(if you have not got an OctoVez in your model, it's your problem, isn't it)\n\n### Alphabetic\n\n#### A\n\n##### animationSourceBody = \"mainTurret\"\n\nString\n**controller** source name for use with this turret's body in the cfgModels class.\n\n```cpp\nclass CfgModels\n{\n    class YourModel : InheritedFromSomeWhere\n    {\n        class Animations : Animations\n        {\n            class MainTurret\n            {\n                type = \"rotationY\";\n                source = \"mainTurret\";    // controller that provides input above\n                selection = \"OtocVez\";    // name of the used skeleton bone\n                axis = \"OsaVeze\";        // name of the model's axis\n            };\n        };\n    };\n};\n```\n\n##### animationSourceGun = \"mainGun\"\n\nString\nCreates a new animation source for use with this turret's gun in the cfgModels class.\n\n##### animationSourceHatch = \"hatchGunner\"\n\nString\nCreates a new animation source for use with this turret's gunner hatch in the cfgModels class.\n\n##### animationSourceElevation = \"\" (Arma 3 v1.00)\n\nString\nCreates a new animation source to be used for raising/lowering the turret.\n\n##### animationSourceCamElev = \"\" (Arma 3 v1.00)\n\nString\nCreates animation for camera movement which is independent from the main cannon (see artillery guns)\n\n##### animationSourceStickX = \"\" (Arma 3 v1.00)\n\nString\nCreates animation transferring controller input in X axis. Useful for i.e. joystick in turrets\n\n##### animationSourceStickY = \"\" (Arma 3 v1.00)\n\nString\nCreates animation transferring controller input in Y axis. Useful for i.e. joystick in turrets\n\n#### B\n\n##### body = \"mainTurret\"\n\nString\nThis defines the animation to be used for the horizontally moving selection of the turret and must be a model.cfg's **animation classname**.\nThe name of the source for the animation is defined via animationSourceBody.\n\n#### C\n\n##### cameraDir = \"\" (Arma 3 v1.00)\n\nString\nunknown. used in conjunction with artillery turrets with detached camera elevation from gun elevation\n\n##### canHideGunner = true\n\nBoolean\n\n##### castGunnerShadow = false\n\nBoolean\n\n##### class GunFire: WeaponFireGun{}\n\n##### class GunClouds: WeaponCloudsGun{}\n\n##### class MGunClouds: WeaponCloudsMGun{}\n\nThese all inherit the default external class.\n\n##### class HitPoints\n\n```cpp\nclass HitPoints\n{\n    class HitTurret\n    {\n        armor = 0.8;\n        material = 51;\n        name = \"turret\";\n        visual = \"turret\";\n        passThrough = 1;\n    };\n\n    class HitGun\n    {\n        armor = 0.6;\n        material = 52;\n        name = \"gun\";\n        visual = \"gun\";\n        passThrough = 1;\n    };\n};\n```\n\n##### class Turrets{}\n\nno embedded turret(s)\n\n##### class ViewGunner\n\n```cpp\nclass ViewGunner\n{\n    initAngleX = 5;\n    minAngleX = -85;\n    maxAngleX = 85;\n    initAngleY = 0;\n    minAngleY = -150;\n    maxAngleY = 150;\n    initFov = 0.7;\n    minFov = 0.42; // FOV of 0.4 is considered as 1x magnification by RSC displays\n    maxFov = 0.85;\n};\n```\n\n##### class ViewOptics\n\n```cpp\nclass ViewOptics\n{\n    initAngleX = 0;\n    minAngleX = -30;\n    maxAngleX = 30;\n    initAngleY = 0;\n    minAngleY = -100;\n    maxAngleY = 100;\n    initFov = 0.3; // baseline FOV 0.4 / optic FOV 0.3 = x1.33 magnification\n    minFov = 0.07; // baseline FOV 0.4 / optic FOV 0.07 = x5.7 magnification\n    maxFov = 0.35; // baseline FOV 0.4 / optic FOV 0.35 = x1.14 magnification\n};\n```\n\n##### commanding = 1\n\nInteger\nThe commanding number defines who is in command of the vehicle. The turret with the highest number will be the vehicles commander.\nIf he dies, the crew of the turret with the nearest smaller number will take over command, etc.\n\n#### D\n\n##### dontCreateAI = false\n\nBoolean\n\nDo not create AI in this turret\n\n#### E\n\n##### elevationMode = 3\n\nInteger.\n\n0 - Default, manual elevation by mouse\n1 - Manual elevation by elevUp/Down actions (Page Up/Page Down with default keybinds)\n2 - Auto elevation to the aimed position\n3 - Arma 3 v1.00 Switchable between manual elevation (1) and auto elevation (2) - with elevationMode = 3 the gun barrel is elevated via the page-up and page-down keys\n\n##### ejectDeadGunner = false\n\nBoolean\nIf true, the gunner's body will be ejected when killed.\n\n##### elevationAnimSourceSpeed = 1.0f\n\nFloat\nSpeed of rising/lowering turret. See animationSourceElevation\n\n#### F\n\n##### forceHideGunner = false\n\nBoolean\nIf true, the gunner will not be able to turn out.\n\n#### G\n\n##### gun = \"mainGun\"\n\nString\nThis defines the animation to be used for the verticaly moving selection of the turret and must be a model.cfg's **animation classname**. The name of the source for the animation is defined via animationSourceGun.\n\n##### gunAxis = \"\"\n\nString\n**Description:** Axis selectionname in MemoryLOD (for the gun axis, ie mouse up and down input).\n\n```\ngunAxis = \"OsaHlavne\";\n```\n\n##### gunBeg = \"\"\n\nString\nThe name of the barrel's front point in the model.\n\n```\nexample: gunBeg = \"usti hlavne\";\n```\n\n##### gunEnd = \"\"\n\nString The name of the barrel's rear point in the model.\n\n```\nexample: gunEnd = \"konec hlavne\";\n```\n\n##### gunnerAction = \"\"\n\nString The name of the animation the gunner is using while turned out.\n\n##### gunnerCompartments = \"Compartment1\"\n\nString\nOnly units sharing a compartment can switch seats.\n\n##### gunnerFireAlsoInInternalCamera = true\n\nBoolean\n\n##### gunnerForceOptics = true\n\nBoolean\nForces the gunner to use optics while turned in.\n\n##### gunnerGetInAction = \"\"\n\nString\nName of animation used for Get In action\n\n##### gunnerGetOutAction = \"\"\n\nString\nName of animation used for Get Out action\n\n##### gunnerInAction = \"\"\n\nString\nThe name of the animation the gunner is using while turned in.\n\n##### gunnerName = \"Gunner\"\n\nString\nAllows to use a custom string for the name of the turret.\n\n**example** gunnerName = \"Rear Gunner\";\n\n##### gunnerNotSpawned = false\n\nBoolean\nUsed in Arma 3 vanilla for Copilot turrets. Difference between gunnerNotSpawned and dontCreateAI is unknown.\n\n// Parameter doesn't exist in engine\n\n##### gunnerOpticsColor[] = { 0, 0, 0, 1 }\n\nArray\n\n##### gunnerOpticsEffect[] = {}\n\nArray\nDefines the Effects used for the optical view when turned in. Effects correspond to classes defined in CfgOpticsEffect.\n\n**example** gunnerOpticsEffect[] = { \"TankGunnerOptics1\", \"OpticsCHAbera1\" };\n\n##### gunnerOpticsModel = \"\"\n\nString\nThe optics model used when gunner is not turned out.\n\n```\nexample: gunnerOpticsModel = \"\\ca\\Tracked\\optika_tank_gunner\";\n```\n\n##### gunnerOutFireAlsoInInternalCamera = true\n\nBoolean\n\n##### gunnerOutForceOptics = false\n\nBoolean\nForces the gunner to use optics while turned out.\n\n##### gunnerOutOpticsColor[] = { 0, 0, 0, 1 }\n\nArray\n\n##### gunnerOutOpticsEffect[] = {}\n\nArray\n\n##### gunnerOutOpticsModel = \"\"\n\nString\n**Description:** The optics model used when gunner is turned out.\n\n```\ngunnerOutOpticsModel = \"\\ca\\Weapons\\optika_empty\";\n```\n\n##### gunnerOutOpticsShowCursor = false\n\nBoolean\n\n##### gunnerType = \"\" (Arma 3 v1.00)\n\nString\n**Description:** The soldier class that is the default crew for this turret. Overwrites the class defined in the `CfgVehicles`'s `crew = \"\";` token\n\n```\ngunnerType = \"O_Soldier_F\";\n```\n\n##### gunnerLeftHandAnimName = \"\"\n\nString\n**Description:** Defines bone for IK animations for gunner left hand\n\n##### gunnerReversedGetOut = 1\n\nNumber\nWhen set to 1, it is the old default behaviour of when you exit a vehicle, you face the opposite direction than the getIn point, so usually away from the vehicle.\nWhen set to 0 you can turn it off, so you will face at the vehicle when you get out. Useful for static turrets, like the M2 Turret\n\n##### gunnerRightHandAnimName = \"\"\n\nString\nDefines bone for IK animations for gunner right hand\n\n##### gunnerUsesPilotView = false\n\nBoolean\nThe gunner will use the View LOD - Pilot if true.\n\n#### H\n\n##### hasGunner = true\n\nBoolean\nWhen false, AI and players can't enter the turret from the outside. Players can switch to the turret from inside the vehicle however (if there is an enterable position with the same Compartment).\n\n##### hideWeaponsGunner = true\n\nBoolean\nIf true, the gunners weapons (his rifle) will not be displayed.\n\n#### I\n\n##### InGunnerMayFire = true\n\nBoolean\nIf true, the gunner will be able to fire the turrets weapons while inside the vehicle.\n\n##### initElev = 0\n\nDegrees\nThe initial elevation of the gun.\n\n##### initTurn = 0\n\nDegrees\nThe initial turn of the turret.\n\n##### isCopilot = 0\n\n##### isPersonTurret = 2\n\nValue 1 gives a working turret but only accessible from the inside while 2 enables a person to get into the turret from outside.\n\n#### L\n\n##### lockWhenDriverOut = false\n\nBoolean\nIf true, the turret can not be moved while the driver is turned out.\n\n##### lockWhenVehicleSpeed = -1\n\nInteger\nVehicle speed (in meter per second) at which point the turret will automatically return to a neutral pose (does not match up with \"initElev\" or \"initTurn\"). Value of -1 means it will never lock.\n\n##### LODTurnedIn = -1\n\nInteger\nDefines the LOD that is to be used when the Gunner is turned in.\nValue = -1 seems to default to the standard LOD (for Turret's that is Gunnerview).\nNote that LODTurnedIn = VIEW_GUNNER; or similar is not valid - unless you use a #define (see Arma 3 Samples to see how defines work).\n\nValue: -1 or 0 = Default LOD; 1 = first resolution LOD; 1000 = Gunnerview; 1100 = Pilotview; 1200 = Cargoview.\n\nThe View_Commander LOD is the default for turrets that have \"primaryObserver = 1;\" and \"primaryGunner = 0;\" in their config. The View_Commander LOD cannot be accessed manually in any other way.\n\n##### LODTurnedOut = -1\n\nInteger\nDefines the LOD that is to be used when the Gunner is turned out. The same rules as with LODTurnedIn apply.\n\n##### LODOpticsIn = -1\n\nInteger\nDefines the LOD that is to be used when the Gunner is turned in and in optics mode.\nValue = -1 or 0 default to the standard LOD (for Turret's that is Gunnerview).\nNote that LODTurnedIn = VIEW_GUNNER; or similar is not valid - unless you use a #define (see Arma 3 Samples to see how defines work).\n\nValue: -1 or 0 = Default LOD; 1 = first resolution LOD; 1000 = Gunnerview; 1100 = Pilotview; 1200 = Cargoview.\n\nThe View_Commander LOD is the default for turrets that have \"primaryObserver = 1;\" and \"primaryGunner = 0;\" in their config. The View_Commander LOD cannot be accessed manually in any other way.\n\n##### LODOpticsOut = -1\n\nInteger\nDefines the LOD that is to be used when the Gunner is turned out & optics in. The same rules as with LODOpticsIn apply.\n\n#### M\n\n##### magazines[] = {}\n\nArray\nAn array made of all magazines this turret is equipped with.\n\n```\nexample magazines[] = { \"BigGunMagazine\", \"SmallGunMagazine\" };\n```\n\n##### maxElev = 20\n\nDegrees The maximum elevation of the gun.\n\n##### maxHorizontalRotSpeed = 1.2\n\nFloat\nThe maximum horizontal speed of the turret.\n\nmaxHorizontalRotSpeed = \"((360/X)/45)\";\n\nX = time in seconds to turn 360°\n\n##### maxTurn = 360\n\nDegrees The maximum turn of the turret, unit is deegres.\n\n##### maxVerticalRotSpeed = 1.2\n\nFloat The maximum vertical speed of the turret, unit unknown. Bigger value - bigger rotation speed\n\n##### memoryPointsGetInGunner = \"\"\n\nString The name of the get in-point selection for this turret, located in the Memory-LOD of the model.\n\n```\nexample: memoryPointsGetInGunner = \"pos gunner\";\n```\n\n##### memoryPointsGetInGunnerDir = \"\"\n\nString\nThe name of the dir-point selection for this turret, located in the Memory-LOD of the model. It is used to make the gunner face a special direction while entering the vehicle.\n\n```\nmemoryPointsGetInGunnerDir = \"pos gunner dir\";\n```\n\n##### memoryPointGun = \"\"\n\nString\nThe point in the model where the MG fire of this turret will come from.\n\n```\nmemoryPointGun = \"machineGun\";\n```\n\n##### memoryPointGunnerOptics = \"\"\n\nString\nThe point in the model that defines gunner view point.\n\n```\nexample: memoryPointGunnerOptics = \"gunnerview\";\n```\n\n##### memoryPointGunnerOutOptics = \"\"\n\nString\n\n##### minElev = -4\n\nDegrees\nThe minimal elevation of the gun.\n\n##### minTurn = -360\n\nDegrees\nThe minimal turn of the turret, unit is degrees.\n\n##### minCamElev = -90\n\nDegrees\nThe minimal elevation of the camera, unit is degrees. Used together with elevationMode on artillery vehicles\n\n##### maxCamElev = 90\n\nDegrees\nThe maximum elevation of the camera, unit is degrees. Used together with elevationMode on artillery vehicles\n\n##### missileBeg = \"spice rakety\"\n\nString\n\n##### missileEnd = \"konec rakety\"\n\nString\n\n#### O\n\n##### outGunnerMayFire = false\n\nBoolean\nIf true, the gunner will be able to fire and move(!) the turret while turned out.\n\n#### P\n\n##### primary= 1\n\nUnknown: ??\n\n##### primaryGunner = true\n\nBoolean\nTrue if this turret is used by the primary gunner, false else.\n\n> [!WARNING]\n> There can be only ONE primary gunner on a vehicle, else you might often get a CTD.\n> Using addMagazine will add to the primaryGunner weapons. See addMagazineTurret (Arma 3) for other turrets.\n\n##### primaryObserver = false\n\nBoolean\nTrue if this turret is used by the primary observer (e.g. tank commander), false else.\n\n##### proxyType = \"CPGunner\"\n\nString\nThe proxy type of the turrets gunner, this may be CPGunner or CPCommander. The proxies have to be named according to this setting, so either \"proxy:Gunner.XX\" or \"proxy:Commander.XX\".\n\n##### proxyIndex = 1\n\nInteger\nThe proxy index of the turrets gunner. If your proxyType is \"CPGunner\" and proxyIndex = 1, the proxyname must be \"proxy:Gunner.01\", etc.\n\n##### playerPosition = 1\n\nInteger\nPlayer position, used for sound controller \"playerPos\" - see Arma 3: Sound: SoundControllers\n\n#### S\n\n##### selectionFireAnim = \"\"\n\nString\n\n##### showgunneroptics\n\nBoolean\n**Description:** ???\n\n```\nshowgunneroptics = true;\n```\n\n//Doesn't exist in engine\n\n##### showAsCargo = false\n\nBoolean\nIf true, turret is considered as Cargoposition\n\n##### soundServo[] = {\"\",0.003162,1.0}\n\nArray\nSound of the turrets servo, this is played whenever the turret is moving.\n\n##### stabilizedInAxes = 3\n\nInteger\n0 - No stabilisation\n1 - Gun elevation stabilised\n2 - Turret traverse stabilised\n3 - Both stabilised\n4 - View roll stabilised with the horizon (used in boats)\n\nUsing strings (like \"StabilizedInAxisX\") requires `#define`s in config:\n\n```cpp\n#define StabilizedInAxesNone    0\n#define StabilizedInAxisX        1\n#define StabilizedInAxisY        2\n#define StabilizedInAxesBoth    3\n#define StabilizedInRoll        4\n```\n\n##### startEngine = true\n\nBoolean\nIf true, moving the turret will start the vehicles engine. The engine will stop automatically once the turret stops moving.\n\n#### T\n\n##### turretAxis\n\nString\n**Description:** Axis selectionname in MemoryLOD (for the turret axis, ie mouse left and right input).\n\n```\nturretAxis = \"OsaVeze\";\n```\n\n##### turretFollowFreeLook = 0\n\nFloat\nIf 1, turret is slaved to the gunners viewdirection in freelook. When values is set to 2, it is possible to control turret on weaponless turrets. Value 1 is used in Attack Helicopters for example.\n\n#### U\n\n##### usePip = 0\n\nFloat\nGunner head movement will rotate the picture-in-picture (PIP) camera instead of the gunner's head within the vehicle.\nUsed for example in the Blackfish gunner turrets and the Hunter RCWS versions.\nSince 1.73.141940 it is possible to use `usePiP = 2`, which is going to make gunner following main turret movement - used i.e. for mortar gunner.\n\n#### V\n\n##### viewGunnerInExternal = false\n\nBoolean\nView gunner in external.\n\n##### viewGunnerShadow = true\n\nBoolean\n\n##### viewGunnerShadowDiff = 1.0\n\nFloat\n\n##### viewGunnerShadowAmb = 1.0\n\nFloat\n\n#### W\n\n##### weapons[] = {}\n\nArray An array made of all weapons this turret is armed with.\n\n**example**: weapons[] = { \"BWMod_L55\", \"BWMod_MG3_veh\" };","sections":[{"heading":null,"level":1,"markdown":"Operation Flashpoint used an optional turret class for some, few, models.\n\nThe next Arma titles use a **Turrets** (plural) class.\n\nGenerally, there is only a single \"MainTurret\" in the turrets class of any model that wants to have one. Or put another way, any model that has any turrets at all, will have a MainTurret class plus additionals if any.\n\nThis (often empty) Turrets class is embedded in the class heirarchy of many generic base models. A generic base model == Tank eg. Ie, a generic class that all real tanks inherit.\nFor the given tank (a T80 eg), it is expected, that values will be filled into the (often empty) Turrets class already provided.\nSome model families (HMMWV_Base eg) flesh out this turrets class for all their children, others do not.\nThe principle being, that many child models will inherit a Turrets class whether they want it or not.\n\nAs a consequence, **many** models that do not have turrets require the following:\n\n```cpp\nclass Turrets{};\n```\n\nI.e, their parent (or parents) have inherited a Turret class that needs to be ignored (for this model and it is children). It is good practice to put the above statement in your model (if you dont use turrets).\nA later change by you to a 'better' (™) parent might introduce unexpected errors if that parent has a turrets class and you didn't want one anyway."},{"heading":"Creating","level":3,"markdown":"Creating any turret (singular) class for your model involves the use of:\n\n```cpp\nclass CfgVehicles\n{\n    class SomeModel // AllVehicles e.g\n    {\n        class NewTurret; // derive from your base base base class\n    };\n\n    class MyGreatModel : SomeModel // AllVehicles e.g\n    {\n        class Turrets\n        {\n            class MainTurret : NewTurret // build (or overwrite) a completely new turret\n            {\n                // ...\n            };\n\n            class MoreTurrets : NewTurret // if any\n            {\n                // ...\n            };\n        };\n    };\n};\n```\n\n`AllVehicles` is the lowest possible base class where you can obtain a pristine NewTurret class.\nIt would be an unusual model to inherit directly from `AllVehicles` (you might derive NewTurret from there, again, unusual), but you are unlikely to INHERIT `AllVehicles` directly.\nMore likely, you have got some other generic class that fills in much of the donkey work. For the purposes of obtaining a NewTurret, it matters diddly squat where it comes from. ALL models have one. Used, or not."},{"heading":"Inheriting","level":3,"markdown":"There are of course, derivations on the theme, a.k.a:\n\n```cpp\nclass CfgVehicles\n{\n    class Ship;\n    class Boat : Ship\n    {\n        class Turrets\n        {    // your model has to inherit from somewhere!\n            class NewTurret;    // create an entirely new animal OR\n            class MainTurret;    // twiddle what's already there IF there\n        };\n    };\n\n    class MyGreatModel : Boat\n    {\n        class Turrets : Turrets\n        {\n            class MainTurret : NewTurret    // create an entirely new one OR\n            class MainTurret : MainTurret    // just twiddle a few things from the generic class\n            {\n                // ...\n            };\n        };\n    };\n};\n```\n\nThe bottom line is that, ultimately, your turret will attach a **NewTurret class** (whether inherited, or, created right then)\n\n**ALL** models, ultimately, derive their turret(s), from this one, singular, NewTurret class.\n\nThe NewTurret class is embedded in **ALL** Vehicle classes (via the bin/config.bin). It can be used, or ignored, but it is unconditially there.\n\nThe following alphabetical sort describes all values that can be set in YOUR derived NewTurret (eg your MainTurret)"},{"heading":"Notes","level":3,"markdown":"- In the following list, the default value is declared. Ie the value that comes from the (sometimes inherited) NewTurret class. There should be no requirement to restate a default value unless the class you inherit from has done so.\n- Some values cannot be known by the NewTurret class and are defaulted to empty. They need you, to fill them in. They are of course string values pertaining to YOUR model.\n\nVery fortunately, these values (e.g memory points), are almost universal. It is a strange and wonderful model indeed that strays from the standard Czech names for these points.\n\nIn General, an inherited model will have already had these standard Czech names supplied by the parent.\nSo at best, they are *generally* not required to be stated, and at worst, using the 'example' name supplied in the alpabetic list below is a fairly sage bet.\n(if you have not got an OctoVez in your model, it's your problem, isn't it)"},{"heading":"Alphabetic","level":3,"markdown":""},{"heading":"A","level":4,"markdown":""},{"heading":"animationSourceBody = \"mainTurret\"","level":5,"markdown":"String\n**controller** source name for use with this turret's body in the cfgModels class.\n\n```cpp\nclass CfgModels\n{\n    class YourModel : InheritedFromSomeWhere\n    {\n        class Animations : Animations\n        {\n            class MainTurret\n            {\n                type = \"rotationY\";\n                source = \"mainTurret\";    // controller that provides input above\n                selection = \"OtocVez\";    // name of the used skeleton bone\n                axis = \"OsaVeze\";        // name of the model's axis\n            };\n        };\n    };\n};\n```"},{"heading":"animationSourceGun = \"mainGun\"","level":5,"markdown":"String\nCreates a new animation source for use with this turret's gun in the cfgModels class."},{"heading":"animationSourceHatch = \"hatchGunner\"","level":5,"markdown":"String\nCreates a new animation source for use with this turret's gunner hatch in the cfgModels class."},{"heading":"animationSourceElevation = \"\" (Arma 3 v1.00)","level":5,"markdown":"String\nCreates a new animation source to be used for raising/lowering the turret."},{"heading":"animationSourceCamElev = \"\" (Arma 3 v1.00)","level":5,"markdown":"String\nCreates animation for camera movement which is independent from the main cannon (see artillery guns)"},{"heading":"animationSourceStickX = \"\" (Arma 3 v1.00)","level":5,"markdown":"String\nCreates animation transferring controller input in X axis. Useful for i.e. joystick in turrets"},{"heading":"animationSourceStickY = \"\" (Arma 3 v1.00)","level":5,"markdown":"String\nCreates animation transferring controller input in Y axis. Useful for i.e. joystick in turrets"},{"heading":"B","level":4,"markdown":""},{"heading":"body = \"mainTurret\"","level":5,"markdown":"String\nThis defines the animation to be used for the horizontally moving selection of the turret and must be a model.cfg's **animation classname**.\nThe name of the source for the animation is defined via animationSourceBody."},{"heading":"C","level":4,"markdown":""},{"heading":"cameraDir = \"\" (Arma 3 v1.00)","level":5,"markdown":"String\nunknown. used in conjunction with artillery turrets with detached camera elevation from gun elevation"},{"heading":"canHideGunner = true","level":5,"markdown":"Boolean"},{"heading":"castGunnerShadow = false","level":5,"markdown":"Boolean"},{"heading":"class GunFire: WeaponFireGun{}","level":5,"markdown":""},{"heading":"class GunClouds: WeaponCloudsGun{}","level":5,"markdown":""},{"heading":"class MGunClouds: WeaponCloudsMGun{}","level":5,"markdown":"These all inherit the default external class."},{"heading":"class HitPoints","level":5,"markdown":"```cpp\nclass HitPoints\n{\n    class HitTurret\n    {\n        armor = 0.8;\n        material = 51;\n        name = \"turret\";\n        visual = \"turret\";\n        passThrough = 1;\n    };\n\n    class HitGun\n    {\n        armor = 0.6;\n        material = 52;\n        name = \"gun\";\n        visual = \"gun\";\n        passThrough = 1;\n    };\n};\n```"},{"heading":"class Turrets{}","level":5,"markdown":"no embedded turret(s)"},{"heading":"class ViewGunner","level":5,"markdown":"```cpp\nclass ViewGunner\n{\n    initAngleX = 5;\n    minAngleX = -85;\n    maxAngleX = 85;\n    initAngleY = 0;\n    minAngleY = -150;\n    maxAngleY = 150;\n    initFov = 0.7;\n    minFov = 0.42; // FOV of 0.4 is considered as 1x magnification by RSC displays\n    maxFov = 0.85;\n};\n```"},{"heading":"class ViewOptics","level":5,"markdown":"```cpp\nclass ViewOptics\n{\n    initAngleX = 0;\n    minAngleX = -30;\n    maxAngleX = 30;\n    initAngleY = 0;\n    minAngleY = -100;\n    maxAngleY = 100;\n    initFov = 0.3; // baseline FOV 0.4 / optic FOV 0.3 = x1.33 magnification\n    minFov = 0.07; // baseline FOV 0.4 / optic FOV 0.07 = x5.7 magnification\n    maxFov = 0.35; // baseline FOV 0.4 / optic FOV 0.35 = x1.14 magnification\n};\n```"},{"heading":"commanding = 1","level":5,"markdown":"Integer\nThe commanding number defines who is in command of the vehicle. The turret with the highest number will be the vehicles commander.\nIf he dies, the crew of the turret with the nearest smaller number will take over command, etc."},{"heading":"D","level":4,"markdown":""},{"heading":"dontCreateAI = false","level":5,"markdown":"Boolean\n\nDo not create AI in this turret"},{"heading":"E","level":4,"markdown":""},{"heading":"elevationMode = 3","level":5,"markdown":"Integer.\n\n0 - Default, manual elevation by mouse\n1 - Manual elevation by elevUp/Down actions (Page Up/Page Down with default keybinds)\n2 - Auto elevation to the aimed position\n3 - Arma 3 v1.00 Switchable between manual elevation (1) and auto elevation (2) - with elevationMode = 3 the gun barrel is elevated via the page-up and page-down keys"},{"heading":"ejectDeadGunner = false","level":5,"markdown":"Boolean\nIf true, the gunner's body will be ejected when killed."},{"heading":"elevationAnimSourceSpeed = 1.0f","level":5,"markdown":"Float\nSpeed of rising/lowering turret. See animationSourceElevation"},{"heading":"F","level":4,"markdown":""},{"heading":"forceHideGunner = false","level":5,"markdown":"Boolean\nIf true, the gunner will not be able to turn out."},{"heading":"G","level":4,"markdown":""},{"heading":"gun = \"mainGun\"","level":5,"markdown":"String\nThis defines the animation to be used for the verticaly moving selection of the turret and must be a model.cfg's **animation classname**. The name of the source for the animation is defined via animationSourceGun."},{"heading":"gunAxis = \"\"","level":5,"markdown":"String\n**Description:** Axis selectionname in MemoryLOD (for the gun axis, ie mouse up and down input).\n\n```\ngunAxis = \"OsaHlavne\";\n```"},{"heading":"gunBeg = \"\"","level":5,"markdown":"String\nThe name of the barrel's front point in the model.\n\n```\nexample: gunBeg = \"usti hlavne\";\n```"},{"heading":"gunEnd = \"\"","level":5,"markdown":"String The name of the barrel's rear point in the model.\n\n```\nexample: gunEnd = \"konec hlavne\";\n```"},{"heading":"gunnerAction = \"\"","level":5,"markdown":"String The name of the animation the gunner is using while turned out."},{"heading":"gunnerCompartments = \"Compartment1\"","level":5,"markdown":"String\nOnly units sharing a compartment can switch seats."},{"heading":"gunnerFireAlsoInInternalCamera = true","level":5,"markdown":"Boolean"},{"heading":"gunnerForceOptics = true","level":5,"markdown":"Boolean\nForces the gunner to use optics while turned in."},{"heading":"gunnerGetInAction = \"\"","level":5,"markdown":"String\nName of animation used for Get In action"},{"heading":"gunnerGetOutAction = \"\"","level":5,"markdown":"String\nName of animation used for Get Out action"},{"heading":"gunnerInAction = \"\"","level":5,"markdown":"String\nThe name of the animation the gunner is using while turned in."},{"heading":"gunnerName = \"Gunner\"","level":5,"markdown":"String\nAllows to use a custom string for the name of the turret.\n\n**example** gunnerName = \"Rear Gunner\";"},{"heading":"gunnerNotSpawned = false","level":5,"markdown":"Boolean\nUsed in Arma 3 vanilla for Copilot turrets. Difference between gunnerNotSpawned and dontCreateAI is unknown.\n\n// Parameter doesn't exist in engine"},{"heading":"gunnerOpticsColor[] = { 0, 0, 0, 1 }","level":5,"markdown":"Array"},{"heading":"gunnerOpticsEffect[] = {}","level":5,"markdown":"Array\nDefines the Effects used for the optical view when turned in. Effects correspond to classes defined in CfgOpticsEffect.\n\n**example** gunnerOpticsEffect[] = { \"TankGunnerOptics1\", \"OpticsCHAbera1\" };"},{"heading":"gunnerOpticsModel = \"\"","level":5,"markdown":"String\nThe optics model used when gunner is not turned out.\n\n```\nexample: gunnerOpticsModel = \"\\ca\\Tracked\\optika_tank_gunner\";\n```"},{"heading":"gunnerOutFireAlsoInInternalCamera = true","level":5,"markdown":"Boolean"},{"heading":"gunnerOutForceOptics = false","level":5,"markdown":"Boolean\nForces the gunner to use optics while turned out."},{"heading":"gunnerOutOpticsColor[] = { 0, 0, 0, 1 }","level":5,"markdown":"Array"},{"heading":"gunnerOutOpticsEffect[] = {}","level":5,"markdown":"Array"},{"heading":"gunnerOutOpticsModel = \"\"","level":5,"markdown":"String\n**Description:** The optics model used when gunner is turned out.\n\n```\ngunnerOutOpticsModel = \"\\ca\\Weapons\\optika_empty\";\n```"},{"heading":"gunnerOutOpticsShowCursor = false","level":5,"markdown":"Boolean"},{"heading":"gunnerType = \"\" (Arma 3 v1.00)","level":5,"markdown":"String\n**Description:** The soldier class that is the default crew for this turret. Overwrites the class defined in the `CfgVehicles`'s `crew = \"\";` token\n\n```\ngunnerType = \"O_Soldier_F\";\n```"},{"heading":"gunnerLeftHandAnimName = \"\"","level":5,"markdown":"String\n**Description:** Defines bone for IK animations for gunner left hand"},{"heading":"gunnerReversedGetOut = 1","level":5,"markdown":"Number\nWhen set to 1, it is the old default behaviour of when you exit a vehicle, you face the opposite direction than the getIn point, so usually away from the vehicle.\nWhen set to 0 you can turn it off, so you will face at the vehicle when you get out. Useful for static turrets, like the M2 Turret"},{"heading":"gunnerRightHandAnimName = \"\"","level":5,"markdown":"String\nDefines bone for IK animations for gunner right hand"},{"heading":"gunnerUsesPilotView = false","level":5,"markdown":"Boolean\nThe gunner will use the View LOD - Pilot if true."},{"heading":"H","level":4,"markdown":""},{"heading":"hasGunner = true","level":5,"markdown":"Boolean\nWhen false, AI and players can't enter the turret from the outside. Players can switch to the turret from inside the vehicle however (if there is an enterable position with the same Compartment)."},{"heading":"hideWeaponsGunner = true","level":5,"markdown":"Boolean\nIf true, the gunners weapons (his rifle) will not be displayed."},{"heading":"I","level":4,"markdown":""},{"heading":"InGunnerMayFire = true","level":5,"markdown":"Boolean\nIf true, the gunner will be able to fire the turrets weapons while inside the vehicle."},{"heading":"initElev = 0","level":5,"markdown":"Degrees\nThe initial elevation of the gun."},{"heading":"initTurn = 0","level":5,"markdown":"Degrees\nThe initial turn of the turret."},{"heading":"isCopilot = 0","level":5,"markdown":""},{"heading":"isPersonTurret = 2","level":5,"markdown":"Value 1 gives a working turret but only accessible from the inside while 2 enables a person to get into the turret from outside."},{"heading":"L","level":4,"markdown":""},{"heading":"lockWhenDriverOut = false","level":5,"markdown":"Boolean\nIf true, the turret can not be moved while the driver is turned out."},{"heading":"lockWhenVehicleSpeed = -1","level":5,"markdown":"Integer\nVehicle speed (in meter per second) at which point the turret will automatically return to a neutral pose (does not match up with \"initElev\" or \"initTurn\"). Value of -1 means it will never lock."},{"heading":"LODTurnedIn = -1","level":5,"markdown":"Integer\nDefines the LOD that is to be used when the Gunner is turned in.\nValue = -1 seems to default to the standard LOD (for Turret's that is Gunnerview).\nNote that LODTurnedIn = VIEW_GUNNER; or similar is not valid - unless you use a #define (see Arma 3 Samples to see how defines work).\n\nValue: -1 or 0 = Default LOD; 1 = first resolution LOD; 1000 = Gunnerview; 1100 = Pilotview; 1200 = Cargoview.\n\nThe View_Commander LOD is the default for turrets that have \"primaryObserver = 1;\" and \"primaryGunner = 0;\" in their config. The View_Commander LOD cannot be accessed manually in any other way."},{"heading":"LODTurnedOut = -1","level":5,"markdown":"Integer\nDefines the LOD that is to be used when the Gunner is turned out. The same rules as with LODTurnedIn apply."},{"heading":"LODOpticsIn = -1","level":5,"markdown":"Integer\nDefines the LOD that is to be used when the Gunner is turned in and in optics mode.\nValue = -1 or 0 default to the standard LOD (for Turret's that is Gunnerview).\nNote that LODTurnedIn = VIEW_GUNNER; or similar is not valid - unless you use a #define (see Arma 3 Samples to see how defines work).\n\nValue: -1 or 0 = Default LOD; 1 = first resolution LOD; 1000 = Gunnerview; 1100 = Pilotview; 1200 = Cargoview.\n\nThe View_Commander LOD is the default for turrets that have \"primaryObserver = 1;\" and \"primaryGunner = 0;\" in their config. The View_Commander LOD cannot be accessed manually in any other way."},{"heading":"LODOpticsOut = -1","level":5,"markdown":"Integer\nDefines the LOD that is to be used when the Gunner is turned out & optics in. The same rules as with LODOpticsIn apply."},{"heading":"M","level":4,"markdown":""},{"heading":"magazines[] = {}","level":5,"markdown":"Array\nAn array made of all magazines this turret is equipped with.\n\n```\nexample magazines[] = { \"BigGunMagazine\", \"SmallGunMagazine\" };\n```"},{"heading":"maxElev = 20","level":5,"markdown":"Degrees The maximum elevation of the gun."},{"heading":"maxHorizontalRotSpeed = 1.2","level":5,"markdown":"Float\nThe maximum horizontal speed of the turret.\n\nmaxHorizontalRotSpeed = \"((360/X)/45)\";\n\nX = time in seconds to turn 360°"},{"heading":"maxTurn = 360","level":5,"markdown":"Degrees The maximum turn of the turret, unit is deegres."},{"heading":"maxVerticalRotSpeed = 1.2","level":5,"markdown":"Float The maximum vertical speed of the turret, unit unknown. Bigger value - bigger rotation speed"},{"heading":"memoryPointsGetInGunner = \"\"","level":5,"markdown":"String The name of the get in-point selection for this turret, located in the Memory-LOD of the model.\n\n```\nexample: memoryPointsGetInGunner = \"pos gunner\";\n```"},{"heading":"memoryPointsGetInGunnerDir = \"\"","level":5,"markdown":"String\nThe name of the dir-point selection for this turret, located in the Memory-LOD of the model. It is used to make the gunner face a special direction while entering the vehicle.\n\n```\nmemoryPointsGetInGunnerDir = \"pos gunner dir\";\n```"},{"heading":"memoryPointGun = \"\"","level":5,"markdown":"String\nThe point in the model where the MG fire of this turret will come from.\n\n```\nmemoryPointGun = \"machineGun\";\n```"},{"heading":"memoryPointGunnerOptics = \"\"","level":5,"markdown":"String\nThe point in the model that defines gunner view point.\n\n```\nexample: memoryPointGunnerOptics = \"gunnerview\";\n```"},{"heading":"memoryPointGunnerOutOptics = \"\"","level":5,"markdown":"String"},{"heading":"minElev = -4","level":5,"markdown":"Degrees\nThe minimal elevation of the gun."},{"heading":"minTurn = -360","level":5,"markdown":"Degrees\nThe minimal turn of the turret, unit is degrees."},{"heading":"minCamElev = -90","level":5,"markdown":"Degrees\nThe minimal elevation of the camera, unit is degrees. Used together with elevationMode on artillery vehicles"},{"heading":"maxCamElev = 90","level":5,"markdown":"Degrees\nThe maximum elevation of the camera, unit is degrees. Used together with elevationMode on artillery vehicles"},{"heading":"missileBeg = \"spice rakety\"","level":5,"markdown":"String"},{"heading":"missileEnd = \"konec rakety\"","level":5,"markdown":"String"},{"heading":"O","level":4,"markdown":""},{"heading":"outGunnerMayFire = false","level":5,"markdown":"Boolean\nIf true, the gunner will be able to fire and move(!) the turret while turned out."},{"heading":"P","level":4,"markdown":""},{"heading":"primary= 1","level":5,"markdown":"Unknown: ??"},{"heading":"primaryGunner = true","level":5,"markdown":"Boolean\nTrue if this turret is used by the primary gunner, false else.\n\n> [!WARNING]\n> There can be only ONE primary gunner on a vehicle, else you might often get a CTD.\n> Using addMagazine will add to the primaryGunner weapons. See addMagazineTurret (Arma 3) for other turrets."},{"heading":"primaryObserver = false","level":5,"markdown":"Boolean\nTrue if this turret is used by the primary observer (e.g. tank commander), false else."},{"heading":"proxyType = \"CPGunner\"","level":5,"markdown":"String\nThe proxy type of the turrets gunner, this may be CPGunner or CPCommander. The proxies have to be named according to this setting, so either \"proxy:Gunner.XX\" or \"proxy:Commander.XX\"."},{"heading":"proxyIndex = 1","level":5,"markdown":"Integer\nThe proxy index of the turrets gunner. If your proxyType is \"CPGunner\" and proxyIndex = 1, the proxyname must be \"proxy:Gunner.01\", etc."},{"heading":"playerPosition = 1","level":5,"markdown":"Integer\nPlayer position, used for sound controller \"playerPos\" - see Arma 3: Sound: SoundControllers"},{"heading":"S","level":4,"markdown":""},{"heading":"selectionFireAnim = \"\"","level":5,"markdown":"String"},{"heading":"showgunneroptics","level":5,"markdown":"Boolean\n**Description:** ???\n\n```\nshowgunneroptics = true;\n```\n\n//Doesn't exist in engine"},{"heading":"showAsCargo = false","level":5,"markdown":"Boolean\nIf true, turret is considered as Cargoposition"},{"heading":"soundServo[] = {\"\",0.003162,1.0}","level":5,"markdown":"Array\nSound of the turrets servo, this is played whenever the turret is moving."},{"heading":"stabilizedInAxes = 3","level":5,"markdown":"Integer\n0 - No stabilisation\n1 - Gun elevation stabilised\n2 - Turret traverse stabilised\n3 - Both stabilised\n4 - View roll stabilised with the horizon (used in boats)\n\nUsing strings (like \"StabilizedInAxisX\") requires `#define`s in config:\n\n```cpp\n#define StabilizedInAxesNone    0\n#define StabilizedInAxisX        1\n#define StabilizedInAxisY        2\n#define StabilizedInAxesBoth    3\n#define StabilizedInRoll        4\n```"},{"heading":"startEngine = true","level":5,"markdown":"Boolean\nIf true, moving the turret will start the vehicles engine. The engine will stop automatically once the turret stops moving."},{"heading":"T","level":4,"markdown":""},{"heading":"turretAxis","level":5,"markdown":"String\n**Description:** Axis selectionname in MemoryLOD (for the turret axis, ie mouse left and right input).\n\n```\nturretAxis = \"OsaVeze\";\n```"},{"heading":"turretFollowFreeLook = 0","level":5,"markdown":"Float\nIf 1, turret is slaved to the gunners viewdirection in freelook. When values is set to 2, it is possible to control turret on weaponless turrets. Value 1 is used in Attack Helicopters for example."},{"heading":"U","level":4,"markdown":""},{"heading":"usePip = 0","level":5,"markdown":"Float\nGunner head movement will rotate the picture-in-picture (PIP) camera instead of the gunner's head within the vehicle.\nUsed for example in the Blackfish gunner turrets and the Hunter RCWS versions.\nSince 1.73.141940 it is possible to use `usePiP = 2`, which is going to make gunner following main turret movement - used i.e. for mortar gunner."},{"heading":"V","level":4,"markdown":""},{"heading":"viewGunnerInExternal = false","level":5,"markdown":"Boolean\nView gunner in external."},{"heading":"viewGunnerShadow = true","level":5,"markdown":"Boolean"},{"heading":"viewGunnerShadowDiff = 1.0","level":5,"markdown":"Float"},{"heading":"viewGunnerShadowAmb = 1.0","level":5,"markdown":"Float"},{"heading":"W","level":4,"markdown":""},{"heading":"weapons[] = {}","level":5,"markdown":"Array An array made of all weapons this turret is armed with.\n\n**example**: weapons[] = { \"BWMod_L55\", \"BWMod_MG3_veh\" };"}],"categories":["ArmA: Armed Assault: Addon Configuration","Arma 3: Vehicle Configuration"],"groups":["Configuration"]}