ArmA 3 Forum, ArmA 3, ArmA 3 Config, ArmA 3 Missions, ArmA 3 3D Modeling, ArmA 3 Scripting, ArmA 3 Terrain, ArmA 3 Texturing, ArmA 3 Tools
101 - How to set up a weapon for ArmA 3
model.cfg
class magazine_hide { type = "hide"; source = "reloadMagazine"; selection = "magazine"; minValue = 0.000000; maxValue = 1.00000; hideValue = 0.220; unhideValue = 0.550; };
model.cfg
class magazine_reload_move_1 { type = "translation"; source = "reloadMagazine"; selection = "magazine"; axis = "magazine_axis"; minValue = 0.145; maxValue = 0.170; offset0 = 0.0; offset1 = 0.5; };
model.cfg
class BackSight_optic { type = "rotation"; source = "hasOptics"; selection = "BackSight"; axis = "BackSight_axis"; memory = 1; minValue = 0.0000000; maxValue = 1.0000000; angle0 = 0.000000; angle1 = (rad 90); };
model.cfg
class OP_ROT { type="rotation"; source="zeroing2"; // use second muzzle zeroing for rotation sourceAddress="loop"; // loop when phase out of bounds selection="OP"; // selection we want to rotate axis="OP_axis"; // has its own axis minValue=0; maxValue=3; // this weapon has array with 4 distances angle0="rad 0"; angle1="rad 65"; };
model.cfg
class MuzzleFlashROT { type="rotationX"; source="ammoRandom"; //use ammo count as phase for animation sourceAddress="loop"; //loop when phase out of bounds selection="zasleh"; //selection we want to rotate axis=""; //no own axis - center of rotation is computed from selection centerFirstVertex=true; //use first vertex of selection as center of rotation minValue=0; maxValue=4; //rotation angle will be 360/4 = 90 degrees angle0="rad 0"; angle1="rad 360"; };
class SlotInfo; class CowsSlot : SlotInfo { // targetProxy linkProxy = "\A3\data_f\proxies\weapon_slots\TOP"; // display name displayName = $STR_A3_CowsSlot0; // class names with items supported by weapon compatibleItems[[]] = {"optic_Arco","optic_aco", "optic_ACO_grn","optic_hamr","optic_Holosight"}; }; class PointerSlot : SlotInfo { // targetProxy linkProxy = "\A3\data_f\proxies\weapon_slots\SIDE"; // display name displayName = $STR_A3_PointerSlot0; // class names with items supported by weapon compatibleItems[[]] = {"acc_flashlight","acc_pointer_IR"}; }; class cfgWeapons { class myWeapon { class WeaponSlotsInfo { mass = 4; /// default mass of a weapon class MuzzleSlot : SlotInfo { // targetProxy linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE"; // display name displayName = "Muzzle Slot"; // class names with items supported by weapon compatibleItems[[]] = {}; // moved to each weapon }; class CowsSlot: CowsSlot {}; class PointerSlot: PointerSlot {}; allowedSlots[[]] = {901}; // you simply cannot put this into your pants }; }; };
class Mode_SemiAuto; class cfgWeapons { class ItemCore; class InventoryMuzzleItem_Base_F; class myMuzzleAccessory { scope = 2; displayName="My Muzzle Accessory"; picture="\A3\weapons_F\Data\UI\myMuzzleAccessory_CA.paa"; model = "\A3\weapons_f\acc\myMuzzleAccessory"; class ItemInfo: InventoryMuzzleItem_Base_F { soundTypeIndex = 1; // index of sound in sounds[[]] in weapon modes (inherited 1 from parent class) class MagazineCoef { initSpeed = 0.8; }; class AmmoCoef { hit=0.8; visibleFire=0.3; audibleFire=0.8; visibleFireTime=0.5; audibleFireTime=1.0; cost = 1.0; typicalSpeed= 0.8; airFriction = 1.0; }; muzzleEnd = "zaslehPoint"; // memory point in muzzle supressor's model alternativeFire = "Zasleh2"; // class in cfgWeapons with model of muzzle flash class MuzzleCoef { dispersionCoef = 1.0f; artilleryDispersionCoef = 1.0f; fireLightCoef = 0.1f; recoilCoef = 1.0f; recoilProneCoef = 1.0f; minRangeCoef = 1.0f; minRangeProbabCoef = 1.0f; midRangeCoef = 1.0f; midRangeProbabCoef = 1.0f; maxRangeCoef = 1.0f; maxRangeProbabCoef = 1.0f; }; }; }; };
class MyWeapon: Rifle_Base_F { class Single: Mode_SemiAuto { sounds[[]] = {StandardSound, SilencedSound}; class BaseSoundModeType /// I am too lazy to copy this twice into both standard and silenced sounds, that is why there is a base class from which both inherit (and sound of closure stays the same no matter what muzzle accessory is used) { weaponSoundEffect = "DefaultRifle"; closure1[[]]={"A3\sounds_f\weapons\closure\closure_rifle_2", db-12, 1,10}; closure2[[]]={"A3\sounds_f\weapons\closure\closure_rifle_3", db-12, 1,10}; soundClosure[[]]={closure1,0.5, closure2,0.5}; }; class StandardSound: BaseSoundModeType /// Sounds inside this class are used when soundTypeIndex = 0, according to sounds[[]] { begin1[[]]={"A3\Sounds_F\weapons\SMG_02\SMG_02_st_1b", db0, 1,500}; begin2[[]]={"A3\Sounds_F\weapons\SMG_02\SMG_02_st_2b", db0, 1,500}; begin3[[]]={"A3\Sounds_F\weapons\SMG_02\SMG_02_st_3b", db0, 1,500}; soundBegin[[]]={begin1,0.33, begin2,0.33, begin3,0.34}; }; class SilencedSound: BaseSoundModeType /// Sounds inside this class are used when soundTypeIndex = 1, according to sounds[[]] { begin1[[]]={"A3\sounds_f\weapons\silenced\silent-07", db-1, 1,200}; begin2[[]]={"A3\sounds_f\weapons\silenced\silent-08", db-1, 1,200}; soundBegin[[]]={begin1,0.5, begin2,0.5}; }; /// various other fire mode parameters }; };
class cfgWeapons { class ItemCore; class InventoryOpticsItem_Base_F; class myOpticsAccessory { scope = 2; displayName="My Optics Accessory"; picture="\A3\weapons_F\Data\UI\myOpticsAccessory_CA.paa"; model = "\A3\weapons_f\acc\myOpticsAccessory"; weaponInfoType = "RscOptics_myOptics"; class ItemInfo: InventoryOpticsItem_Base_F { mass = 7; modelOptics="\A3\Weapons_f\acc\reticle_MyOptics_F"; class OpticsModes { class MyOptics { opticsID = 1; useModelOptics = true; opticsPPEffects[[]]={"OpticsCHAbera1","OpticsBlur1"}; opticsZoomMin = 0.0555; opticsZoomMax = 0.1300; opticsZoomInit= 0.1300; discreteDistance[[]] = {100,300,400,500,600,700,800,900,1000}; discreteDistanceInitIndex = 1; distanceZoomMin = 100; distanceZoomMax = 1000; nFovLimit = 0.07; discretefov[[]] = {0.1300,0.0555}; discreteInitIndex = 0; modelOptics[[]] = {"\A3\Weapons_f\acc\reticle_MyOptics_F", "\A3\Weapons_f\acc\reticle_MyOptics_z_F"}; memoryPointCamera = "opticView"; visionMode[[]] = {"Normal","NVG"}; opticsFlare = true; opticsDisablePeripherialVision = true; cameraDir = ""; }; class IronOnTopOfMyOptics: MyOptics { opticsID = 2; useModelOptics = false; opticsFlare = false; opticsDisablePeripherialVision = false; opticsZoomMin=0.375; opticsZoomMax=1.1; opticsZoomInit=0.75; memoryPointCamera = "eye"; visionMode[[]] = {}; discretefov[[]] = {}; }; }; }; }; };
class cfgWeapons { class ItemCore; class InventoryFlashLightItem_Base_F; class mySidesAccessory { scope = 2; displayName="My Sides Accessory"; picture="\A3\weapons_F\Data\UI\mySidesAccessory_CA.paa"; model = "\A3\weapons_f\acc\mySidesAccessory"; class ItemInfo: InventoryFlashLightItem_Base_F { mass = 9; class Pointer { irLaserPos="laser pos"; irLaserEnd="laser dir"; }; class FlashLight{}; }; }; };
class CfgMovesBasic { class DefaultDie; class ManActions { reloadMyWeapon = "reloadMyWeapon"; }; }; class CfgGesturesMale { class Default; class States { class reloadMyWeapon: Default { file="\A3\anims_f\Data\Anim\Sdr\wop\erc\stp\rld\rfl\reloadMyWeapon.rtm"; looped=0; speed=0.400000; mask="handsWeapon"; headBobStrength=0.200000; headBobMode=2; rightHandIKBeg=1; rightHandIKEnd=1; leftHandIKCurve[[]]={0,1,0.050000,0,0.950000,0,1,1}; }; }; }; class cfgWeapons { class myWeapon { reloadAction = "reloadMyWeapon"; }; };
class Mode_SemiAuto; class cfgWeapons { class myWeapon { modes[[]] = {"Single"}; // this example weapon has just one fire mode canShootInWater = 1; // allows to shoot under water class Single: Mode_SemiAuto { begin1[[]]={"A3\sounds_f\weapons\myWeapon\myWeapon_st_1b.wav", db5, 1,900}; begin2[[]]={"A3\sounds_f\weapons\myWeapon\myWeapon_st_2b.wav", db5, 1,900}; begin3[[]]={"A3\sounds_f\weapons\myWeapon\myWeapon_st_3b.wav", db5, 1,900}; soundBegin[[]]={begin1,0.33, begin2,0.33, begin3,0.34}; // all three sounds have roughly the same probablity beginwater1[[]]={"A3\sounds_f\weapons\myWeapon\underwater_myWeapon_st_1b.wav", db0, 1,200}; beginwater2[[]]={"A3\sounds_f\weapons\myWeapon\underwater_myWeapon_st_2b.wav", db5, 1,200}; beginwater3[[]]={"A3\sounds_f\weapons\myWeapon\underwater_myWeapon_st_3b.wav", db5, 1,200}; soundBeginWater[[]]={beginwater1,0.33, beginwater2,0.33, beginwater3,0.34}; // all three sounds have roughly the same probablity }; }; };
class cfgAmmo { class BulletBase; class myAmmo: BulletBase // For myWeapon { waterFriction = -0.00096; // nearly direct line underwater timeToLive = 0.12; // that's enough for 45 meters underwater effectFly = "AmmoUnderwater"; }; };
submunitionConeType = {“random”, 10};
submunitionConeType = {"randomcenter", 10}; submunitionConeType = {"poissondisc", 10}; submunitionConeType = {"poissondisccenter", 10}; submunitionConeType = {"custom", {{0,0}, {-1,0}, {1,0}, {0,-1}, {0,1}} }; * parameter **triggerDistance** is used to deploy ammo in set 3D distance before expected target * parameter **triggerTime** is used to deploy ammo in set time after being fired * parameter **triggerSpeedCoef** is a coefficient of speed of inherited ammo relative to speed of parent ammo * for Artillery computer use array **aimAboveTarget** and **aimAboveDefault** as a index of the array to set different heights to change the ammo to something different (eg. flare)
class cfgAmmo { class SubmunitionBase; class MyAmmo: SubmunitionBase { submunitionAmmo = "MySubmunitionAmmo"; submunitionConeType[[]] = {"poissondisc", 10}; submunitionConeAngle = 10; triggerDistance = 100; }; };
class cfgAmmo { class ShotDeployBase; class Mo_ClassicMineRange: ShotDeployBase { submunitionAmmo = "APERSMine_Range_Ammo"; // some random mine deployable by a mortar airFriction = 0; // artillery ammo works better without friction EffectFly = "ArtilleryTrails"; // some funky effect of smoke trails and stuff }; };
class cfgVehicles { class myVehicle { class HitPoints { class HitLFWheel {armor=0.12; explosionShielding = 0.8;}; }; }; };
Inertia coefficient of the weapon is easily set by the “inertia” parameter, common values are 0.1 for a pistol, 0.5 for a rifle, 0.7 for machinegun and around 1.0 for a launcher
class cfgWeapons { class myWeapon { // inertia coefficient of the weapon inertia = 0.5; }; };