Jump to content
Sign in to follow this  
The_Captain

Scripted Armor/Ammo Penetration System

Recommended Posts

Hi,

I've been working on a scripted armor/ammo penetration system for an old Arma1 multiplayer map for a while, and I'd like to release it soon as a standalone addon for testing. My goal was to allow a level of fidelity in tank combat similar to Red Orchestra. (Not simulation level, but much less 'arcade' than bis' hitpoints style simulation). My main frustration was that abrams tanks were quickly disabled from front turret armor hits, making them useless even in a hull down defense. While there are good addon based solutions to this problem, I wanted an entirely script based one to integrate into a multiplayer mission without requiring addons.

The code mostly grew out of a "what-if" hack about a year ago, where I tried using spooner's LOS code to see if I could detect an intersect between a flying tank shell and any nearby tanks. It's not a perfect solution, but it's good enough for most engagements and weapon types.

Currently, the code tracks flying tank shells, rockets, and missiles, and uses cubic bounding boxes (determined from o2 coordinates) around tank sections to determine if a shell is about to impact. Since it is the angle of the round that is used for the penetration calculation, and not a heuristic such as direction to the firer, the impact calculations can be made relatively precise. For an impact, the code gets the angle between the surface of each bounding box hit, the entry and exit points of the intersection, the damage of the shell (which is close enough to RHA penetration for my purposes), and the armor strength of that surface. A penetration of one surface will allow the projectile to test for penetration into the next intersected section (eg, your RPG might penetrate the tracks, but lack the power to penetrate the hull.). Non penetrating rounds don't do damage, while ones that do penetrate cause damage relative to the distance traveled through the section (eg, nicking a t72's treads does not blow up the t72), and have a similarly scaled chance of causing critical events (crew damage if the crew compartment is hit, ammo explosion if the ammo compartment is hit, etc). RHA damage of projectiles is scaled along a bell curve to allow variation in damages, and also depends on speed of projectile for kinetic projectiles (indirecthit=0). Kinetic projectiles have a chance to 'overpenetrate' vehicles and emerge from the other side, or deflect on a failed penetration. All damage, armor, and section armor values are taken from the BIS configs, as they roughly correspond to real life RHA and penetration values.

Example: A T72 sabot (~630 damage scaled downwards based on current vs. initial speed) hits an m1's front hull armor (85% of total armor, scaled to 100% for the front of a section, equaling roughly 725), at an angle of 10 degrees off perpendicular (scaling the 725 to 725/cos(10 degrees), which is roughly 770. The sabot round's penetration is scaled to a bell curve distribution, where about two thirds of the penetration values will lie between 700 and 560, with a small chance of higher and lower values. This gives the T72 a roughly 2% chance of a penetration higher than or equal to 770. The variation helps to account for differences in the armor strength along an armor plane, which simple bounding boxes for armor with a uniform strength can't simulate. If the t72 had hit at 0 degrees, the armor strength would stay at 725, and he would have roughly a 10% chance to penetrate the front hull. The side tracks are 15% of the total armor points, and scaled by 50% for 'side' hits, meaning from a perpendicular direction the tracks equate to about 63 RHA. After a round penetrates the tracks, the hull has .85*.5*850= ~350 RHA from the side, meaning that even an RPG can penetrate the side armor of an abrams and cause some internal damage (but not nearly as much as a tank round, as the tracks should have a mitigating effect).

Limitations: Performance wise, the code relies on quick iterations to grab nearby potential targets and perform intersect calculations, and thus even a beefy machine can experience slowdown with a dozen or more tanks firing at the same instant. Because FFAR's and autocannon rounds have a high rof, the script does not track them.

The code also relies on manually configured bounding boxes (min and max coordinates for turret, gun, hull, tracks, etc) to catch intersects, making it a pain to integrate 3rd party addons (and even new vehicles).

The calculations for damage armor penetration are reasonably 'back of the envelope' and not perfectly scientifically accurate.

Currently, armor has the same strength vs. kinetic or explosive rounds, though this will be modified in the future.

I haven't tried to integrate with mando yet (I use a simple scripted system based on GDT missiles to allow precise SACLOS control), but I have a feeling both sets of code would interfere without specific integration.

Cubic bounding boxes are imprecise, and allow for a few weird situations since they do not match the actual armor slope.

The code is not foolproof: if a tank shell makes it through the code suite, it will cause normal BIS damage to a target. For example, a ricochet off the ground right in front of a tank sometimes causes the shell to ricochet into the target before the impending penetration is detected.

Currently I only have a version for arma1, as the code is performance dependent. I plan to convert the time sensitive scripts to fsm for A2, though I haven't tried this yet.

I should be able to release some code soon (I'm currently busy with exams).

Sources:

http://en.wikipedia.org/wiki/Sloped_armour

http://www.steelbeasts.com/sbwiki/index.php/M1A1_(HA)

http://www.steelbeasts.com/sbwiki/index.php/Image:M1A1_HA_frontLOS.jpg

http://www.steelbeasts.com/sbwiki/index.php/Image:M1A1_HA_sideLOS.jpg

http://www.steelbeasts.com/sbwiki/index.php/T-72M1

http://www.steelbeasts.com/sbwiki/index.php/Image:T72frontLOS.jpg

http://www.steelbeasts.com/sbwiki/index.php/Ammunition_Data

http://www.fprado.com/armorsite/US-Field-Manuals/abrams-oif.pdf

Edited by The_Captain

Share this post


Link to post
Share on other sites

Amazing script :butbut: :butbut: :butbut:

But is there not too many calculation for running this piece of script ??

It's really an interesting thing but if the calculation was too high finaly, this solution will become the worst for armor simulation. :(

Share this post


Link to post
Share on other sites

I like the goal, it sounds like you have the know-how and I love scripted solutions that can be delivered within a mission but I'm a bit concerned about the performance implications you've mentioned. I have to ask, you do know there's a HandleDamage event handler in ArmA 2 now? Why not hook that and work out the angle between target and source after the fact?

Share this post


Link to post
Share on other sites

Commendable idea.

But one thing to consider is how to manage scripted explosions or nearby bursts. Artillery raining down or satchels detonating nearby should also be handled.

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×