Arma 3
Not enough ratings
Arma 3 Damage explained / Damage guide / Damage Threshold / Passthrough
By Kinev
I will now unreavel the mystery that is the great Arma damage.

Only infantry. For vehicles it is just like shooting through a wall - passthrough.
3
   
Award
Favorite
Favorited
Unfavorite
What the heck?!
Guys I recently noticed (22.06.2024) that some damage does not get dealt as expected.
I am still trying to figure out why this is.

Example:
I cause still medium velocity wounds on people who should not get any.

Regarding balance issues, this guide should be close enough to rule out any randomness as long as you try to keep it the same on both sides. I try to figure it out... maybe. :(
What is simulated? (Realism)
In the Real world ballistics are a thing. Many things factor in from which I will not touch all.
In this part we will talk about some easy going unnecessary stuff. You can skip this if you are intrested how it actually works.

have fun.

In the real World we emphasise the impact energy mostly as Damage, because it tears through an object and brutally disrupts the sense of order which was there before. In particular Damage as such can only apply in our view to things we sense humanlike or -alike compositions of order. A car which is no longer functional because of malfunctioning machinery is damaged, a being which no longer can act on themselves properly due to wounds is damaged, a planet which is no longer in his defined state before a meteor hit it, is considered damaged etc.
This is an old and reliant concept, so the simulation seems to aim on that. What we regard as damage, would I call impact energy, to give it a physical equivalent.

Energy ( https://en.wikipedia.org/wiki/Energy ) is defined as an SI base unit with Joule [J]=[kg*m^2*s^-2], in particular it is about the kinetic energy ( https://en.wikipedia.org/wiki/Kinetic_energy ) E_kin=0,5*M*v^2 with M=[kg] and velocity v=[m*s^-1] which intrests us in regard of bullets, to emulate this with a projectile motion ( https://en.wikipedia.org/wiki/Projectile_motion ), which also takes the constant friction of the surrounding atmosphere into account - which itself depends on constant atmospheric properties - ( https://en.wikipedia.org/wiki/Projectile_motion#Trajectory_of_a_projectile_with_air_resistance ) which reduces the velocity or speed if you want to call it such. We conclusivly need these parameters:
  • Bullet mass in kg
  • initial speed of the bullet / muzzle velocity
  • constand air drag

In the simulation it is handled in a way, that the energy of the bullet is defined by the variable "hit", the inital speed / muzzle velocity "initSpeed" [m/s], which is reduced by air friction that is defined as a constant factor "airFriction". The speed then is compared to the value "typicalspeed", at which the bullet deals 100 % damage, which is simmilar to the 100 % exposure of the kinetic energy at the defined speed. So the "hit" value should be the mass of the bullet. Explosions just have flat hit values and also shrapnells if they are HEDP (high explosive dual purpose) or fragmentation grenades. HE (high explosives) are just a sphere in which it deals damage.

An explosion in the real world is basicly the rapid need for expansion of a chemical reagent, which splits into many many smaller parts very quickly and thus require more space. The faster and the smaller the parts the bigger the volume that is required.
That is why explosives contain a lot of oxygen and the atom bomb / hydrogen bomb base on nuclear degradation, those two produce lots of small pieces in very short time.

Simplified to how air drag works: You have molecules that must be pushed aside that are in the way and each push decelarates the bullet. A dense atmosphere means higher drag. So you can only calculate that if you know how much it decelarates your bullet in that atmosphere. That is complex and where things are complex people like to put in factors to make it less complex. Such is the properties of the atmosphere mashed into a factor. In the End you get a acelaration out which you simply multiply with the time and you got a velocity which has been influenced by said factor and thus the air friction.
That factor f = a / v^2 = [m*s^-2] / [m*s^-1]^2 = [m^-1] = [1/m] is a assumed fix value.

To conclude:
Damage is Energy.
Energy breaks down in Mass x velocity^2.
Velocity is reduced by air friction.
Thus Energy reduces due to air friction.
How does damage works in short? (this might be relevant for you)

We want to know how much energy hits the target and how much it starts with.

Energy is the "hit" value - which is kinda equivalent to the mass of the bullet.
The velocity is the same, the one it starts with is called "initSpeed".
But it decelerates. That is the air friction.

To determine how much it changes the speed is continuously tracked. That happens in certain time increments - namely the servers FPS (frames per second).
To have a value to compare "typicalspeed" comes into play. This value is to esimate how much the bullet has decelerated.

So the current speed - which is in fact the initSpeed but just influenced - is divided by the typicalspeed, the result is a percentage value that is applied on the "hit".
So the bullet has traveld with an initSpeed = 890, at target impact had 870 is compared to a typicalSpeed of 890 => 870/890 = 0,977 so the hit looses ~ 2 % power.

The complicated part is to calculate the friction.

f=a/v^2

as you see the friction f is aceleration a divided by velocity sqared. It is self referencing.
I will explain how to figure this out. In the next part.

Now we know how the "hit" behaves on distance and time.
If we know how much "health" our infantryman has, we can determine the damage it deals.
Usually every hitbox has a value of 1. Every armor adds to this value. For example a helmet with 6 to the head hitbox and a vest with 16 to the body hitbox.
Head is now 7 and body now 17. Easy, right?

So now we reach the final explanation: Damage is the percentage value from hit / hitbox health.
This is also called a "Damage Threshold" in KAT or ACE.

THAT is damage. It varies with the pairing of weapons and armor.
If you were shooting through an object - a Wall, Tank armor, a Gun held by an infantrymen - you have to deal with the so called "passThrough"
That value eats up a certain percentage of the damage and let's the rest - you guess it - pass. The amount which is getting pass is the value of this factor. Usually (IT DEPENDS ON THE ARMOR) infantry armor has 0.4 so 40 % passthrough. That means after the first guy got shot with 100 %, the second will take 40 % of the damage, the the third will take 16 %, the next 0,64 % etc... granted they are all in line.

So this is all. I will now try to explain in detail...
How does Arma calculate the velocity change? (This is the most complicated part)
We need to understand each parameter step by step.

For a sucessful calculation the parameters have to be expanded
  • Decelaration / Acceleration a [m*s^-2]
  • (Muzzle) velocity / initSpeed / typicalSpeed v_s [m*s^-1]
  • airFriction f [m^-1]
  • Starting velocity of an interval v_i1 [m*s^-1]
  • Ending velocity of an interval v_i2 [m*s^-1]
  • Duration of an interval t_i [s]
  • Accelleration of an interval a_i [m*s^-2]
  • frequency / time increments / FPS (frames per second) of the server f_ps [s^-1]

https://community.bistudio.com/wiki/Config_Properties_Megalist#airFriction
airFriction float How much the projectile slows down as it travels through the air. (A way of expressing aerodynamic drag). This and initSpeed define a projectile's trajectory in Arma (for unpowered ones like Bullets and Shells. Rockets and 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 / velocity^2 A projectile with a muzzle velocity of 1,640 m/s which slows down with 94 m/s2 has an airFriction of: -94 m/s2 / (1,640 m/s)2 ≈ -0.000035 1/m (This property appears to be equivalent to Bird-Livingston's "ballistic K factor" * 1e-7). ^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) For self-propelled rockets and missiles use this one: -0.002 * f = a / v2 (finding in BI forum) f - airFriction a - acceleration v - velocity

f = a/v^2
<=>
a=v^2*f
So equation for the decelation is this: a=v^2*f
The deceleration is ALWAYS negative, so we just need to apply it correctly.
That is because the friction f is always negative and the velocity is positive.

https://community.bistudio.com/wiki/Config_Properties_Megalist#typicalspeed
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").

Now it gets tricky to understand:
Arma compares "initalSpeed" (which is the first v_1) with the typicalSpeed.
Speed / typicalSpeed is always something below 1 in the long shot.
We get a smaller value which then gets multiplied with our "hit", which is the thing we need to tell how much damage we deal. It will always decrease.

The thing is we need to know the velocity. But the formular does not provide such.
a=v^2*f
f is a fix negative value (yes you theoretically make it positive and then the bullet becomes faster!)
v is the velocity it has in that fame - that moment.
a is the resulting acceleration! That is the current "beef" behinde the bullet, which is left.

We take a and multiply it with the time increment we are watching.
The smalles increment we could possibly watch is the framerate (FPS = frames per second) of the server. E. g. 30 FPS = 30 frames per second. 1 frame is a 0,033333333... of a second.
So 0,033333333... is our time! The duration of an interval t_i is determined.

If we apply t_i on a, we get a new velocity v.
This is v_2 our NEW velocity.

NOW we can calculate how the velocity changes. So we have a varying speed.



So here you see how this looks like:
start at the first interval with a velocity v_1 of 850 m/s ("initalSpeed")
The friction is set by the "airFriction" with -0,00108 1/m
The acceleration is a=v_1^2*f= (850 m/s)^2*(-0,00108 1/m) and results in a=-780,3 m/s^2
We just assume a framerate (FPS) of 30 and get an duration of an interval t_i=0,033333333... s
We take our t_i and apply it on out acceleration a t_i*a=0,033333333... s*(-780,3 m/s^2)=-26,01 m/s
This is the amount of which out v_1 is being reduced by.
If we apply that to our v_1 we get our new velocity v_2. v_2=v_1+t_i*a=850 m/s +0,033333333... s*(-780,3 m/s^2) = 850 m/s-26,01 m/s=823,99 m/s


Now we can calculate the remaining damage. The current speed is always calculated that way, so this is v_2 in that frame. The "typicalSpeed" is 854 m/s and the "hit" is 12,5528.

For the intervall No. 2
damageremain=v_2/typicalSpeed=799,55 m/s / 854 m/s = 93,62%
damagereduction is basicly 1- damageremain = 6,38%
So the actual damage in this frame would be:
damageremain * hit = 0,9362 * 12,5528 = 11,7524113837

We could also simply tell the time by counting the intervalls - which are identical with the frames - and sum up the time each frame has.
2 intervals each with t_i=0,033333333... s = 0,06666666... s passed time.


on this graph we see how much damage the weapon causes (- - - - line)
and how much time it takes for the bullet to pass that distance l_d in meters.
At what time the bullet reaches said distance in seconds ( _______ line)

This is all we need to understand how the "hit" changes over time.
Calling this damage is kinda right and kinda wrong at the same time.
But we got one step closer.
How does Arma apply Damage?
Vanilla Arma works like this:
https://www.youtube.com/watch?v=X7521ysymZY

That means if HEAD or TORSO get to 100 % damage you die.
If you hit the arms you cripple them and ruin their aim.
If you shoot the legs you cripple them and ruin their walk speed.
but they only die if they take 100 % damage on head or torso!

What is damage then?
Damage is hit / hitbox health.

How do I know what values a hitbox has?
1 at default plus any additional armor you equip.
Usually Helmets range from 5 - 10 with most at 6 -7.
low tier vests usually somwhere between 10 - 15.
Medium or high tier Vests between 16 - 21.
EOD vests around 60 or more.

so you take your hitbox plus the armor.
Helmet with 6 => 7 Hitbox health.
Vest with 16 => 17 Hitboc health.

Check this out for more info.
https://community.bistudio.com/wiki/Arma_3:_Soldier_Protection
How does MODDED Arma apply damage? (also known as damage threshold)
But I do not play vanilla Arma!

In KAT or ACE it is... complicated. As it is a mod and made of modders, the relevant ACE version atm (which is also relevant for KAT since it bases on ACE) https://github.com/acemod/ACE3/releases/tag/v3.17.1 https://github.com/KAT-Advanced-Medical/KAM/releases/tag/v2.14.2
ACE Version 3.17.1
KAT 2.14.2
17th of may 2024
I can tell it works as follows:

Same as in vanilla you have hit / hitbox health which then results in damage. That is now called damage threshold furtheron.

Do not try to understand this yet - I will explain - once you look at this again and undestand I did a good job.

Certain damage thresholds cause diffrent wounds or number of wounds.
I will explain how it works for BULLETS but there is also stuff in regard to other sources, which I will not cover here. Look at my medical guide for this - it should be up to date in that regard. If not let me know.

If you get hit, then a certain threshold is met.
First it will be determined if and how many wounds you get.
The more damage the more wounds.
Easy, right?
No not quite.

So as established damge is the same as damage threshold. Don't confuse them. it is stil hit / hitbox health.

ace_medical_damage.pbo
class damageTypes { // thresholds[] {{<damage>, <number of wounds>}, {...}} // if damage is between two points, number is interpolated and then rounded by chance based on the decimal part // e.g. a value of 2.7 has 70% chance to give 3 and 30% to give 2 // put damage values in descending order; uses the first value found that is below the wound damage, and the point immediately before that thresholds[] = {{0.1, 1}}; // if 1, wounds are only applied to the hitpoint that took the most damage. othewrise, wounds are applied to all damaged hitpoints selectionSpecific = 1; // list of damage handlers, which will be called in reverse order // each entry should be a SQF expression that returns a function // this can also be overridden for each damage type class woundHandlers { ADDON = QFUNC(woundsHandlerBase); }; class bullet { // bullets only create multiple wounds when the damage is very high thresholds[] = {{20, 10}, {4.5, 2}, {3, 1}, {0, 1}}; selectionSpecific = 1; class Avulsion { // at damage, weight. between points, weight is interpolated then wound is chosen by weighted random. // as with thresholds, but result is not rounded (decimal values used as-is) weighting[] = {{1, 1}, {0.35, 0}}; /* damageMultiplier = 1; sizeMultiplier = 1; bleedingMultiplier = 1; painMultiplier = 1; fractureMultiplier = 1; */ }; class Contusion { weighting[] = {{0.35, 0}, {0.35, 1}}; // bruises caused by bullets hitting the plate are big sizeMultiplier = 3.2; // tone down the pain a tiny bit to compensate painMultiplier = 0.8; }; class VelocityWound { // velocity wounds are only in the 0.35-1.5 range weighting[] = {{1.5, 0}, {1.5, 1}, {0.35, 1}, {0.35, 0}}; // velocity wounds will tend to be medium or large sizeMultiplier = 0.9; }; };

So to keep context. Pistols are around 8 regarding hit value, Assault rifles somwhere about 10- 12, big caliber snipers and Rockets are about 30 - 60 or even more.
There will be Wounds rolled, then the total damage is being split between the amount of wounds. That means each wound gets their own damage threshold value. According to this value

The chance for a wound is like this:
Threshold 0,56 range 0-3 = 100 % one wound. The damage determines the kind of wound, up to 0,35 damage is harmless
Threshold 3,4 range 3-4,5 = 0,4 / 1,5 = 1 + 26,7 % chance to create a wound
0,0 - 3,0 create 1 wound [create 1 wound]
3,0 - 4,5 create 1 Wounds + Chance x 1,0 [create 1+1 wound by chance if damage is in between 3 - 4,5]
4,5 - 20 create 2 Wounds + Chance x 8,0 [create 2+ 8 wound by chance if damage is in between 4,5 - 20]
20 + create 10 wounds

Okay this is just a wound. But each wound will be assigned a own damage value / damage threshold. It get's split up.
That way you get wounds with certain thresholds. Those can be dangerous or harmless.
Contrusions / Bruises are at 0.35 ranges are harmless
everything above can be deadly.

So if you get damage about 0.3511111 you MAY get a serious injury.

The higher the threshold the bigger the wound the more deadly it gets. Check out my medical guide if you want to understand more here.

between 0 - 3.0 you definitly will get a wound. They might not be severe because of a low Damage / Damage Threshold.

But yea that is basicly how it goes.
How do I get the data for the calculations?
Eden editior. I don't know another way as of yet - maybe there will be a smart coder programming something, if so let me know I would gladly help.

for now you may also contact me I could provide tables to calculate with, like the ones I showed in the guide.



So how to get the ♥♥♥♥?

Best way you do all your stuff or open up the mission in Eden editor (if you don't know how to: I may create a guide to it if required.) and select a troop you want to learn more about.
Select play as character and press ESC once in the game.
press config.
it will trow you to this.
The important thing is you could just manually scroll through all weapons, ammos etc. manually. That way you don't have to.
select /CfgWeapons/srifle_05 ....

You will ALWAYS have the weapon equipped there at hand, with the loaded magazine and the bullets within the magazine. if you switch weapons you can also just do the same without reloading the whole mission. So spawn the crate with the stuff you want to check next to yourself.

After a short loading screen you see this:
You can press CTRL+C to copy the coded name of the rifle (not the name ingame, that is displayname) you may need that for future reference.
srifle_DMR_05_KHS_LP_F
Just take the necessary things here: like the name of the rifle and so on...
just click on the right window and type the first letters of the line you want to check or press d to find "displayname"

displayName = "Cyrus (Black)";

That is the name of the rifle in game.

I could also rent about recoil but that is for another guide, that is something you can grab from the gun beside the name.

next click on the CfgMagazines, and search for the name of it in code, the ingame name and the initSpeed. Because the magazine defines how fast the bullet exits the barrel (don't ask me why).

10Rnd_93x64_DMR_05_Mag
displayName = "9.3 mm 10Rnd Mag";
initSpeed = 780;

Next select the bullet via CfgAmmo
Here you get the rest which is necessary

B_93x64_Ball
airFriction = -0.000808;
hit = 18;
typicalSpeed = 785;

That is the weapons part!
Now you would get the armor of the enemy you want to shoot!
Keep in mind the FACE has NO protection.

now you got to search manually - for knowing what to look for you need to go back in the eden editor and open the armory on that soldier.
right click and edit loadout.
Once in the editor you get the name you can look for in the mousover - take a screenshot of the uniform, the helmet and the vest. Most cases you would not need to check the uniform, because they likely have no protective value.
You can also open the config viewer by the tools section.
Now let's search for those armor pieces

open the CfgWeapons tab, find the name by scrolling and duble click it once found. Then duble click ItemInfo - that sometimes throws you off and you need to scroll for it again - then click HitpointsProtectionInfo. Then you can simply left click one time on the body parts you want info about. That goes for Vests and helmets. Simply read out their numbers and apply them.
Diaphragm Torso or whatever are all the same. Helmet has only one value.

(I grabbed the V_PlateCarrier2_rgr_noflag_F because the original CSAT vest has no armor value - just to show how it looks like)


Regarding the CSAT Uniforms - it's more difficult.

https://www.reddit.com/r/arma/comments/32snqu/arma_3_equipment_spreadsheet_updated/
richardguy Hey, what is the armor and pass through values for the CSAT fatigues? Issen_ Well the fatigues themselves don't have those values, but the soldier classes that your character gets switched into do. I can try to get those values and add them to an extra tab. Check in tomorrow, and I'll have a list done. Edit: Done, basically all CSAT units - which you become by using the uniform - have 0.5 passthrough on body, hands and legs, compared to 1 for NATO and AAF uniforms. _wolfenswan The uniform you're wearing overrides your unit's "intrinsic" armor/passthrough values. So a NATO soldier with a CSAT uniform has got that passthrough/armor and vice versa.

So you need to check the classes. Right click any guy ou want to inspect and "find in Config viewer"
Next you need to duble click the class it selected. you will also see it below on the right screen " Path: configfile >> "CfgVehicles" >> "O_Sharpshooter_F" " Then open "HitPoints" and click though the various areas. Everything that is off the unusal 1 or 3 - which is 3 for the limbs and 1 for everything else - might be not relevant if over 9000 or increased due to the uniform the unit has.

https://forums.bohemia.net/forums/topic/222747-uniform-armor-vs-vest-armor-hopefully-quick/
OK, I think I may have just figured out the rest. From the top... Soldier type "O_Soldier_F" wears uniform "U_O_CombatUniform_ocamo". This uniform has "ItemInfo" >> "uniformClass" equal to "O_Soldier_F". So "U_O_CombatUniform_ocamo" uniform gets armor values from the HitPoints entry for "O_Soldier_F", which in this case are elevated (mostly 6 with neck being 4, etc). In contrast, soldier type "B_Soldier_F" wears uniform "U_B_CombatUniform_mcam". This uniform has "ItemInfo" >> "uniformClass" equal to "B_Soldier_F". So "U_O_CombatUniform_ocamo" uniform gets armor values from the HitPoints entry for "B_Soldier_F", which in this case are lower (mostly 1 with arms and hand being 3, etc). This guy gets his armor more from his vest, etc. Most of that makes sense, except for one bizarre conclusion. It seems that "O_Soldier_F", in addition to having a more resilient uniform, would also have a more resilient body. Not quite sure how that squares up!

https://community.bistudio.com/wiki/Arma_3:_Characters_And_Gear_Encoding_Guide#Character_Configuration
Type Config Hierarchy Civilian Land > Man > CAManBase > Civilian > Civilian_F > C_man_1 BLUFOR soldier Land > Man > CAManBase > SoldierWB > B_Soldier_base_F OPFOR soldier Land > Man > CAManBase > SoldierEB > O_Soldier_base_F AAF soldier Land > Man > CAManBase > SoldierGB > I_Soldier_base_F FIA soldier Land > Man > CAManBase > SoldierGB > I_G_Soldier_base_F

I found this aswell CSAT has about 6 to their arms and Chest while all others seem to have 3 to legs and arms but 1 to everything else. Face and head are also unprotected. CSAT has a Neck protection of 4 and all others are on 1.
Thank you
I hope this helps you to understand a whole bunch.

This is the fruit of extensive research and testing. I hope you will not suffer as much as I did on my way to understand this game. :)

Please leave a comment and constructive critizisim if you want!

Have a good time. ^-^
6 Comments
RickOShay Apr 13 @ 4:28am 
Pretty thorough discussion good work. This article also helps wrt fire geom and hp calculation for vehicles: https://community.bistudio.com/wiki/Arma_3:_Damage_Description
Reticuli Dec 26, 2024 @ 11:35am 
For that matter, ACE ballistics also models transonic threshold instability as the bullets slows down, but I assume that's more about trajectory and drag effects. A tumbling flag could be added for each bullet in flight, which could have a probability determined by BC inverse, spin, and mass, such that if at that probability you roll a Tumble_Flag = 1, the bullet loses all armor penetration ability. They could even add the dreaded buzzing bee sound.

Heck, any bullet that hits soft tissue also has a certain probability of tumbling. Maybe the same types of tumbling flag probability calculation and execution could be used to provide a chance of a bullet tumbling upon impact with the body, such that there's a chance the long length gets used instead of the bullet width for the energy transfer and therefore damage inflicted.
Reticuli Dec 26, 2024 @ 11:35am 
In real life at a given bullet kinetic energy, wider diameter bullets transfer more of their energy into soft targets, while narrower bullets have an easier time penetrating armor but transfer less energy into soft targets even if you don't take into account their loss of energy passing through armor first. I don't see any reason why the ballistic coefficient (BC) that's a rough approximation partially of pointiness (not to mention the rear end) and bullet spin that's used in ACE ballistics for the Magnus Effect couldn't also be used to determine armor penetration.
Inferno | M.D.F Dec 19, 2024 @ 7:22am 
so does this guide imply that csat take 50% less damage?
Kinev  [author] May 27, 2024 @ 5:08am 
thank you. :)
Володимир Кокаїн May 22, 2024 @ 1:24am 
Damn, nice job