I've been the whole week modding weapons and all I can say is delete all BF2 parameters and start from zero, this game has the best ballistic system between all BF series but EA didn't use it. They added the same project velocity for a shotgun and for a M4 but made the shotgun projectile "die" sooner so they don't have the same reach, instead of making it drop to ground.
You will need this:
(1) http://www.hornady.com/assets/files/...Ballistics.pdf
(2) Standard Ballistics Calculator - Hornady Manufacturing, Inc
(3) https://phet.colorado.edu/en/simulat...jectile-motion
From ballistic charts you can see that a rifle like Ak47 has a velocity of around 715m/s and uses a projectile with 123g of mass. For pistols we have an average projectile velocity of 330ms and a larger projectile mass variation. We will use that later as reference, but you can take the initial muzzle velocity and energy from the first link.
Ok, so we already have the parameters necessary for the Ak47 rifle now lets find the physics:
Using standard BF2 gravity and drag (don't know exactly how this last one varies in BF2 engine but gravity seems like same as real 9.8m/s^2 for gravity = 1)
We will need to calculate all the parameter for ballistics using projectile motion with drag resistance otherwise a M24 fire in a 20 degree angle would have a reach of 65Km.
I've done a spreadsheet using Runge Kutta discretization of fourth order, but I thought would be easier to just give the flash link above that once adjusted correctly can bring the same results in a much more interactive way.
We will need that to calculate the maximum practical range of each weapon in a battle field and also the necessary time to live so the bullets don't die before it reaches the end of it's trajectory.
With your ballistics chart opened open the projectile simulator (link 3) and lets start to calculate.
For that we will take the following scenario:
Average shooting height of 1.6m in a flat field using a 2 Degree elevation angle for compensation. That would be considered for maximum practical reach of the weapon and the needed time to live for this full trajectory.
The engine ballistic itself will be given by the projectile velocity, it's bundlemesh geometry, density, shooting angle and gravity modifier used, so that simulation will be used only to find appropriate realistic time to live and damage model.
Lets start:
- Move the cannon up to 1.6m
- Select tankshell
- Input angle of 2 Degree
- Input your desired project muzzle velocity
- Set 0.07 for mass
- Set 0.012 for diameter
- Set Air Resistance enabled
- Set Drag coefficient 1.8 (Don't ask me why this number, don't know how it's converting inside the model but that is the number that brought same results as when using a real ballistic spreadsheet that I use in the army)
- Fire! check if your final height is -1.6 check the time to live and the maximum range.
2 Degree is more than enough to cover 99.5% of real world given shoots with hand weapons, and that would be a good model to represent practical maximum reach and time necessary to finish the trajectory.
let's see how it works in practical, with a handgun of vi = 330ms and a 2 degree elevation you gonna be aiming 4.3m over your target to hit it at a maximum reach of 367m. For an assault rifle, that means you will be aiming 10m higher to hit a target at 698m. So if your target it's a human body you going to be aiming 5 human body higher in a distance that most of BF2 maps don't cover, that's more than most real scopes can handle but it can happen and it's covered by some good scopes so those are good numbers for practical use with a legend skilled shooter.
So lets go back to our AK-47 now, from the simulation model you should have something close to a maximum reach of 700m with a trajectory time of 2.9s.
The 2.9s you guess where it goes, I know it's much higher than standard BF2 TL, but the whole BF2 ballistics in general is different cause it doesn't exist, basically all the weapons have the same velocity and they adjusted the reach of each one using the time to live function to make one type of bullet die before the other.
So let's put original M4 spec in the simulation and see what happen:
Velocity = 1000 / TL 0.5s at 2 degree elevation the bullet will be traveling at a 10m height in direction of the target when suddenly at 323m it will disappear. Magic bullet. The M24 sniper rifle has the same velocity as the M4 but a time to live of 1 so it dies at 500m. None would ever hit that 800m target, sorry myths!
Yeah Lets go ballistic! That means you will have more objects with physics, geometry and ai computed at the same time, exactly the kind of object that BF loves most. So if you have other different effects, rain, wreck fires, smokes all over... be sure they all are well tuned so they don't live more than necessary, at frequencies that don't make any difference.
Oh the Ak! alright alright
So for now we have:
ObjectTemplate.velocity 715
ObjectTemplate.timeToLive CRD_NONE/2.9/0/0
a maximum reach of 700m and a projectile mass of 123g
On to the Damage model
I will also divide this in tree classes to make things easier, you can do that for as many calibers you whish.
Handguns/smg silenced
Projectile mass = 40g-120g
Velocity = 250-450ms
Energy = 300-650J
Damage Normalizing Factor (DNF) = 25
Caliber 45 Auto / 9mm Luger
Maximum practical range = 360m
Assault rifles
Projectile mass = 60g-120g
Velocity= 450-750ms
Energy = 650 - 1500J
Caliber 7.62x39
Damage Normalizing Factor (DNF) = 48
Maximum practical range = 700m
Long range rifles / Sniper
Projectile mass = 130g-180g
velocity = 750-1100ms
Energy = 1500J - 5000J
Caliber 300 Win Mag / 7.62x51 DMR (308 win SF)
Damage Normalizing Factor (DNF) = 34
Maximum practical range = 890m
The Damage Normalizing Factor, were attained crossing the damage in BF2 vanilla weapons with the real weapons energy according to the chart on first link. The method used was cross interpolation using the average effective range for each class above. Those factors will translate the real weapon energy into BF2 damage at their respective effective range of use. If you decrease them, you will have more damage than vanilla and if you increase it, less.
So let's go back to the Ak47 now, we have the project velocity from ballistic chart, maximum effective range of 700m from the simulation model, 2000J of energy at the muzzle and a Normalize Factor of 46, so lets make the damage model now.
First open up your ballistic calculator (link 2), than you fill it with your projectile mass and velocity accordingly with the ballistic chart (link 1), in the case of the AK 47 that would be 715ms with a bullet mass of 123g, set the maximum range to 2.000m and calculate, you will find that the energy in the muzzle will be around 2040J and around 620J at it's maximum effective range of 700m.
So on for the AK-47:
ObjectTemplate.velocity 715
ObjectTemplate.timeToLive CRD_NONE/2.9/0/0
ObjectTemplate.hasOnTimeEffect 1
ObjectTemplate.tracerScaler 10
ObjectTemplate.maxTracerScaler 60
ObjectTemplate.minTracerScaler 1
ObjectTemplate.tracerSizeModifier 3
ObjectTemplate.tracerTemplate p_tracer_r
ObjectTemplate.tracerConvergeDistance -1
ObjectTemplate.tracerInterval 1
ObjectTemplate.minDamage 620/48 = 13 (Divide the energy at the maximum effective range by the DNF)
ObjectTemplate.damage 2000/48 = 42 (Divide the energy at the muzzle by the DNF)
ObjectTemplate.distToStartLoseDamage 0
ObjectTemplate.distToMinDamage 700 (Maximum practical reach)
Now lets compare this with the original AK47 damage model
ObjectTemplate.timeToLive CRD_NONE/0.5/0/0
ObjectTemplate.material 38
ObjectTemplate.minDamage 0.2
ObjectTemplate.damage 38
Velocity = 1000
Well I don't even know how is that supposed to work, but if you try to hit a target at 499m it will give you a damage of 0.2 and at 500m the bullet will simply die before hitting the target. If you go back and check the ballistic chart again you will see that the AK still having 800J at 500m if you are compensating your drop. That's about 40% of the original energy/damage and if we take the original 38 of damage as reference that minimum damage value should be 15 at the maximum range and not 0,2.
With the new model the Ak will have a damage of 42 in the muzzle, 33 in a 175m range, 23 in a average effective range of 350m and 13 of minimum damage at its maximum effective range of 700m.
So that way we maintain the magnitude of BF2 damage system but scaling accordingly with each weapon real ballistic energy, so each weapon will behave and variate it's damage as the real ones.
Following the same technique we will have:
9mm handgun
ObjectTemplate.timeToLive CRD_NONE/1.9/0/0
ObjectTemplate.minDamage = 334/25 =13
ObjectTemplate.damage= 500(J)/25(DNF) = 20
ObjectTemplate.distToStartLoseDamage 0
ObjectTemplate.distToMinDamage 360
ObjectTemplate.velocity 330
300 Win Sniper
ObjectTemplate.timeToLive CRD_NONE/3.25/0/0
ObjectTemplate.minDamage 1980/28 = 36
ObjectTemplate.damage = 4800/34 = 141
ObjectTemplate.distToStartLoseDamage 0
ObjectTemplate.distToMinDamage 890
ObjectTemplate.velocity 1000
The only unrealistic stuff is that we kept it at BF2 standards for damage in each weapon class so we can have the same cool gameplay. The assault rifles are a bit underpowered in relation to the handguns. And all classes are underpowered when we take the reality into consideration.
There is 2 ways to make all the classes scale the same as the real ones in the same rate. And make the model 100% realistic.
The first one is to make the handguns behave as BBs using the average DNF of 34 for all classes, so we keep the BF2 damage standards and the weapons damage effectiveness scaling almost exactly as the real ones for all the classes but with a different magnitude than reality, which is the BF2 magnitude. That way the handguns would be very weak and the assault rifles much higher than BF2 standards so it means that at 180 distance you would need 4 shots with an AK-47 assault rifle to put some one down or 15 shots with a handgun at the same range, they are both unrealistic but the rifle gets much more powerful than it is on BF2 and the handguns even weaker than they were. The second way, and the most realistic one, would be to use a DFR of 10 for all weapons and have the real energy directly translated to damage in all classes, that would mean that a handgun would need 5 shots to put some one down at 180m, an assault rifle less than 2 shots and a sniper would have you killed twice at that distance.
If you got shoot by an 9mm at 180mm once, you will probably not be able to move as before but you got 75% chance of survive and probably one of your 4 members would ger fucked up (25%), 4 shots of a 9mm even at 180m will drop you dead with 90% of certain. That is the most realistic model, but not sure if it is the most fun one. A single shot of an assault rifle at 10m distance could put you down for good. That's well aligned with the reality but not really fun for gameplay so I will keep the first model which follows BF2 characteristics for each class individually. We can't take the credit for them on the gameplay model which brought countless hours of fun for everyone that knows and tried the game.
You will need this:
(1) http://www.hornady.com/assets/files/...Ballistics.pdf
(2) Standard Ballistics Calculator - Hornady Manufacturing, Inc
(3) https://phet.colorado.edu/en/simulat...jectile-motion
From ballistic charts you can see that a rifle like Ak47 has a velocity of around 715m/s and uses a projectile with 123g of mass. For pistols we have an average projectile velocity of 330ms and a larger projectile mass variation. We will use that later as reference, but you can take the initial muzzle velocity and energy from the first link.
Ok, so we already have the parameters necessary for the Ak47 rifle now lets find the physics:
Using standard BF2 gravity and drag (don't know exactly how this last one varies in BF2 engine but gravity seems like same as real 9.8m/s^2 for gravity = 1)
We will need to calculate all the parameter for ballistics using projectile motion with drag resistance otherwise a M24 fire in a 20 degree angle would have a reach of 65Km.
I've done a spreadsheet using Runge Kutta discretization of fourth order, but I thought would be easier to just give the flash link above that once adjusted correctly can bring the same results in a much more interactive way.
We will need that to calculate the maximum practical range of each weapon in a battle field and also the necessary time to live so the bullets don't die before it reaches the end of it's trajectory.
With your ballistics chart opened open the projectile simulator (link 3) and lets start to calculate.
For that we will take the following scenario:
Average shooting height of 1.6m in a flat field using a 2 Degree elevation angle for compensation. That would be considered for maximum practical reach of the weapon and the needed time to live for this full trajectory.
The engine ballistic itself will be given by the projectile velocity, it's bundlemesh geometry, density, shooting angle and gravity modifier used, so that simulation will be used only to find appropriate realistic time to live and damage model.
Lets start:
- Move the cannon up to 1.6m
- Select tankshell
- Input angle of 2 Degree
- Input your desired project muzzle velocity
- Set 0.07 for mass
- Set 0.012 for diameter
- Set Air Resistance enabled
- Set Drag coefficient 1.8 (Don't ask me why this number, don't know how it's converting inside the model but that is the number that brought same results as when using a real ballistic spreadsheet that I use in the army)
- Fire! check if your final height is -1.6 check the time to live and the maximum range.
2 Degree is more than enough to cover 99.5% of real world given shoots with hand weapons, and that would be a good model to represent practical maximum reach and time necessary to finish the trajectory.
let's see how it works in practical, with a handgun of vi = 330ms and a 2 degree elevation you gonna be aiming 4.3m over your target to hit it at a maximum reach of 367m. For an assault rifle, that means you will be aiming 10m higher to hit a target at 698m. So if your target it's a human body you going to be aiming 5 human body higher in a distance that most of BF2 maps don't cover, that's more than most real scopes can handle but it can happen and it's covered by some good scopes so those are good numbers for practical use with a legend skilled shooter.
So lets go back to our AK-47 now, from the simulation model you should have something close to a maximum reach of 700m with a trajectory time of 2.9s.
The 2.9s you guess where it goes, I know it's much higher than standard BF2 TL, but the whole BF2 ballistics in general is different cause it doesn't exist, basically all the weapons have the same velocity and they adjusted the reach of each one using the time to live function to make one type of bullet die before the other.
So let's put original M4 spec in the simulation and see what happen:
Velocity = 1000 / TL 0.5s at 2 degree elevation the bullet will be traveling at a 10m height in direction of the target when suddenly at 323m it will disappear. Magic bullet. The M24 sniper rifle has the same velocity as the M4 but a time to live of 1 so it dies at 500m. None would ever hit that 800m target, sorry myths!
Yeah Lets go ballistic! That means you will have more objects with physics, geometry and ai computed at the same time, exactly the kind of object that BF loves most. So if you have other different effects, rain, wreck fires, smokes all over... be sure they all are well tuned so they don't live more than necessary, at frequencies that don't make any difference.
Oh the Ak! alright alright
So for now we have:
ObjectTemplate.velocity 715
ObjectTemplate.timeToLive CRD_NONE/2.9/0/0
a maximum reach of 700m and a projectile mass of 123g
On to the Damage model
I will also divide this in tree classes to make things easier, you can do that for as many calibers you whish.
Handguns/smg silenced
Projectile mass = 40g-120g
Velocity = 250-450ms
Energy = 300-650J
Damage Normalizing Factor (DNF) = 25
Caliber 45 Auto / 9mm Luger
Maximum practical range = 360m
Assault rifles
Projectile mass = 60g-120g
Velocity= 450-750ms
Energy = 650 - 1500J
Caliber 7.62x39
Damage Normalizing Factor (DNF) = 48
Maximum practical range = 700m
Long range rifles / Sniper
Projectile mass = 130g-180g
velocity = 750-1100ms
Energy = 1500J - 5000J
Caliber 300 Win Mag / 7.62x51 DMR (308 win SF)
Damage Normalizing Factor (DNF) = 34
Maximum practical range = 890m
The Damage Normalizing Factor, were attained crossing the damage in BF2 vanilla weapons with the real weapons energy according to the chart on first link. The method used was cross interpolation using the average effective range for each class above. Those factors will translate the real weapon energy into BF2 damage at their respective effective range of use. If you decrease them, you will have more damage than vanilla and if you increase it, less.
So let's go back to the Ak47 now, we have the project velocity from ballistic chart, maximum effective range of 700m from the simulation model, 2000J of energy at the muzzle and a Normalize Factor of 46, so lets make the damage model now.
First open up your ballistic calculator (link 2), than you fill it with your projectile mass and velocity accordingly with the ballistic chart (link 1), in the case of the AK 47 that would be 715ms with a bullet mass of 123g, set the maximum range to 2.000m and calculate, you will find that the energy in the muzzle will be around 2040J and around 620J at it's maximum effective range of 700m.
So on for the AK-47:
ObjectTemplate.velocity 715
ObjectTemplate.timeToLive CRD_NONE/2.9/0/0
ObjectTemplate.hasOnTimeEffect 1
ObjectTemplate.tracerScaler 10
ObjectTemplate.maxTracerScaler 60
ObjectTemplate.minTracerScaler 1
ObjectTemplate.tracerSizeModifier 3
ObjectTemplate.tracerTemplate p_tracer_r
ObjectTemplate.tracerConvergeDistance -1
ObjectTemplate.tracerInterval 1
ObjectTemplate.minDamage 620/48 = 13 (Divide the energy at the maximum effective range by the DNF)
ObjectTemplate.damage 2000/48 = 42 (Divide the energy at the muzzle by the DNF)
ObjectTemplate.distToStartLoseDamage 0
ObjectTemplate.distToMinDamage 700 (Maximum practical reach)
Now lets compare this with the original AK47 damage model
ObjectTemplate.timeToLive CRD_NONE/0.5/0/0
ObjectTemplate.material 38
ObjectTemplate.minDamage 0.2
ObjectTemplate.damage 38
Velocity = 1000
Well I don't even know how is that supposed to work, but if you try to hit a target at 499m it will give you a damage of 0.2 and at 500m the bullet will simply die before hitting the target. If you go back and check the ballistic chart again you will see that the AK still having 800J at 500m if you are compensating your drop. That's about 40% of the original energy/damage and if we take the original 38 of damage as reference that minimum damage value should be 15 at the maximum range and not 0,2.
With the new model the Ak will have a damage of 42 in the muzzle, 33 in a 175m range, 23 in a average effective range of 350m and 13 of minimum damage at its maximum effective range of 700m.
So that way we maintain the magnitude of BF2 damage system but scaling accordingly with each weapon real ballistic energy, so each weapon will behave and variate it's damage as the real ones.
Following the same technique we will have:
9mm handgun
ObjectTemplate.timeToLive CRD_NONE/1.9/0/0
ObjectTemplate.minDamage = 334/25 =13
ObjectTemplate.damage= 500(J)/25(DNF) = 20
ObjectTemplate.distToStartLoseDamage 0
ObjectTemplate.distToMinDamage 360
ObjectTemplate.velocity 330
300 Win Sniper
ObjectTemplate.timeToLive CRD_NONE/3.25/0/0
ObjectTemplate.minDamage 1980/28 = 36
ObjectTemplate.damage = 4800/34 = 141
ObjectTemplate.distToStartLoseDamage 0
ObjectTemplate.distToMinDamage 890
ObjectTemplate.velocity 1000
The only unrealistic stuff is that we kept it at BF2 standards for damage in each weapon class so we can have the same cool gameplay. The assault rifles are a bit underpowered in relation to the handguns. And all classes are underpowered when we take the reality into consideration.
There is 2 ways to make all the classes scale the same as the real ones in the same rate. And make the model 100% realistic.
The first one is to make the handguns behave as BBs using the average DNF of 34 for all classes, so we keep the BF2 damage standards and the weapons damage effectiveness scaling almost exactly as the real ones for all the classes but with a different magnitude than reality, which is the BF2 magnitude. That way the handguns would be very weak and the assault rifles much higher than BF2 standards so it means that at 180 distance you would need 4 shots with an AK-47 assault rifle to put some one down or 15 shots with a handgun at the same range, they are both unrealistic but the rifle gets much more powerful than it is on BF2 and the handguns even weaker than they were. The second way, and the most realistic one, would be to use a DFR of 10 for all weapons and have the real energy directly translated to damage in all classes, that would mean that a handgun would need 5 shots to put some one down at 180m, an assault rifle less than 2 shots and a sniper would have you killed twice at that distance.
If you got shoot by an 9mm at 180mm once, you will probably not be able to move as before but you got 75% chance of survive and probably one of your 4 members would ger fucked up (25%), 4 shots of a 9mm even at 180m will drop you dead with 90% of certain. That is the most realistic model, but not sure if it is the most fun one. A single shot of an assault rifle at 10m distance could put you down for good. That's well aligned with the reality but not really fun for gameplay so I will keep the first model which follows BF2 characteristics for each class individually. We can't take the credit for them on the gameplay model which brought countless hours of fun for everyone that knows and tried the game.