freghar / arma-additions

Other
4 stars 0 forks source link

Create some stealth-friendly 5.56mm / 6.5mm CfgAmmo #27

Closed freghar closed 3 years ago

freghar commented 3 years ago

The engine seems to have a magical value of hit=6.2 (or smaller) in CfgAmmo for which it does not alert everybody in 80m radius when a soldier gets hit (without getting killed outright). Whether this is DCScream (removed in A3) or not is unclear. This means that only 9mm ammo (hit=5) can be used on CQB stealth missions, which is a shame.

Create some 5.56mm (and make it RHS compatible via asdg) and 6.5mm CfgAmmo with dangerRadiusBulletCloseand dangerRadiusHit equal to 9mm, hit=6.2, and perhaps adjust speed to be sub-sonic (and remove sonic cracks // use existing base class without sonic cracks) and make it tracer-less or with IR tracers.

This would allow some weapon variety, retain original caliber, and not break stealth missions.

freghar commented 3 years ago

I was curious about the exact value, so I narrowed it down to

        // 6.2939312 bad
        // 6.2939311 good

for B_65x39_Caseless.

Experimenting more with various other values in CfgAmmo revealed that this is dependent on typicalSpeed as well, it being 820 for B_65x39_Caseless.

The logical conclusion is that the barrier for alerting other units isn't the hit value, but rather damage dealt to the soldier as increasing typicalSpeed reduces the time the bullet spends within the boundary of the soldier body and thus deals less damage.

Doing a simple

test_alldamage = "";
this addEventHandler ["HandleDamage", {
    params ["_unit", "_selection", "_damage", "_source", "_projectile", "_hitIndex", "_instigator", "_hitPoint"];
    test_alldamage = test_alldamage + format ["sel: %1 ; hit: %2", _selection, _damage] + toString [10];
    copyToClipboard test_alldamage;
}];

and plugging in my "known good" edge value gave me

sel: head ; hit: 0
sel:  ; hit: 0.0999997
sel:  ; hit: 0.0999997
sel: spine2 ; hit: 0.357258
sel: body ; hit: 0.000322324

for a single shot. This pretty clearly indicates that the magic number is 0.1 damage done to some selection/hitpart.

The unfortunate conclusion being that there's no one value I could use for custom ammo to avoid the alert, since the 0.1 damage will differ based on armor carried by the target (tested, proven true) as well as shot distance, body part hit (alert happening when hit from the side where armor doesn't protect the soldier), etc.

Maybe the 0.1 value is somewhere in the config, but I haven't found it yet amongst the sea of 0.1 values for other things.

freghar commented 3 years ago

I've searched through the full vanilla config and found a few interesting keywords,

armor=0.1;
interval=0.1;
lifeTime=0.1;
minimalHit=0.1;
groundNoiseDistanceCoef=0.1
passThrough=0.1;
Feedback=0.1;
armor=-0.1;
dampingRate=0.1;
explosionShielding=0.1;
fireLightCoef=0.1;
start=0.1;
power=0.1;
start=0.1;
coefMin=0.1;
collisionSize=0.1;
constantDistance=0.1;
coreDistance=0.1;
damageTime=0.1;
damperSize=0.1;
killFriendlyExpCoef=0.1;
maxAmp=0.1;
permanent=0.1;
switchTime=0.1;
temporary=0.1;
value=0.1;
BleedingInjuryMinProjectile=0.1;
InjuredTreshold=0.1;
MinValue1=0.1;

out of which BleedingInjuryMinProjectile (at least) seemed pretty promising. Setting it to a higher value yielded no effect.

I've also explored class HitPoints of CAManBase and tried increasing minimalHit from 0.01 to ie. 0.8, which predictably resulted in <0.8 damage to those selections being ignored, but the name-less selection still received 0.1 damage and alerted nearby units.

I also confirmed that the damage value for the name-less selection changes (is not just a constant) and the alert happens on the 0.1 threshold:

// no alert
idx: -1 ; sel:  ; hit: 0.0999924
// alert
idx: -1 ; sel:  ; hit: 0.100026

Changing CfgFirstAid and valRangeMult did scale damage done to the name-less selection, but the alert still happened on 0.1.

This leads me to believe it's something internal to the engine and not tweakable via config, unfortunately.