Damage Description – Arma 3
Line 81: | Line 81: | ||
=Armor (& RAM)= | =Armor (& RAM)= | ||
This section will is a work-in-progress and will be updated by Q1, 2015. In the meantime, here's some very general: | This section will is a work-in-progress and will be updated by Q1, 2015. In the meantime, here's some very general advice: | ||
Use the most detailed and accurate armor data you can when creating your vehicle's P3D Fire Geometry (armor). Correctly calibrated weapons are only going to give realistic results if your armor settings are good. | Use the most detailed and accurate armor data you can when creating your vehicle's P3D Fire Geometry (armor). Correctly calibrated weapons are only going to give realistic results if your armor settings are good. |
Revision as of 21:08, 5 January 2015
Intro
An ongoing investigation on how damage and armor actually works in Arma 3. (Currently this is based on Olds research during the creation of the Real Armor Mod.)
Penetration vs. Damage
It is important to understand that penetration and damage are not directly linked together. For example, if a tank has not hitpoints in it's Hit-points LOD and/or a valid Hitpoint Class in it's Config, it won't take any damage at all, no matter how often the Fire Geometry gets penetrated. The Fire Geometry shape and material only influence the bullet flightpath and it's speed (energy), nothing else.
The Hit-Points LOD of a model defines "sets" (named selections) of different points in the model. The Hitpoint class in the Objects Config uses this "set" to create spheres around every point in the specified "set" with a specific radius.
Calculation for Direct Damage occurs as soon as a projectile impacts on Fire Geometry within at least one of the spheres in a Hit-Points set. This is the first condition that has to be met in order to receive direct damage. Currently it is unknown if the impact has to occur on Fire Geometry of the same object, or if the conditions is also met if the impact is on another object (e.g. a Soldier in a vehicle's cargo area), but within one of the spheres of the Mainobject.
How exactly indirect damage is determined (e.g. if it just passes through Fire Geometry components, which the current effects indicate) i haven't found out yet
How much damage is done does not depend on what material the point, where the bullet impacted on, has in the Fire Geometry, nor how thick the Fire Geometry is on that point. --K.J. (talk) 19:00, 25 November 2014 (CET)
The Damage Process
Pre-impact
(Diagram 1) A projectile is headed for the target. (For our discussion let's assume its a kinetic round on track for a direct hit vs. an AFV)
Initial Impact
(Diagram 2) The projectile impacts the target. It has not penetrated any armor yet. And if it doesn't have the ballistics to go further it will terminate here doing only this initial damage. Regardless, the following things happen: Every major location on the target takes some damage. The location nearest the impact point gets the most, and it falls off geometrically. The target's global health is generally damaged the most. Several factors affect the amount of damage taken: obviously the hit value of the weapon is important, but various weapon & target config values are also involved (minimalHit, explosive, etc.). That's right, some damage has already been done regardless of whether it's pistol-round vs. tank or sabot vs. bunny. If the hit values are high enough, this initial impact alone can destroy the target (essentially by knocking out global health) ...regardless of penetration!
Penetrating Damage
(Diagram 3) If the projectile can penetrate the target's armor, it will continue moving and doing damage as it goes. Here's what happens: Every major location continues to take damage as in step 1. But something new happens as well... ...as the projectile travels past the armor it starts doing much more damage to the area immediately around itself. Global health continues to get damaged and can really get clobbered now. BTW, this happens even if every passThrough value is set to zero(!). The projectile will terminate here or travel on through the target if it has penetration power remaining to do so.
Keep in mind there are (sometimes significant) variations to how this works for things like explosive weapons, indirectHit, deflections, etc. More on those below. And, yes, this description holds true for human targets (shoot someone in the hand, and their head will take some damage).
Indirect(Hit) & "Explosive" Damage
IndirectHit
This works pretty much as advertised--indirectHit represents damage from explosions (not to be confused with the BIS "explosive" property). indirectHit damage is applied whenever a weapon with that config property hits something (you, the ground, etc.) It causes damage out to 4x it's indirectHitRange (which is a radius), falling off linearly. If a target is within range (our trusty tank in the above diagram), it takes the same all-location damage described in part A. (The location closest to the impact takes the most damage and so on...) And just as before, global health takes the most damage. ranged indirectHit damage bypasses your armor and damages you anyway. Only the explosionShielding property can mitigate this. <!> Oddly, armor will protect you against direct hits with indirectHit weapons (need to investigate this further...).
Explosive
Not the "explosion" effect you're thinking of--that's indirectHit. This weapon property does only one thing: it controls how much hit damage falls off with speed. Weapons with no or 0 explosive value are considered fully 'kinetic' and lose hit value as they slow below their typicalSpeed. Weapons with explosive=1 are considered fully 'explosive' and do full damage regardless of the projectile speed. Values between 0 and 1 control the ratio of kinetic-to-explosive damage (i.e. explosive = 0.5 means half the damage falls off with speed and half does not). <!> QUIRK! Values >=0.7 nullify a weapon's armor penetrating ability (as if caliber=0)!. Use values <0.7 if you want your weapon to have normal penetration behavior!
Penetration & Ballistics
Bullet/Shell
Bullet/Shell ballistics are very simple and quite accurate. The only properties that influence trajectory are initSpeed (CfgMagazines) and airFriction (CfgAmmo). Such projectiles travel based on their muzzle velocity (initSpeed) and aerodynamic drag (airFriction), along with gravity-induced vertical drop. Penetration is simply a factor of (remaining projectile speed at impact) and (CfgAmmo.caliber).
Projectile slowing through armor (or any other kind of fire geometry), appears to be handled purely by the projectile's speed & "caliber" and the fire geometry's bulletPenetrability(WithThickness). "airFriction" ceases to be a factor unless the projectile makes it's way through the target back out into open air. No other target material properties (Density, etc.) appear to factor in to the simulation.
Missile/Rocket
Missile/Rocket ballistics are more complex (let's call them M/R's for short). However, unlike Bullet/Shell penetration--which works quite well--M/R penetration is broken in the Arma 3 code. BI ignores penetration effects for these weapons and relies on exaggerated hit/indirectHit values to cause target damage. (RAM fixes this bug/limitation--and adds some new features along the way--with some scripting).
Unguided
These projectiles still use the same two properties as Bullet/Shells to determine their trajectories, but add some more (all in CfgAmmo): initTime, thrust, thrustTime, and maxSpeed. The four new properties account for the additional effect of a rocket motor: after "initTime", "thrust" is added to accelerate the projectile until it runs out ("thrustTime"), while "maxSpeed" puts a cap on the projectile's top speed. "sideAirFriction" & "maneuvrability" (from CfgAmmo) and mass (from the P3D model) get honorable mention here. But it's not clear that they add anything to the simulation of unguided M/R trajectories.
Guided
These projectiles work as unguided M/R's above, but with added properties to account for the fact that they manuever to track a target. "sideAirFriction" is used like airFriction to create drag, but in the lateral axes (as the missile turns to follow a target). "manuevrability" controls the rate of turning ability (mass may also play a role here--in that higher mass M/R's have a harder time turning due to momentum--but testing is required to confirm this). There are also a few simple properties that pertain to how tracking is achieved, but they are beyond the scope of this discussion.
Ballistics and Network Code
Unguided Bullets, Shells, and Rockets (simulation = "shotRocket") ballistics are calculated locally/on the client only. They do not cause undue network traffic in multiplayer. Guided missiles on the other hand (simulation = "maverickweapon") broadcast their trajectory over the network, generating much more data traffic in multiplayer every time one is in flight. Think of guided missiles as little airplanes, clogging up the network with traffic as they fly around.
Limits & Peculiarities of the Penetration Sim
Arma calculates the trajectory through a piece of fire geometry only for projectiles that make it all the way through. It does not actually calculate partial movement within fire geometry, however. If a projectile is stopped by a piece of fire geometry, the game treats it as if it stopped at the surface. (This is noticeable if you fire weapons while using a projectile tracing script).
Furthermore, if you fire a sufficiently high "caliber" bullet at a series of plates with setAccelTime set very low, you will notice a related curiosity. The bullet will slowly approach the plates and then appear to 'zip' through them in rapid succession, only slowing back down when travelling through air. This is also a consequence of the penetration code 'shortcut'. A bullet's travel time while inside a piece of fire geometry is not represented. As soon as the bullet impacts the geometry, the game calculates whether it has enough penetration to make it through. If it does, the bullet is instantly teleported to the other side of the geometry. (If it doesn't--as discussed above--it stops at the surface).
Armor (& RAM)
This section will is a work-in-progress and will be updated by Q1, 2015. In the meantime, here's some very general advice:
Use the most detailed and accurate armor data you can when creating your vehicle's P3D Fire Geometry (armor). Correctly calibrated weapons are only going to give realistic results if your armor settings are good.
The armor material should generally be armour.bisurf (where thickness is defined by your model geometry). Preset-thickness materials (armour_plate, etc.) respect LOS thickness, so those are fine too.
Regardless of what the real vehicle uses for armor (aluminum, composite, etc.) your best bet is to translate into RHA-equivalent (vs. kinetic) thickness.
Internal structure may be blocked in crudely per the T-72 sample model: with some hitpoint vertices inside fire geometry (e.g. the cast-iron modeled engine block).
Consequences & Implications
In vanilla A3, the effects of armor are largely ignored by the damage system. More accurately: armor penetration is present, but its significance is overwhelmed by the global hitpoint effect--this is especially true for high damage-value weapons. Caliber-based ballistics work very well, but caliber is bugged for rockets & missiles (it can't be added). Nor can the submunition feature be used as a workaround (it is also bugged for missiles if not other weapon types). A script-based approach must be used to enable those weapon types to penetrate armor correctly. RAM contains such an approach.
Adjusting Config Properties for RAM
(See the Config Properties Mega-List for an explanation of the properties themselves).
airFriction, caliber
RAM adjusts caliber & airFriction values based on real-world data whenever possible. This yields accurate penetration values and ballistic trajectory. It corrects the Missile/Rocket penetration bug by editing those weapon types to create regular (bullet/shell based) projectile submunitions on impact, restoring penetration ability. (Rocket & Missile improvement cannot be achieved by adjusting vanilla configs - this requires script adjustment).
explosive
RAM either caps explosive values at <0.7 to prevent the no-penetration bug, or creates a penetrating submunition (e.g. HEAT warheads).
hit
BI tends to greatly exaggerate hit values for large caliber weapons, while RAM generally reduces them values to prevent armor-overwhelming damage.
Vehicle Config Properties
Global:
armorStructural
RAM generally ramps up these values to more or less cancel out the effect of global damage. (BI seems to have taken up the idea, and is creeping up armorStructural values in more recent configs).
Hit Location:
explosionShielding
These values are usually much lower in RAM than vanilla A3 (i.e. more protection against indirectHit).
passThrough
These tend to be zeroed out in RAM.
radius
[#>0,m?] the radius (in m?) of the location's hitpoint vertices in the vehicle's P3D model. The idea here is to spread the vertices throughout the internal structure such that they do not spill out into or beyond the vehicle's armor plates. Unless you have control over the P3D source file, you probably don't want to mess with this value.
HitTrack
[location class] Keeping in mind that this location generally has no armor geometry protecting it and is thus easily damaged by the slightest hit, RAM generally increases the protective properties of explosionShielding and minimalHit to make tracks more resistant to minor weapons.
Useful Links
See if you can pick out the useful data from the obsolete!