Jump to content
Sign in to follow this  
Nice_Boat

Nice_Boat Tank Damage System

Recommended Posts

Yes, certainly that is possible, suggest we move this to PM.

Share this post


Link to post
Share on other sites

I cannot get this script to function properly.

The original intent was to have inferior ammunition to have damage amounts slighly less than armour amounts of foes. The you use the Random # to make it so you still have the possibility to get a kill shot with your less powered ammo.

Problem is as soon as you give a random number thats even 1 penetration point higher combined with ammo damage value than your foes armour value, it results in penetration 100% of the time.

Which makes absolutely no sense....

I'll keep experimenting.

Edited by TristanYockell

Share this post


Link to post
Share on other sites

I really like the concept of this script. It would be a pity that the subject had disappeared in the depths of oblivion, and from conversations with Nice_Boat I concluded, that he probably not planning to return to the subject. So I took the opportunity to finally learn the syntax (somehow easier for me to figure out in the SQS than SQF) and introduced numerous improvements according to my tastes and needs, such as matter of crew injuries, cases of non-lethal penetration, the way to a better representation of hits in the top armor, more complex model of damage support for more vehicles and weapons from selected addons or greater participation of random factor. My version is surely far from perfect, but it works. But I have some problem. Internet data about penetration and the thickness of the armor if they are not classified, that sometimes tend to be divergent. The values ​​vary depending on the source of up to several tens of percent. For example, reported for the Javelin ATGM ability to penetrate varies between 600 to 900 RHA ... In many cases I was forced to settle on values ​​taken from the game SP: MBT ... Does anyone know an online source of such information for any reason worthy of greater trust from the other?

Edited by Foxhound
Do not type in all bold font

Share this post


Link to post
Share on other sites

Try this thread from BFC:

http://www.battlefront.com/community/showthread.php?t=90432

These guys seem to have a clue and a lot of inside info. You can probably filter through tanknet, but it will take you forever.

Also, look at the free game SPMBT at shrapnelgames.com. It uses simple armor angles, but has excellent data for relative armor and penetration.

Share this post


Link to post
Share on other sites

Glad to see it is still alive, at least. If there is anything you need to test, just ask the community Rydygier.

Share this post


Link to post
Share on other sites

PvPscene, with heavy addons, like ACE, I have a problem, which is called "3 GB per month transfer limit." Extras weigh 1 GB. So it is, as you live to middle of nowhere.

Kremator, in fact, I would grateful if someone will test it, point out mistakes and imperfections, etc. So I prepared a simple presentation with my version of this Nice_Boat's script (contains some debug):

TDS_test.utes

Below main "NBtank.sqs" script code itself, main question concerns RHA equivalent both for armor thickness values and projectiles penetration ability:

_worktime = _time
_target = _this select 0
_selection = _this select 1
_damage = _this select 2
_attacker = _this select 3
_ammo = _this select 4

_comm = commander _target
_drvr = driver _target
_gunn = gunner _target

_commH = damage _comm
_drvrH = damage _drvr
_gunnH = damage _gunn

;Script defines a unique global variables needed for storing damage of weapons, turret and traction.

~0.01
_varcomp = str (_target)

? (_target getvariable ("GCheck" + _varcomp) == 1) : goto "skipvar"
_target setvariable [("TRL" + _varcomp),0,true]
_target setvariable [("TRP" + _varcomp),0,true]
_target setvariable [("TUR" + _varcomp),0,true]
_target setvariable [("GUN" + _varcomp),0,true]

_target setvariable [("WL11" + _varcomp),0,true]
_target setvariable [("WL12" + _varcomp),0,true]
_target setvariable [("WL13" + _varcomp),0,true]
_target setvariable [("WL14" + _varcomp),0,true]

_target setvariable [("WL21" + _varcomp),0,true]
_target setvariable [("WL22" + _varcomp),0,true]
_target setvariable [("WL23" + _varcomp),0,true]
_target setvariable [("WL24" + _varcomp),0,true]

_target setvariable [("GCheck" + _varcomp),1,true]
#skipvar
_top = 0
_DT = damage _target

;Trying to persuade to target, to set the front to the attacker. Hmm.

_target doTarget _attacker
_target doWatch _attacker

_weapon = currentWeapon _attacker;

;traction damage check

? _damage > 0.7 and _selection == "PAS_P" and NBRand100 > 70 : _target setHit ["PAS_P", 1];_target setvariable [("TRP" + _varcomp),1,true]
? _damage > 0.7 and _selection == "PAS_L" and NBRand100B > 70 : _target setHit ["PAS_L", 1];_target setvariable [("TRL" + _varcomp),1,true]
? _damage > 0.4 and _selection == "wheel_1_1_steering" and NBRand100 > 60 : _target setHit ["wheel_1_1_steering", 1];_target setvariable [("WL11" + _varcomp),1,true]
? _damage > 0.4 and _selection == "wheel_1_2_steering" and NBRand100 > 60 : _target setHit ["wheel_1_2_steering", 1];_target setvariable [("WL12" + _varcomp),1,true]
? _damage > 0.4 and _selection == "wheel_1_3_steering" and NBRand100 > 60 : _target setHit ["wheel_1_3_steering", 1];_target setvariable [("WL13" + _varcomp),1,true]
? _damage > 0.4 and _selection == "wheel_1_4_steering" and NBRand100 > 60 : _target setHit ["wheel_1_4_steering", 1];_target setvariable [("WL14" + _varcomp),1,true]
? _damage > 0.4 and _selection == "wheel_2_1_steering" and NBRand100 > 60 : _target setHit ["wheel_2_1_steering", 1];_target setvariable [("WL21" + _varcomp),1,true]
? _damage > 0.4 and _selection == "wheel_2_2_steering" and NBRand100 > 60 : _target setHit ["wheel_2_2_steering", 1];_target setvariable [("WL22" + _varcomp),1,true]
? _damage > 0.4 and _selection == "wheel_2_3_steering" and NBRand100 > 60 : _target setHit ["wheel_2_3_steering", 1];_target setvariable [("WL23" + _varcomp),1,true]
? _damage > 0.4 and _selection == "wheel_2_4_steering" and NBRand100 > 60 : _target setHit ["wheel_2_4_steering", 1];_target setvariable [("WL24" + _varcomp),1,true]

; setting variables needed to determination of the vertical hit angle, and the targets "skew" angle to check if top armor was hit.

_highadv = ((getposASL _attacker) select 2) - ((getposASL _target) select 2);
? (damage _target >= 1) : _highadv = 1;
_distF = [(position _attacker) select 0,(position _attacker) select 1,(getposASL _target) select 2] distance (getposASL _target)
_Tpitch = ((vectordir _target) select 2)
_Tbank = vectorUP  _target
_DHatan = _highadv atan2 _distF
? (_DHatan == -1) : _DHatan = 0
_TcheckA = 9/(1+ _DHatan)
_dX = ((getPos _attacker) select 0) - ((getPos _target) select 0)
_dY = ((getPos _attacker) select 1) - ((getPos _target) select 1)
? (_dX == 0) : _dX = 1
? (_dY == 0) : _dY = 1
? (_highadv == 0) : _highadv = 1
_EWroll = _Tbank select 0
_NSroll = _Tbank select 1

? ((abs _dX) > (abs _dY)) and (_dX > 0): _TcheckL = -_EWroll;goto "skip1"
? ((abs _dX) <= (abs _dY)) and (_dY > 0): _TcheckL = -_NSroll;goto "skip1"
? ((abs _dX) > (abs _dY)) and (_dX <= 0): _TcheckL = _EWroll; goto "skip1"
? ((abs _dX) <= (abs _dY)) and (_dY <= 0): _TcheckL = _NSroll

;Javelin case and elimination types of ammo, for which script should not do further calculations.

#Skip1
? _ammo isKindOf "M_Javelin_AT" : _top = 1
? _ammo isKindOf "B_30mmA10_AP" or _ammo isKindOf "B_20mm_AP" or _ammo isKindOf "B_20mm_AA" or _ammo isKindOf "B_23mm_AA" or _ammo isKindOf "B_23mm_HE" or _ammo isKindOf "B_23mm_AP" or _ammo isKindOf "B_23mm_APHE" or _ammo isKindOf "B_25mm_HE" or _ammo isKindOf "B_25mm_HEI" or _ammo isKindOf "B_25mm_APDS" or _ammo isKindOf "B_30mm_AP" or _ammo isKindOf "B_30mm_HE" or _ammo isKindOf "B_30mm_AA" or _ammo isKindOf "G_40mm_HE" : goto "checkSide"
? _ammo isKindOf "BulletCore" and !(_ammo isKindOf "VIL_B_30mm_ros") and !(_ammo isKindOf "ibr_aden30_gunpods"): goto "exit"

;determination of horizontal hit angle

#checkSide

_ang = _dX atan2 _dY
_dif = (_ang - getDir _target)

? (_dif < 0) : _dif = 360 + _dif
? (_dif > 180) : _dif = _dif - 360;
_difA = abs _dif

;below are lists of variables for attacker and target possible used weapon and armor. _surviv needed for no-lethal penetrations

? _target isKindOf "ibr_T55" : _armorCE = 215; _armorKE = 215; _surviv = 17; goto "checkAmmo"
? _target isKindOf "M1A2_TUSK_MG" : _armorCE = 1205; _armorKE = 780; _surviv = 30; goto "checkAmmo"
? _target isKindOf "M1A1" : _armorCE = 850; _armorKE = 465; _surviv = 26; goto "checkAmmo"
? _target isKindOf "ZSU_Base" : _armorCE = 20; _armorKE = 20; _surviv = 10; goto "checkAmmo"
? _target isKindOf "2S6M_Tunguska" : _armorCE = 25; _armorKE = 25; _surviv = 10; goto "checkAmmo"
? _target isKindOf "T34" : _armorCE = 95; _armorKE = 95; _surviv = 16; goto "checkAmmo"
? _target isKindOf "T72_Base" : _armorCE = 420; _armorKE = 345; _surviv = 20; goto "checkAmmo"
? _target isKindOf "T90" : _armorCE = 1100; _armorKE = 700; _surviv = 24; goto "checkAmmo"
? _target isKindOf "AAV" : _armorCE = 60; _armorKE = 50; _surviv = 12; goto "checkAmmo"
? _target isKindOf "BMP2_Base" : _armorCE = 40; _armorKE = 40; _surviv = 12; goto "checkAmmo"
? _target isKindOf "BMP3" : _armorCE = 170; _armorKE = 120; _surviv = 13; goto "checkAmmo"
? _target isKindOf "BRDM2_Base" or _target isKindOf "BRDM2_ATGM_base" or _target isKindOf "VIL_brdm_m96d": _armorCE = 25; _armorKE = 25; _surviv = 11; goto "checkAmmo"
? _target isKindOf "BTR90_Base" : _armorCE = 120; _armorKE = 70; _surviv = 12; goto "checkAmmo"
? _target isKindOf "LAV25_Base" : _armorCE = 40; _armorKE = 40; _surviv = 11; goto "checkAmmo"
? _target isKindOf "VIL_LEO2A4" : _armorCE = 905; _armorKE = 620; _surviv = 26; goto "checkAmmo"
? _target isKindOf "VIL_new_PT91" : _armorCE = 915; _armorKE = 625; _surviv = 24; goto "checkAmmo"
? _target isKindOf "VIL_t72M1_wp" : _armorCE = 515; _armorKE = 415; _surviv = 20; goto "checkAmmo"
? _target isKindOf "VIL_rosomak" : _armorCE = 150; _armorKE = 70; _surviv = 12; goto "checkAmmo"
? _target isKindOf "VIL_OSA_PLOT" : _armorCE = 35; _armorKE = 35; _surviv = 10; goto "checkAmmo"
? _target isKindOf "VIL_DANA" : _armorCE = 35; _armorKE = 35; _surviv = 8; goto "checkAmmo"
? _target isKindOf "VIL_2s1_PL" : _armorCE = 30; _armorKE = 30; _surviv = 8; goto "checkAmmo"
? _target isKindOf "VIL_bmp1_wp" : _armorCE = 35; _armorKE = 35; _surviv = 10; goto "checkAmmo"
? _target isKindOf "VIL_bwp2000_wp" : _armorCE = 55; _armorKE = 55; _surviv = 13; goto "checkAmmo"
? _target isKindOf "ibr_LEO1A5" : _armorCE = 380; _armorKE = 335; _surviv = 18; goto "checkAmmo"

#checkAmmo
? _ammo isKindOf "shellCore" : goto "checkShells"
? _ammo isKindOf "rocketCore" : goto "checkRockets"
? _ammo isKindOf "missileCore" : goto "checkMissiles"
? _ammo isKindOf "laserbombCore" : goto "checkbombs"

;Parameters of mines and explosive charges are set roughly, based on the weight of the explosive material. I did not find precise online data for this.

? _ammo == "mine" : _penetration = 70 + NBRand25; goto "explosive"
? _ammo == "mineE" : _penetration = 25 + NBRand10; goto "explosive"
? _ammo == "pipebomb" or _ammo == "timebomb" : _penetration = 100 + NBRand100; goto "explosive"
? _ammo isKindOf "B_20mm_AP" : _penetration = 120 + NBRand10; goto "kinetic"
? _ammo isKindOf "B_20mm_AA" : _penetration = 45 + NBRand10; goto "kinetic"
? _ammo isKindOf "B_23mm_AA" : _penetration = 50 + NBRand10; goto "kinetic"
? _ammo isKindOf "B_23mm_HE" : _penetration = 1 + NBRand10; goto "kinetic"
? _ammo isKindOf "B_23mm_AP" : _penetration = 80 + NBRand10; goto "kinetic"
? _ammo isKindOf "B_23mm_APHE" : _penetration = 55 + NBRand10; goto "kinetic"
? _ammo isKindOf "B_25mm_HE" : _penetration = 1 + NBRand10; goto "kinetic"
? _ammo isKindOf "B_25mm_HEI" : _penetration = 2 + NBRand10; goto "kinetic"
? _ammo isKindOf "B_25mm_APDS" : _penetration = 80 + NBRand10; goto "kinetic"
? _ammo isKindOf "B_30mm_AP" and _weapon == "2A42" : _penetration = 80 + NBRand10; goto "kinetic"
? _ammo isKindOf "B_30mm_AP" and _weapon == "2A72" : _penetration = 120 + NBRand10; goto "kinetic"
? _ammo isKindOf "B_30mmA10_AP" : _penetration = 90 + NBRand10; goto "kinetic"
? _ammo isKindOf "B_30mm_HE" : _penetration = 1 + NBRand10; goto "kinetic"
? _ammo isKindOf "B_30mm_AA" : _penetration = 80 + NBRand10; goto "kinetic"
? _ammo isKindOf "G_30mm_HE" : _penetration = 5 + NBRand10; goto "kinetic"
? _ammo isKindOf "G_40mm_HE" : _penetration = 6 + NBRand10; goto "kinetic"
? _ammo isKindOf "VIL_B_30mm_ros" : _penetration = 10 + NBRand10; goto "chemical"
? _ammo isKindOf "ibr_aden30_gunpods" : _penetration = 50 + NBRand10; goto "kinetic"

#checkShells
? _ammo isKindOf "Sh_105_HE" : _penetration = 30 + NBRand25; goto "explosive"
? _ammo isKindOf "Sh_100_HE" : _penetration = 30 + NBRand10; goto "explosive"
? _ammo isKindOf "Sh_120_HE" : _penetration = 30 + NBRand25; goto "explosive"
? _ammo isKindOf "Sh_120_SABOT" : _penetration = 1000 + NBRand50; goto "kinetic"
? _ammo isKindOf "Sh_122_HE" : _penetration = 30 + NBRand25; goto "explosive"
? _ammo isKindOf "Sh_125_HE" : _penetration = 30 + NBRand50; goto "explosive"
? _ammo isKindOf "Sh_125_SABOT" and _weapon == "D81" : _penetration = 550 + NBRand50; goto "kinetic"
? _ammo isKindOf "Sh_125_SABOT" and _weapon == "2A46M" : _penetration = 810 + NBRand50; goto "kinetic"
? _ammo isKindOf "Sh_85_HE" : _penetration = 10 + NBRand10; goto "explosive"
? _ammo isKindOf "Sh_85_AP" : _penetration = 160 + NBRand25; goto "kinetic"
? _ammo isKindOf "VIL_NPL_AP120mm" : _penetration = 600 + NBRand50; goto "chemical"
? _ammo isKindOf "VIL_NPL_SB120mm" : _penetration = 860 + NBRand50; goto "kinetic"
? _ammo isKindOf "VIL_NPL_HE120mm" : _penetration = 30 + NBRand10; goto "explosive"
? _ammo isKindOf "VIL_NPL_SB125mm" and _attacker isKindOf "VIL_tankERA" : _penetration = 670 + NBRand50; goto "kinetic"
? _ammo isKindOf "VIL_NPL_AP125mm" and _attacker isKindOf "VIL_tankERA" : _penetration = 800 + NBRand50; goto "chemical"
? _ammo isKindOf "VIL_NPL_HE125mm" : _penetration = 30 + NBRand10; goto "explosive"
? _ammo isKindOf "VIL_NPL_SB125mm" : _penetration = 430 + NBRand50; goto "kinetic"
? _ammo isKindOf "VIL_NPL_AP125mm" : _penetration = 500 + NBRand50; goto "chemical"
? _ammo isKindOf "VIL_NPL_AP125mm" : _penetration = 500 + NBRand50; goto "chemical"
? _ammo isKindOf "VIL_HE152mm" : _penetration = 40 + NBRand25; goto "explosive"
? _ammo isKindOf "VIL_HE122mm" : _penetration = 30 + NBRand25; goto "explosive"
? _ammo isKindOf "VIL_HEAT122mm" : _penetration = 460 + NBRand50; goto "chemical"
? _ammo isKindOf "vilas_AP73mm" : _penetration = 400 + NBRand25; goto "chemical"
? _ammo isKindOf "vilas_HE73mm" : _penetration = 20 + NBRand10; goto "explosive"
? _ammo isKindOf "VIL_NPL_sb60mm" : _penetration = 120 + NBRand25; goto "kinetic"
? _ammo isKindOf "VIL_NPL_he60mm" : _penetration = 5 + NBRand10; goto "explosive"
? _ammo isKindOf "VIL_NPL_Uni60mm" : _penetration = 85 + NBRand10; goto "chemical"
? _ammo isKindOf "VIL_NPL_ap60mm" : _penetration = 145 + NBRand25; goto "chemical"
? _ammo isKindOf "ibr_Sh_105_SABOT_leo" : _penetration = 530 + NBRand50; goto "kinetic"
? _ammo isKindOf "ibr_BM_8_100mm_HVAPDS" : _penetration = 220 + NBRand25; goto "kinetic"
? _ammo isKindOf "ibr_BK_17_100mm_HEAT" : _penetration = 280 + NBRand10; goto "chemical"
? _ammo isKindOf "ibr_OF_32_100mm_HE" : _penetration = 30 + NBRand10; goto "explosive"

#checkRockets		
? _ammo isKindOf "R_Hydra_HE" : _penetration = 10 + NBRand10; goto "explosive"
? _ammo isKindOf "R_57mm_HE" : _penetration = 10 + NBRand10; goto "explosive"
? _ammo isKindOf "R_80mm_HE" : _penetration = 20 + NBRand10; goto "explosive"
? _ammo isKindOf "R_S8T_AT" : _penetration = 400 + NBRand50; goto "chemical"
? _ammo isKindOf "R_M136_AT" : _penetration = 420 + NBRand50; goto "chemical"
? _ammo isKindOf "R_RPG18_AT" : _penetration = 380 + NBRand50; goto "chemical"
? _ammo isKindOf "R_PG7VR_AT" : _penetration = 700 + NBRand50; goto "chemical"
? _ammo isKindOf "R_PG7VL_AT" or _ammo isKindOf "VIL_PG7M_ammo" : _penetration = 500 + NBRand50; goto "chemical"
? _ammo isKindOf "R_PG7V_AT" or _ammo isKindOf "VIL_PG7KO_ammo" : _penetration = 280 + NBRand50; goto "chemical"
? _ammo isKindOf "R_OG7_AT" : _penetration = 10 + NBRand10; goto "explosive"
? _ammo isKindOf "R_PG9_AT" : _penetration = 450 + NBRand50; goto "chemical"
? _ammo isKindOf "R_OG9_HE" : _penetration = 10 + NBRand10; goto "explosive"
? _ammo isKindOf "R_SMAW_HEAA" : _penetration = 600 + NBRand50; goto "chemical"
? _ammo isKindOf "R_SMAW_HEDP" : _penetration = 30 + NBRand10; goto "chemical"
? _ammo isKindOf "R_GRAD" : _penetration = 20 + NBRand100; goto "explosive"
? _ammo isKindOf "R_MLRS" : _penetration = 600 + NBRand100; goto "explosive"

#checkMissiles
? _ammo isKindOf "M_Javelin_AT" : _penetration = 800 + NBRand50; goto "chemical"
? _ammo isKindOf "M_Stinger_AA" : _penetration = 30 + NBRand10; goto "explosive"
? _ammo isKindOf "vil_Sidewinder_OSA" : _penetration = 220 + NBRand25; goto "explosive"
? _ammo isKindOf "M_Sidewinder_AA" or _ammo isKindOf "ibr_AIM9M_AA": _penetration = 90 + NBRand10; goto "explosive"
? _ammo isKindOf "M_Strela_AA" or _ammo isKindOf "VIL_grom_AA": _penetration = 20 + NBRand10; goto "explosive"
? _ammo isKindOf "M_Igla_AA" : _penetration = 25 + NBRand10; goto "explosive"
? _ammo isKindOf "M_AT5_AT" : _penetration = 800 + NBRand50; goto "chemical"
? _ammo isKindOf "M_AT13_AT" : _penetration = 900 + NBRand50; goto "chemical"
? _ammo isKindOf "M_TOW_AT" : _penetration = 600 + NBRand50; goto "chemical"
? _ammo isKindOf "M_TOW2_AT" : _penetration = 1000 + NBRand100; goto "chemical"
? _ammo isKindOf "M_AT10_AT" : _penetration = 850 + NBRand50; goto "chemical"
? _ammo isKindOf "M_AT11_AT" : _penetration = 750 + NBRand50; goto "chemical"
? _ammo isKindOf "M_Hellfire_AT" : _penetration = 1400 + NBRand100; goto "chemical"
? _ammo isKindOf "M_Vikhr_AT" : _penetration = 1000 + NBRand100; goto "chemical"
? _ammo isKindOf "M_Maverick_AT" or _ammo isKindOf "ibr_AGM65_AG" : _penetration = 1250 + NBRand100; goto "chemical"
? _ammo isKindOf "M_R73_AA" : _penetration = 90 + NBRand10; goto "explosive"
? _ammo isKindOf "M_Ch29_AT" : _penetration = 750 + NBRand50; goto "explosive"
? _ammo isKindOf "M_AT2_AT" : _penetration = 500 + NBRand100; goto "chemical"
? _ammo isKindOf "M_AT6_AT" : _penetration = 650 + NBRand50; goto "chemical"
? _ammo isKindOf "M_AT9_AT" : _penetration = 100 + NBRand50; goto "chemical"
? _ammo isKindOf "M_9M311_AA" : _penetration = 150 + NBRand25; goto "explosive"
? _ammo isKindOf "VILNPL_at3_sagger" : _penetration = 520 + NBRand50; goto "chemical"

;The case of air bombs separately, because of their much greater strength and manner of "application" it to battlefield.

#checkbombs
? _damage < 0.55 : goto "exit"
? _damage > 1 : _top = 1
? _ammo isKindOf "ibr_GBU12_LGB" : _penetration = 200 + NBRand25; goto "explosive"
? _ammo isKindOf "Bo_FAB_250" : _penetration = 200 + NBRand25; goto "explosive"
goto "exit"


#kinetic

_penetration = _penetration + ((((1000 - (_attacker distance _target))/100) * 0.02) * _penetration)

? _selection == "VEZ" and _penetration > (_armorKE * NBRand50*0.03) and NBRand100 > 85 : _target setvariable [("TUR" + _varcomp),1,true]
? _selection == "ZBRAN" and _penetration > (_armorKE * NBRand50B*0.03) and NBRand100B > 85 :  _target setvariable [("GUN" + _varcomp),1,true]

;Eliminating further calculations for other, particular parts of target in order to Event Handler counted damage only once per hit.

? !(_selection == "") : goto "exit"

; calculating possibly crew injuries

_commH = _commH + _damage * NBrand100/70
_drvrH = _drvrH + _damage * NBrand100B/70
_gunnH = _gunnH + _damage * NBrand100C/70

; Using a random factor to the armor to simulate the angle of hit or hits in the weaker spots

_armorKE = _armorKE + (NBrand25 * (_armorKE/20) - NBrand10 * (_armorKE/20))

;effect of angle of hit to final value of the targets armor

? _difA > 45 and _difA <= 135 : _armorKE = _armorKE / 3
? _difA > 135 : _armorKE = _armorKE / 5
? (_dif >= -45) and (_dif < 45) and (_Dhatan > 20) and (_Tpitch < (_DHatan/120)) and (NBRand100C > 1) : _top = 1;
? (((_dif > -180) and (_dif <= -135)) or ((_dif > 135) and (_dif <= 180))) and (_Dhatan > 20) and (_Tpitch > -(_DHatan/120)) and (NBRand100C > 20) : _top = 1;
? (((_dif >= 45) and (_dif < 135)) or ((_dif > -135) and (_dif <= -45))) and (_Dhatan > 20) and (_TcheckL < (_DHatan/120)) and (NBRand100C > 20) : _top = 1;
? _top == 1 : _armorKE = _armorKE / 6

; crew gets some injuries
~0.01
? ((_penetration > _armorKE) and (NBRand100 > 50)) or (NBRand100 > 95) : commander _target setdamage _commH;driver _target setdamage _drvrH;gunner _target setdamage _gunnH
~0.01

;penetration check with some random factor, 1% for "luck" hit, and small debug

? _penetration < _armorKE and NBRand100 < 99 : player sideChat format["TRG: %1 Arm: KE %2 Pen: SABOT %3 Dmg: %5",_target,_armorKE,_penetration,_damage,_DT];goto "exit0"

; finally target get some damage. Note _surviv variable influence. This damage value is removed from actual target's hit points only, if penetration occured. In many cases it means instant kill, but sometimes, especially for modern MBT's, non-lethal penetration may occurs and damage will be less than 1.

_target setDamage _DT + _damage*(_penetration/_armorKE)*(NBRand50/(3*_Surviv));

;because damage is applied also for gun, turret and traction, below script restores its hit values remembered for that parts by global variables. Its neccesary to avoid miraculous recovery of malfunctioning parts

? (_target getvariable ("TRP" + _varcomp) == 1) :  _target setHit ["PAS_P", 1]
? (_target getvariable ("TRL" + _varcomp) == 1) :  _target setHit ["PAS_L", 1]

? (_target getvariable ("TUR" + _varcomp) == 1) :  _target setHit ["VEZ", 1]
? (_target getvariable ("GUN" + _varcomp) == 1) :  _target setHit ["ZBRAN", 1]

? (_target getvariable ("WL11" + _varcomp) == 1) :  _target setHit ["wheel_1_1_steering", 1]
? (_target getvariable ("WL12" + _varcomp) == 1) :  _target setHit ["wheel_1_2_steering", 1]
? (_target getvariable ("WL13" + _varcomp) == 1) :  _target setHit ["wheel_1_3_steering", 1]
? (_target getvariable ("WL14" + _varcomp) == 1) :  _target setHit ["wheel_1_4_steering", 1]
? (_target getvariable ("WL21" + _varcomp) == 1) :  _target setHit ["wheel_2_1_steering", 1]
? (_target getvariable ("WL22" + _varcomp) == 1) :  _target setHit ["wheel_2_2_steering", 1]
? (_target getvariable ("WL23" + _varcomp) == 1) :  _target setHit ["wheel_2_3_steering", 1]
? (_target getvariable ("WL24" + _varcomp) == 1) :  _target setHit ["wheel_2_4_steering", 1]
_DT = damage _target
player sideChat format["TRG: %1 Arm: KE %2 Pen: SABOT %3 Dmg: %5",_target,_armorKE,_penetration,_damage,_DT]
goto "exit0"



#chemical

? _selection == "VEZ" and _penetration > (_armorCE * NBRand50*0.03) and NBRand100 > 85 : _target setvariable [("TUR" + _varcomp),1,true]
? _selection == "ZBRAN" and _penetration > (_armorCE * NBRand50B*0.03) and NBRand100B > 85 : _target setvariable [("GUN" + _varcomp),1,true]
? !(_selection == "") : goto "exit"

_commH = _commH + _damage * NBrand100/70
_drvrH = _drvrH + _damage * NBrand100B/70
_gunnH = _gunnH + _damage * NBrand100C/70

_armorCE = _armorCE + (NBrand25 * (_armorCE/20) - NBrand10 * (_armorCE/20))


? _difA > 45 and _difA <= 135 : _armorCE = _armorCE / 3
? _difA > 135 : _armorCE = _armorCE / 5

? (_dif >= -45) and (_dif < 45) and (_Dhatan > 20) and (_Tpitch < (_DHatan/120)) and (NBRand100C > 1) : _top = 1;
? (((_dif > -180) and (_dif <= -135)) or ((_dif > 135) and (_dif <= 180))) and (_Dhatan > 20) and (_Tpitch > -(_DHatan/120)) and (NBRand100C > 20) : _top = 1;
? (((_dif >= 45) and (_dif < 135)) or ((_dif > -135) and (_dif <= -45))) and (_Dhatan > 20) and (_TcheckL < (_DHatan/120)) and (NBRand100C > 20) : _top = 1;
? _top == 1 : _armorCE = _armorCE / 6
~0.01
? ((_penetration > _armorCE) and (NBRand100 > 50)) or (NBRand100 > 95) : commander _target setdamage _commH;driver _target setdamage _drvrH;gunner _target setdamage _gunnH
~0.01

? _penetration < _armorCE  and NBRand100 < 99 : player sideChat format["TRG: %1 Arm: CE %2 Pen: HEAT %3 Dmg: %5",_target,_armorCE,_penetration,_damage,_DT];goto "exit0"
_target setDamage _DT + _damage*(_penetration/_armorCE)*(NBRand50/(3*_Surviv));

? (_target getvariable ("TRP" + _varcomp) == 1) :  _target setHit ["PAS_P", 1]
? (_target getvariable ("TRL" + _varcomp) == 1) :  _target setHit ["PAS_L", 1]

? (_target getvariable ("TUR" + _varcomp) == 1) :  _target setHit ["VEZ", 1]
? (_target getvariable ("GUN" + _varcomp) == 1) :  _target setHit ["ZBRAN", 1]

? (_target getvariable ("WL11" + _varcomp) == 1) :  _target setHit ["wheel_1_1_steering", 1]
? (_target getvariable ("WL12" + _varcomp) == 1) :  _target setHit ["wheel_1_2_steering", 1]
? (_target getvariable ("WL13" + _varcomp) == 1) :  _target setHit ["wheel_1_3_steering", 1]
? (_target getvariable ("WL14" + _varcomp) == 1) :  _target setHit ["wheel_1_4_steering", 1]
? (_target getvariable ("WL21" + _varcomp) == 1) :  _target setHit ["wheel_2_1_steering", 1]
? (_target getvariable ("WL22" + _varcomp) == 1) :  _target setHit ["wheel_2_2_steering", 1]
? (_target getvariable ("WL23" + _varcomp) == 1) :  _target setHit ["wheel_2_3_steering", 1]
? (_target getvariable ("WL24" + _varcomp) == 1) :  _target setHit ["wheel_2_4_steering", 1]
_DT = damage _target

player sideChat format["TRG: %1 Arm: CE %2 Pen: HEAT %3 Dmg: %5",_target,_armorCE,_penetration,_damage,_DT]
goto "exit0"

#explosive
? _selection == "VEZ" and _penetration > (_armorKE * NBRand50*0.03) and NBRand100 > 85 : _target setvariable [("TUR" + _varcomp),1,true]
? _selection == "ZBRAN" and _penetration > (_armorKE * NBRand50B*0.03) and NBRand100B > 85 : _target setvariable [("GUN" + _varcomp),1,true]


_armorKE = _armorKE + (NBrand25 * (_armorKE/20) - NBrand10 * (_armorKE/20))

; below mines, bombs and satchel charges cases

? (_ammo == "mine") or (_ammo == "mineE") : _armorKE = _armorKE / 8;
? (_ammo == "mine") or (_ammo == "mineE") (_ammo == "pipebomb") or (_ammo == "timebomb") :  goto "topskip"
? (_ammo isKindof "laserbombcore") : goto "topskip0"
? (_dif >= -45) and (_dif < 45) and (_Dhatan > 20) and (_Tpitch < (_DHatan/120)) and (NBRand100C > 1) : _top = 1;
? (((_dif > -180) and (_dif <= -135)) or ((_dif > 135) and (_dif <= 180))) and (_Dhatan > 20) and (_Tpitch > -(_DHatan/120)) and (NBRand100C > 20) : _top = 1;
? (((_dif >= 45) and (_dif < 135)) or ((_dif > -135) and (_dif <= -45))) and (_Dhatan > 20) and (_TcheckL < (_DHatan/120)) and (NBRand100C > 20) : _top = 1;

#topskip0
? _top == 1 : _armorKE = _armorKE / 6 
#topskip
? (_ammo == "mine") and _selection == "PAS_P") and NBRand100 > 20 : _target setHit ["PAS_P", 1];  _target setHit ["PAS_P", 1];_target setvariable [("TRP" + _varcomp),1,true]
? (_ammo == "mine") and _selection == "PAS_L") and NBRand100B > 20 : _target setHit ["PAS_L", 1]; _target setHit ["PAS_L", 1];_target setvariable [("TRL" + _varcomp),1,true]

? (_ammo == "mine") and (_selection == "wheel_1_1_steering") and (NBRand100 > 10) : _target setHit ["wheel_1_1_steering", 1];_target setvariable [("WL11" + _varcomp),1,true]
? (_ammo == "mine") and (_selection == "wheel_1_2_steering") and (NBRand100 > 10) : _target setHit ["wheel_1_2_steering", 1];_target setvariable [("WL12" + _varcomp),1,true]
? (_ammo == "mine") and (_selection == "wheel_1_3_steering") and (NBRand100 > 10) : _target setHit ["wheel_1_3_steering", 1];_target setvariable [("WL13" + _varcomp),1,true]
? (_ammo == "mine") and (_selection == "wheel_1_4_steering") and (NBRand100 > 10) : _target setHit ["wheel_1_4_steering", 1];_target setvariable [("WL14" + _varcomp),1,true]
? (_ammo == "mine") and (_selection == "wheel_2_1_steering") and (NBRand100 > 10) : _target setHit ["wheel_2_1_steering", 1];_target setvariable [("WL21" + _varcomp),1,true]
? (_ammo == "mine") and (_selection == "wheel_2_2_steering") and (NBRand100 > 10) : _target setHit ["wheel_2_2_steering", 1];_target setvariable [("WL22" + _varcomp),1,true]
? (_ammo == "mine") and (_selection == "wheel_2_3_steering") and (NBRand100 > 10) : _target setHit ["wheel_2_3_steering", 1];_target setvariable [("WL23" + _varcomp),1,true]
? (_ammo == "mine") and (_selection == "wheel_2_4_steering") and (NBRand100 > 10) : _target setHit ["wheel_2_4_steering", 1];_target setvariable [("WL24" + _varcomp),1,true]

? (_ammo == "mineE") and _selection == "PAS_P") and NBRand100 > 25 : _target setHit ["PAS_P", 1];  _target setHit ["PAS_P", 1];_target setvariable [("TRP" + _varcomp),1,true]
? (_ammo == "mineE") and _selection == "PAS_L") and NBRand100B > 25 : _target setHit ["PAS_L", 1]; _target setHit ["PAS_L", 1];_target setvariable [("TRL" + _varcomp),1,true]

? (_ammo == "mineE") and (_selection == "wheel_1_1_steering") and (NBRand100 > 15) : _target setHit ["wheel_1_1_steering", 1];_target setvariable [("WL11" + _varcomp),1,true]
? (_ammo == "mineE") and (_selection == "wheel_1_2_steering") and (NBRand100 > 15) : _target setHit ["wheel_1_2_steering", 1];_target setvariable [("WL12" + _varcomp),1,true]
? (_ammo == "mineE") and (_selection == "wheel_1_3_steering") and (NBRand100 > 15) : _target setHit ["wheel_1_3_steering", 1];_target setvariable [("WL13" + _varcomp),1,true]
? (_ammo == "mineE") and (_selection == "wheel_1_4_steering") and (NBRand100 > 15) : _target setHit ["wheel_1_4_steering", 1];_target setvariable [("WL14" + _varcomp),1,true]
? (_ammo == "mineE") and (_selection == "wheel_2_1_steering") and (NBRand100 > 15) : _target setHit ["wheel_2_1_steering", 1];_target setvariable [("WL21" + _varcomp),1,true]
? (_ammo == "mineE") and (_selection == "wheel_2_2_steering") and (NBRand100 > 15) : _target setHit ["wheel_2_2_steering", 1];_target setvariable [("WL22" + _varcomp),1,true]
? (_ammo == "mineE") and (_selection == "wheel_2_3_steering") and (NBRand100 > 15) : _target setHit ["wheel_2_3_steering", 1];_target setvariable [("WL23" + _varcomp),1,true]
? (_ammo == "mineE") and (_selection == "wheel_2_4_steering") and (NBRand100 > 15) : _target setHit ["wheel_2_4_steering", 1];_target setvariable [("WL24" + _varcomp),1,true]

? _difA > 45 and _difA <= 135 : _armorKE = _armorKE / 3
? _difA > 135 : _armorKE = _armorKE / 5
? !(_selection == "") : goto "exit"
_commH = _commH + _damage * NBrand100/70
_drvrH = _drvrH + _damage * NBrand100B/70
_gunnH = _gunnH + _damage * NBrand100C/70

~0.01
? ((_penetration > _armorKE) and (NBRand100 > 50)) or (NBRand100 > 95) : commander _target setdamage _commH;driver _target setdamage _drvrH;gunner _target setdamage _gunnH
~0.01

? _penetration < _armorKE and NBRand100 < 99 : player sideChat format["TRG: %1 Arm: KE %2 Pen: EXPL %3 Dmg: %5",_target,_armorKE,_penetration,_damage,_DT];goto "exit0"
_target setDamage _DT + _damage*(_penetration/_armorKE)*(NBRand50/(3*_Surviv));

? (_target getvariable ("TRP" + _varcomp) == 1) :  _target setHit ["PAS_P", 1]
? (_target getvariable ("TRL" + _varcomp) == 1) :  _target setHit ["PAS_L", 1]

? (_target getvariable ("TUR" + _varcomp) == 1) :  _target setHit ["VEZ", 1]
? (_target getvariable ("GUN" + _varcomp) == 1) :  _target setHit ["ZBRAN", 1]

? (_target getvariable ("WL11" + _varcomp) == 1) :  _target setHit ["wheel_1_1_steering", 1]
? (_target getvariable ("WL12" + _varcomp) == 1) :  _target setHit ["wheel_1_2_steering", 1]
? (_target getvariable ("WL13" + _varcomp) == 1) :  _target setHit ["wheel_1_3_steering", 1]
? (_target getvariable ("WL14" + _varcomp) == 1) :  _target setHit ["wheel_1_4_steering", 1]
? (_target getvariable ("WL21" + _varcomp) == 1) :  _target setHit ["wheel_2_1_steering", 1]
? (_target getvariable ("WL22" + _varcomp) == 1) :  _target setHit ["wheel_2_2_steering", 1]
? (_target getvariable ("WL23" + _varcomp) == 1) :  _target setHit ["wheel_2_3_steering", 1]
? (_target getvariable ("WL24" + _varcomp) == 1) :  _target setHit ["wheel_2_4_steering", 1]
_DT = damage _target
player sideChat format["TRG: %1 Arm: KE %2 Pen: EXPL %3 Dmg: %5",_target,_armorKE,_penetration,_damage,_DT]

#exit0

_commH = damage _comm
_drvrH = damage _drvr
_gunnH = damage _gunn
_dT = _time - _worktime

;debug to rpt - time work of script for efficiency testing 

diag_log format ["script work time: %1",_dt]
#exit

exit

"NBRandomizer.sqs":

#loop
NBRand10 = random 10
NBRand25 = random 25
NBRand50 = random 50
NBRand50B = random 50
NBRand100 = random 100
NBRand100B = random 100
NBRand100C = random 100
~0.01
goto "loop"

"crewnodamage.sqs", to make crew not died from a few unsuccessful hits:

;method for avoid normal (but far too big) damage applied to crew of hitted tank. Main script will handle this for its own. "Allow damage false" do not works for some reason. 
;This will cause problems, if non-vehicle (typeof "man" i think) units are with some other EH "handledamge". It will remove this EH from them. 

_ix = 0
_tanks = []
_i = 0
#loop0
? (_i == "tank" counttype vehicles) : goto "loop1"
? (vehicles select _i) isKindOf "tank" : _tanks = _tanks + [vehicles select _i]
_i = _i + 1
goto "loop0"
#loop1
;diag_log _tanks
? (_i == 0) : goto "exit"

#loop
? ("tank" counttype vehicles == 0) : goto "exit"
{{_x removeallEventHandlers "Handledamage";} foreach crew _x} foreach allunits;
{{_x removeallEventHandlers "Handledamage";_ix = _x addEventHandler ["Handledamage", ""]} foreach crew _x} foreach _tanks;

~0.5
goto "loop"
#exit
exit

and simple tank counter:

#loop1
_tanksumW = west countSide vehicles
_tanksumE = east countSide vehicles
~1
hintsilent format ["West %1 - East %2",_tanksumW,_tanksumE]
goto "loop1"

init of every armored unit remains unchanded:

this addEventHandler ["handledamage", {_this exec "NBTank.sqs"}];

but to abrams tanks I added this, found somewhere on this forum, to remove loader, who always get killed because of his stupidity:

tankCrew = crew this; crewLoader = (tankCrew select 3); moveOut  crewLoader; deleteVehicle crewLoader;

Also init of one of units or trigger activation field should contains this:

[] exec "NBRandomizer.sqs";[] exec "counterT.sqs";[] exec "crewnodamage.sqs"

(counter is optional of course)

In the files I put some comments and discussed some problems. Today I will try perhaps more effective way to attacked lined up in front towards the attacker.

Edited by Rydygier

Share this post


Link to post
Share on other sites

@ Rydygier

The idea was to check their configs. You can do that via the SIX config browser or

just download ACE core. It only has a few MB.

Share this post


Link to post
Share on other sites

In that case I'll check it out. Thanks for the advice. I hope that their config is based on reliable sources.

Edited by Rydygier

Share this post


Link to post
Share on other sites

As I mentioned before, I tried various ways to persuade a tank to set up front to the nearest or currently firing enemy vehicle, if it is kind of "tank". There are problems. Script is nearly finished except itself turning procedure. "Setdir" works, but only on level ground, because this command sets vehicle horizontally regardless of the slope. Also this needs missing animations and sound of tracks. "Sendsimplecommand" (preffered) works for "left" or "right". "Stop", even though the commander says this order, does not stop turning and tank rotates like carousel, endless. "Forward" also doesn't work. This isn't dependent on presence of player in crew. "doStop" does nothing too. Are there some other "simplecommands" or it just doesn't work? Has anyone any idea? Here it is presentation of "setdir" version on flat ground (but try to move tank on nearest slope, and watch then...):

TDS_test2.utes

Edited by Rydygier

Share this post


Link to post
Share on other sites

Sounds like a promising update .... will download and test now mate !

Keep up the good work.

EDIT: Tested and it does a GOOD job turning the tank towards the enemy. When ammo is enabled it takes a T72 between 3-5 shots now to disable an M1A1 TUSK. The movement between positions is very rapid however. I hope someone is able to help with other commands that will help turn a tank in a realistic fashion.

Will also have to get you to code in SQF :)

Edited by Kremator

Share this post


Link to post
Share on other sites

T(h)anks for testing. Changed file to new one, there are some minor fixes, but still this piece of code is WIP and messy. BTW. I think, there is still too big chance for track damage. Too easy enemy can disable any tank, including Abrams, that way. AI's abandon vehicle in that case even, if they still can shoot with main gun and destroy attacker. Outside they quickly die by KM's, of course... Unfortunately I'm unfamiliar with AI behavior scrips, so can't do anything about those suicidal tendencies.

Edited by Rydygier

Share this post


Link to post
Share on other sites

I will test this all out as soon as possible, I don't have the skills you do in regards to SQF however you have implimented everything I wanted to do and then some.

Thanks a bunch for improving this script, it will make tanking 100 times better, I also cannot wait to use it with the upcomming LOBO iraq war release.

Edited by TristanYockell

Share this post


Link to post
Share on other sites

Thanks, I'm just trying to continue great idea of Nice_boats. It is without a doubt worth the efforts if folks will to enjoy it as I do.

EDIT: However, to be able to use the script with any new vehicles and weaponry from addons, I will first have to expand list of vehicles and weapons with those.

Edited by Rydygier

Share this post


Link to post
Share on other sites

I will try to prepare something, still "setdir" version suffers mentioned bug, when tank is turning on non-level, sloped ground. It may give quite funny effect. :)

---------- Post added at 08:26 PM ---------- Previous post was at 07:43 PM ----------

Here you go:

TDS_test3

Some explanations:

- Script will not start (and will stop) when a vehicle is moving to not interfere with his driving.

- It may be noted that changing direction is followed unevenly. This is due to random factors associated with driver skill factor (selfcontrol under fire, reflex).

- Vehicle does not change direction because of air units and infantrymen, even if they have antitank weapons. I'll think about whether to change or leave.

- Ability to match towards work in two ways: when crew noticing enemy tank (requires presence of commander and driver, both AI), and when the tank is hit (only AI driver required he will not wait for order in this circumstance, I think).

- Of course, when tank is under attack from many sides, crew must choose to which opponent will turn tank. Here reigns rule "the last word matters."

PS Reduced chance of breaking track by 10 percent.

Edited by Rydygier

Share this post


Link to post
Share on other sites

Good work mate ! Testing now.

Perhaps post in the Editing section under configs and scripting to see if anyone knows of any other alternatives to setdir?

EDIT: Tested but am not seeing that BLUFOR turning to face the enemy. I have only really see one T90 turn to face in battle so far. Battles so last much longer however.

Edited by Kremator

Share this post


Link to post
Share on other sites

I guess it is beacause BLUEFOR is more advancing there, and continually in moving, I deployed some still T-90 on airfield for demonstration purposes. Maybe try several times from different points of view. I will look at this issue closer tommorow.

---------- Post added at 09:52 PM ---------- Previous post was at 09:20 PM ----------

...Or even today. :) In this version better you can see how does it work and what limitations it has. M1A2 platoon is fighting for life.

TDS_test3b

Shortened pause between each script executions and improved drivers' reflex. Good night.

Share this post


Link to post
Share on other sites
Thanks, I'm just trying to continue great idea of Nice_boats. It is without a doubt worth the efforts if folks will to enjoy it as I do.

EDIT: However, to be able to use the script with any new vehicles and weaponry from addons, I will first have to expand list of vehicles and weapons with those.

Yes this is ok, I will attempt to do this for myself, don't worry about that. I already implimented all of the Project 85 vehicles before, I'm sure I can do it again.

If I hit a little road block I may contact you for help however if that is ok?.

Share this post


Link to post
Share on other sites

Of course, thats OK, I will help gladly, as far as I could. Although I'm not a big coder...

Share this post


Link to post
Share on other sites
PvPscene, with heavy addons, like ACE, I have a problem, which is called "3 GB per month transfer limit." Extras weigh 1 GB. So it is, as you live to middle of nowhere.

If you use Six Updater at least it'll save you a lot of downloading on updates, so you basically download the extras once and then every update is a relatively small download. Or as PvPscene said you can just download the core, without the extras.

Share this post


Link to post
Share on other sites

Downloaded core. It seems that I know too little about config files to properly translate values ​​used in ACE's config.bin to RHA equivalent used in the TDS script. Unless ACE core contains separate file with corresponding values, which I simply missed. In addition, I am not sure whether ACE developers certainly have used more reliable source than me.

BTW. In fact, I believe that we are largely stuck with guesswork, since key parameters modern equipment are simply kept secret, which is fully understandable. Therefore I see no chance for substantive resolution of endless and fruitless Internet wars such as, "M1A2 against T-90".

Share this post


Link to post
Share on other sites

Hence it's a good idea to check the actual documentation rather than trying to guess it from binarized configs that have comments stripped :)

http://ace.dev-heaven.net/wagn/Vehicle_Damage_System

See (Coding) Notes section.

And yes, guess work is part of the equation, yet we have done extensive research; several books, several online sources, several people with experience etc.

Edited by Sickboy

Share this post


Link to post
Share on other sites

Studied and benefited. I found armor values (sometimes surprising, it seems that T90's have thicker armor than M1A2's (with ERA) and M1A1 has the same armor as M1A2 TUSK minus side hull ERA.); also found penetration ability for Javelin, rockets, etc... Shellcore Ammo for tanks main guns has a parameter ACE_hit (in which .pbo I find relevant config.bin?) or is based on default values​​?

Now will try to modify learned values. TDS does not define separate variables for side, rear, etc.. armor, but instead divides by constant number value of frontal armor which in addition is only arithmetic average of turret and hull armor. It is some simplification, because chances for hit hull or turret aren't equal nor constant. However, will try to add a variable for proportion, to fit differences in the armor thickness proportion of the various types of tanks and will check out impact on working time of script.

Edited by Rydygier

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  

×