Fully Unlocked Ballistics and Range
This mod enables full ballistics simulation up to 500 meters, plus completely rebalances all weapons and ammo to simulate real life damage model.
Idea
Weapons in vanilla STALKER 2 have very questionable ballistics and damage model despite game engine being capable to simulate realistic ballistics (to an extent). This mod aims to fix that by changing how trajectory and damage over distance is calculated. It also adjusts damage and armor penetration stats of each weapon. I created this mod not only because I’m unhappy with vanilla damage and ballistics, but also to share my findings with the STALKER modding community. In addition to explaining changes done by this mod I’ll also explain my findings and how ballistics work in this game. Hopefully it’ll become a foundation for many more other mods!
How it works in vanilla
It doesn’t In vanilla ballistics simulation is very simplistic and damage model has nothing to do with real life guns. Developers had all the tools to make gun play more realistic, but chose not to. Considering the game sold millions of copies already, it could be the right choice, but we are not here for arcade shooting experience, aren’t we?
Vanilla has crazy bullet drop-off where bullet starts to drop to the ground suddenly and drastically after flying 10-25 meters. Damage falls off drastically too. Damage balance between guns is not following any particular logic with damage values all over the place and some handguns having more armor penetration than assault rifles. Guns have no dispersion when aiming down the sights. NPCs deal much lower damage than player, but at the same time use aimbot to hit you.
At the same time game engine is already able to:
simulate bullet trajectory through how much bullet drops over distance
simulate damage and armor penetration fall off over distance
simulate damage of different calibers through body armors of different classes
simulate recoil and bullet dispersion
It just needs to be fed properly configured data to do all of that.
I’ll explain how it works in technical details section, for now here is the list of changes.
What this mod changes
Bullet trajectory
– Full emulation of trajectory up to 2000m (yards) including projectile rendering
– Full emulation of damage and armor piercing fall off up to 500m (yards)
– Correct velocity for bullets of all calibers including 12/70 pellets
– Each gun has a unique bullet trajectory according to it’s ammo and barrel length (which affects muzzle velocity). Even ballistic coefficient of a bullet was taken into account
– All guns are split in 4 categories according to their zero range: 25m (HG, SMG, Shotguns), 75m (carbines), 100m (assault rifles), 200m (snipers). Bullet doesn’t start to drop off until it reaches zero range, but damage and AP starts to fall of almost as soon as bullet leaves the barrel
– Dispersion system is changed. Now guns will have dispersion even when aiming down the sights, but not too much so you should expect to reliably hit your target at zero range. When hip firing this dispersion will be greatly multiplied, though
Damage model
– Bullet sponginess is gone/reduced. Almost all guns have more damage than in vanilla. Gun fights are deadlier both to NPCs and player, both at short and long distances
– Every gun damage is calculated with very complex formulas that take into account bullet diameter, bullet mass and muzzle velocity
– Drastically different armor piercing values, unique for each gun. Armor penetration not just in video games but also in real life is not something that can be easily calculated, but I did my best taking into account research of ammunition and body armor data and even things like sectional density of a bullet
– Any differences between NPC and player damage models were removed. In vanilla NPC guns simply deal 30-50% of player damage, with difficulty modifiers on top of it
– Headshot damage multiplier reduced from 6 to 3 for NPCs, but since overall damage is increased, you still can expect to one shot everyone without headgear
– Player now has same damage multipliers for head, torso and limbs as NPCs: 3.0, 1.0 and 0.7 accordingly. It was 1.0 for everything in vanilla
Ammo
– Base damage and armor piercing is based on a gun, so default (FMJ) ammo has no impact on bullet stats
– AP ammo gives flat increase to gun’s armor piercing. This value is different for each caliber, for 9mm AP ammo gives biggest increase to armor penetration, up to 70%, while for high power ammo it’s only ~20%
– Expansive (HP) ammo gives 40% increase to damage and 25% increase to bleeding amount, but reduces armor piercing by 20% and bullet trajectory flatness by 10%
– Sniper (or supersonic) ammo gives 10% increase to damage, armor piercing and bleeding amount, 20% increase to bullet trajectory flatness, but also increases recoil by 10% and weapon durability wear by 30%
– Ammo weight is changed according to real life values
– Adjusted costs, mostly cheap ammo is now more expensive and expensive ammo is cheaper
Guns
– Rebalanced all guns to follow same ballistics and damage model (see above). All damage and armor piercing values are changed, all accuracy and distance related stats are changed
– Corrected rate of fire and magazine sizes according to real life values
– Adjusted durability and durability degradation per shot for all guns. In general older and less sophisticated guns have more life span than tacticool NATO weaponry
– Introduced new gun type – carabine! Carabines are assault rifles with a shorter barrel. Slightly less damage and AP, more maneuverability and less ADS time. Zero range distance: 75m. Vanilla carabines: AKS-47U (AKU), HK416 (M16), Groza (Grim), AS VAL (Lavina) and VSS Vintorez (Gvintar)
– Changed the “feel” of many guns, this includes time to ADS, walking speed while aiming and iron sight zoom. With lighter, shorter guns you have more mobility. Zoom while aiming is slightly reduced for all guns and is barely noticeable
– Weapon weight changed according to real life values
– Adjusted prices for all guns, but prices are not that far from vanilla. Average gun price in vanilla – 17300, new average is 19000
Explosives
– Doubled the radius of damage and concussion for grenades and most other explosives
– Grenade damage to player slightly increased, damage to NPCs reduced. Reduced damage of explosives like barrels and gas cylinders
NPC behavior
– Includes Maklane’s Better Gunfights both for compatibility (many use it) and because you’d probably be obliterated by NPCs without it
– Slightly changed how NPCs behave with different gun types, including new carabine type
UI
– Fixed vanilla weapon info card! Have you ever noticed how all guns have very similar fire rate and distance stat just doesn’t make much sense? Now you can get useful info from the gun tooltip
– Gun damage is simply gun base damage, min value is 0, max 125
– Penetration is armor piercing of a gun (with default FMJ ammo), from 1 to 5. It essentially shows what body armor class bullet can “handle”
– Fire rate is greatly improved and now shows fire rate between 200 and 1200 RPM. In vanilla it was from 25 to 1500 RPM. Now the difference between MP5 and AK-47 is not just 10 pixels. But it means everything below 200 RPM will show 0 fire rate on UI
– Distance gauge is increased from 80m to 125m. Now it shows zero range, as I said there are 4 zero range categories all guns fall into: 25m, 75m, 100m and 200m. You can think of this distance as an expected distance of engagement with the target
– Accuracy stat is relevant inside of it’s “zero range category”. You should compare handguns to other handguns and SMGs and compare assault rifles to assault rifles. There is no point in comparing handgun accuracy to assault rifle accuracy since they measure accuracy at different distances
– For shotguns, info card reflects stats for slugs (AP ammo) instead of buckshot (FMJ)
Recommended difficulty settings
– Disable that crosshair, man, aim down the sights!
– There is a file in optional downloads which sets difficulty variables (DifficultyPrototypes.cfg) to recommended values
– If you use your own values, I strongly recommend this settings
– NPC_Weapon_BaseDamage = 1
– Weapon_BaseDamage = 1
– NPC_HP = 1
Included changes and mods
– Included Maklane’s Better Gunfights (NPCWeaponAttributesPrototypes.cfg)
– Included Ledge Grabbing by Kennymylenny (Even Lower) (ObjPrototypes.cfg)
– Included reduced stamina costs, my values, nothing too far from vanilla (ObjPrototypes.cfg)
– Mouse X/Y sensitivity fix (ObjPrototypes.cfg)
Recommended and compatible mods
– Readable Ammo
– A-Life mod like Shay’s Living Zone (An ALife mod). This mod has minor compatibility issue, just let it override my mod, you won’t loose much. Read below to see how to do so
– Painter of the Zone Better Blood Wallmarks (ProjectilePrototypes.cfg). Included compatibility, so just make sure my mod overrides this one
– Loot reducing mods like Grok’s Economy and Difficulty Fix Attempt. I recommend overriding it with my optional DifficultyVariables mod though
– Medkits and Consumables Rebalance
How to install
– Unzip file to get .pak files
– Move all .pak files to the ‘~mods’ folder which you can find at “S.T.A.L.K.E.R. 2 Heart of Chornobyl\Stalker2\Content\Paks\~mods”
– If the “~mods” folder doesn’t exist there, create it
– Make sure you understand load order. Below is a list of modified .cfg files. Check for possible conflicts with other mods
Conflict resolution
– Delete ZeeFUBAR_CoreVariable_50_P.pak if you use any other important mod that modifies CoreVariables.cfg, like Shay’s Living Zone or any other A-Life or day length mod. Don’t try to play with load order by adding zzz to file name, just delete it, it’ll save you from headache
– This mod is made to load last even if you add zzz to file name. If you really want to override it, remove _99 from ZeeFUBAR_99_P.pak
Changed files
High priority, don’t override if you want mod to work properly
– AmmoPrototypes.cfg
– NPCWeaponSettingsPrototypes.cfg
– PlayerWeaponSettingsPrototypes.cfg
– CharacterWeaponSettingsPrototypes.cfg
– WeaponGeneralSetupPrototypes.cfg
– NPCWeaponAttributesPrototypes.cfg (ok to override with anything that includes Maklane’s Better Gunfights)
Low priority, you’ll lose something non-critical if other mod overrides this
– WeaponPrototypes.cfg (weight and cost)
– GeneralNPCObjPrototypes.cfg (NPC headshot multiplier and somewhat affects damage model)
– ExplosionPrototypes.cfg (explosions rebalance)
– ObjPrototypes.cfg (Player headshot and limbs multiplier, stamina cost and climbing)
– ProjectilePrototypes.cfg (bullet speed, affects trajectory to an extent)
– CoreVariables.cfg in ZeeFUBAR_CoreVariable_50_P.pak (you’ll loose my weapon stats UI fixes, but many important mods modify this, so just delete mine at any signs of conflict, or merge manually)
Future changes
– Rebalance recoil
– Rebalance dispersion
– Rebalance attachments and upgrades
– Rebalance unique weapons to be unique again
– When possible, make compatible with mods that modify same files
Technical details for modders
I suggest unpaking .pak files and comparing them with vanilla files. You’ll find many insights into how variables affect ballistics and damage. But here is how I think all of it works.
Trajectory and damage fall off
– EffectiveFireDistance(Min|Max) – zero range, aka distance over which bullet just flies straight as laser beam. Measured in centimeters. For some reason has Min and Max values, but they are always the same in vanilla. In mod all weapons have one of 4 possible EffectiveFireDistance values: 25m, 75m, 100m and 200m. After this distance, bullet drop ark starts
– BulletDropLength – length of bullet drop ark, set to 500m for all weapons. Measured in centimeters. In vanilla was between 40 and 100m for different weapon types
– BulletDropHeight – height of bullet drop ark aka how much bullet dropped to the ground when it reached BulletDropLength distance (500m), in this mod individual for each weapon according to real life trajectory simulation. Measured in centimeters. Vanilla value was same for all guns – 170cm
– FireDistanceDropOff – damage doesn’t start to fall off until bullet traveled this distance. Measured in centimeters. In this mod damage starts to fall of almost immediately after leaving barrel. Vanilla values were in 8-30m range
– DistanceDropOffLength – length of damage fall off distance. No impact on trajectory. In this mod set to 500m for all weapons. Was ridiculously low in Vanilla, like 10m
– MinBulletDistanceDamageModifier – damage at max distance (FireDistanceDropOff + DistanceDropOffLength) aka damage drop off. 0.1 means the gun will deal 10% of it’s damage at max distance (500m in this mod). After reaching max distance, damage will stop to fall off and will remain at this value until bullet is deleted from the game (2000m in this mod)
– MinBulletDistanceArmorPiercingModifier – same as MinBulletDistanceDamageModifier but for ArmorPiercing. 0.1 means the gun will have 10% of it’s original ArmorPiercing at max distance (500m in this mod)
– MaxFlyDistance – I believe bullet will be simply deleted when reaching this distance, which is 1km in vanilla. I increased it to 2 km, which means you can see the bullet flying long and far
Damage model
– ArmorPiercing – part of damage formula, compared to player/NPC Strike protection. I don’t think there is a complex simulation of penetration/non penetration. Bullet ArmorPiercing is simply divided by Strike protection of target, result value is a BaseDamage multiplier. See formula below. In vanilla AP values were… I don’t want to talk about vanilla. In this mod all values were calculated to match real life expectations: weapon with 3.6 ArmorPiercing should be effective against 3.0 Strike protection (class 3 body armor in real life), but less effective against 4.0 Strike Protection
– BaseDamage – base HP damage of a gun. Vanilla bad, mod good
– ArmorDifferenceCoefProjectiles – quite important for armor penetration simulation. It basically amplifies the difference between bullet ArmorPiercing and Strike protection
– Ammo stats are mostly self explanatory, but you can find my comments in AmmoPrototypes
THE Formula of damage in Stalker 2, probably
FinalDamageWhenArmorPenetrated = BaseDamage * ArmorPiercing/Strike * ArmorDifferenceCoefProjectiles
FinalDamageNoPenetration = BaseDamage * ArmorPiercing / Strike / ArmorDifferenceCoefProjectiles
where
BaseDamage = Gun->BaseDamage * Ammo->DamageMod
ArmorPiercing = Gun->ArmorPiercing + Ammo->ArmorPiercingMod
Strike = Strike protection stat of body armor or helmet. Yes, head and torso have separate protection. Limbs also protected by body armor, most likely
ArmorDifferenceCoefProjectiles – penetration/non penetration amplifier, separate config for player and NPC: in ObjPrototypes.cfg and GeneralNPCObjPrototypes.cfg