diff --git a/ace_advanced_ballistics.dll b/ace_advanced_ballistics.dll index 9937da84c0..43698cf95b 100644 Binary files a/ace_advanced_ballistics.dll and b/ace_advanced_ballistics.dll differ diff --git a/ace_advanced_ballistics_x64.dll b/ace_advanced_ballistics_x64.dll index dc04267bc5..83858d86e3 100644 Binary files a/ace_advanced_ballistics_x64.dll and b/ace_advanced_ballistics_x64.dll differ diff --git a/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf b/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf index fe49dcf1af..6ec9161099 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf @@ -15,8 +15,6 @@ */ #include "script_component.hpp" -private _aceTimeSecond = floor CBA_missionTime; - { _x params ["_bullet","_caliber","_bulletTraceVisible","_index"]; @@ -33,7 +31,7 @@ private _aceTimeSecond = floor CBA_missionTime; drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.02*_caliber,0.01*_caliber],[[0,0,0,0.65],[0,0,0,0.2]],[1,0],0,0,"","",""]; }; - _bullet setVelocity (_bulletVelocity vectorAdd (parseSimpleArray ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, _aceTimeSecond, CBA_missionTime - _aceTimeSecond]))); + _bullet setVelocity (_bulletVelocity vectorAdd (parseSimpleArray ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, CBA_missionTime toFixed 6]))); }; nil } count +GVAR(allBullets); diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index a4f55adc3d..344accfa6d 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -20,7 +20,7 @@ TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); // Parameterization -private ["_abort", "_AmmoCacheEntry", "_WeaponCacheEntry", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_bulletMass", "_bulletLength", "_muzzleVelocity", "_muzzleVelocityShift", "_bulletVelocity", "_bulletLength", "_barrelTwist", "_stabilityFactor", "_aceTimeSecond", "_barrelVelocityShift", "_ammoTemperatureVelocityShift"]; +private ["_abort", "_AmmoCacheEntry", "_WeaponCacheEntry", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_bulletMass", "_bulletLength", "_muzzleVelocity", "_muzzleVelocityShift", "_bulletVelocity", "_bulletLength", "_barrelTwist", "_stabilityFactor", "_barrelVelocityShift", "_ammoTemperatureVelocityShift"]; _abort = false; @@ -113,8 +113,7 @@ if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) th GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000; -_aceTimeSecond = floor CBA_missionTime; -"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _projectile, EGVAR(common,mapLatitude), EGVAR(weather,currentTemperature), EGVAR(common,mapAltitude), EGVAR(weather,currentHumidity), overcast, _aceTimeSecond, CBA_missionTime - _aceTimeSecond]; +"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _projectile, EGVAR(common,mapLatitude), EGVAR(weather,currentTemperature), EGVAR(common,mapAltitude), EGVAR(weather,currentHumidity), overcast, CBA_missionTime toFixed 6]; GVAR(allBullets) pushBack [_projectile, _caliber, _bulletTraceVisible, GVAR(currentbulletID)]; diff --git a/addons/atragmx/functions/fnc_calculate_distance_at_velocity.sqf b/addons/atragmx/functions/fnc_calculate_distance_at_velocity.sqf index 450ecc8ab3..cbb78df8e7 100644 --- a/addons/atragmx/functions/fnc_calculate_distance_at_velocity.sqf +++ b/addons/atragmx/functions/fnc_calculate_distance_at_velocity.sqf @@ -29,7 +29,8 @@ private _distance = 0; while {_velocity > _thresholdVelocity} do { private _bc = GVAR(targetSolutionInput) select 14; private _dragModel = GVAR(targetSolutionInput) select 15; - private _drag = parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _velocity])); + private _temperature = GVAR(targetSolutionInput) select 5; + private _drag = parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3:%4", _dragModel, _bc, _velocity, _temperature])); _distance = _distance + _velocity * __DELTA_T; _velocity = _velocity - (_drag * __DELTA_T); }; diff --git a/addons/atragmx/functions/fnc_calculate_solution.sqf b/addons/atragmx/functions/fnc_calculate_solution.sqf index 836d785242..f2cf7e191e 100644 --- a/addons/atragmx/functions/fnc_calculate_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_solution.sqf @@ -118,7 +118,7 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { _trueSpeed = vectorMagnitude _trueVelocity; if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { - private _drag = parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed])); + private _drag = parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3:%4", _dragModel, _bc, _trueSpeed, _temperature])); _bulletAccel = (vectorNormalized _trueVelocity) vectorMultiply (-1 * _drag); } else { _bulletAccel = _trueVelocity vectorMultiply (_trueSpeed * _airFriction); diff --git a/addons/atragmx/functions/fnc_init.sqf b/addons/atragmx/functions/fnc_init.sqf index 48401acb4c..a574e946f8 100644 --- a/addons/atragmx/functions/fnc_init.sqf +++ b/addons/atragmx/functions/fnc_init.sqf @@ -51,7 +51,7 @@ GVAR(atmosphereModeTBH) = true; GVAR(altitude) = 0; GVAR(temperature) = 15; GVAR(barometricPressure) = 1013.25; -GVAR(relativeHumidity) = 0.5; +GVAR(relativeHumidity) = 0.0; GVAR(latitude) = [38, 38, 38, 38]; GVAR(directionOfFire) = [0, 0, 0, 0]; diff --git a/addons/atragmx/functions/fnc_initGunList.sqf b/addons/atragmx/functions/fnc_initGunList.sqf index 69efdc68ef..13111617e2 100644 --- a/addons/atragmx/functions/fnc_initGunList.sqf +++ b/addons/atragmx/functions/fnc_initGunList.sqf @@ -34,49 +34,49 @@ if (_resetGunList) then { // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model, Muzzle Velocity vs. Temperature Interpolation, C1 Ballistic Coefficient vs. Distance Interpolation, Persistent GVAR(gunList) = [["12.7x108mm" , 812, 100, 0.0666557, -0.00063800, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" , [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["12.7x99mm AMAX" , 852, 100, 0.0615965, -0.00036645, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" , [[-15,833],[0,840],[10,847],[15,852],[25,866],[30,875],[35,886]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["12.7x99mm" , 892, 100, 0.0588284, -0.00057503, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" , [[-15,873],[0,880],[10,887],[15,892],[25,906],[30,915],[35,926]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["12.7x99mm AMAX" , 852, 100, 0.0615965, -0.00037397, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" , [[-15,833],[0,840],[10,847],[15,852],[25,866],[30,875],[35,886]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["12.7x99mm" , 892, 100, 0.0588284, -0.00058679, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" , [[-15,873],[0,880],[10,887],[15,892],[25,906],[30,915],[35,926]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["12.7x54mm" , 299, 100, 0.3406920, -0.00019268, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" , [[-15,297],[0,298],[10,299],[15,299],[25,301],[30,302],[35,303]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["12.7x54mm" , 299, 100, 0.3406920, -0.00019568, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" , [[-15,297],[0,298],[10,299],[15,299],[25,301],[30,302],[35,303]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".50 Beowulf" , 562, 100, 0.1262000, -0.00202645, 3.81, 0, 2, 10, 120, 0, 0, 21.71, 12.7, 50.80, 0.210, 1, "ASM" , [[-15,560],[0,561],[10,562],[15,562],[25,564],[30,565],[35,566]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".50 Beowulf" , 562, 100, 0.1262000, -0.00205896, 3.81, 0, 2, 10, 120, 0, 0, 21.71, 12.7, 50.80, 0.210, 1, "ASM" , [[-15,560],[0,561],[10,562],[15,562],[25,564],[30,565],[35,566]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".408 CheyTac 305gr", 1059, 100, 0.0482146, -0.00063655, 3.81, 0, 2, 10, 120, 0, 0, 19.76, 10.4, 33.02, 0.569, 1, "ICAO", [[-15,1040],[0,1047],[10,1054],[15,1059],[25,1073],[30,1082],[35,1093]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".408 CheyTac 419gr", 859, 100, 0.0611842, -0.00044958, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.866, 1, "ICAO", [[-15,840],[0,847],[10,854],[15,859],[25,873],[30,882],[35,893]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".408 CheyTac 305gr", 1059, 100, 0.0482146, -0.00065414, 3.81, 0, 2, 10, 120, 0, 0, 19.76, 10.4, 33.02, 0.569, 1, "ICAO", [[-15,1040],[0,1047],[10,1054],[15,1059],[25,1073],[30,1082],[35,1093]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".408 CheyTac 419gr", 859, 100, 0.0611842, -0.00046249, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.866, 1, "ICAO", [[-15,840],[0,847],[10,854],[15,859],[25,873],[30,882],[35,893]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["9.3×64mm" , 862, 100, 0.0627652, -0.00108571, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" , [[-15,843],[0,850],[10,857],[15,862],[25,876],[30,885],[35,896]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["9.3×64mm" , 862, 100, 0.0627652, -0.00110727, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" , [[-15,843],[0,850],[10,857],[15,862],[25,876],[30,885],[35,896]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".338LM 250gr" , 872, 100, 0.0604821, -0.00059133, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.645, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".338LM 300gr" , 792, 100, 0.0685883, -0.00052190, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.759, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".338LM API526" , 872, 100, 0.0602535, -0.00069611, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.580, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".338LM 250gr" , 872, 100, 0.0604821, -0.00060841, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.645, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".338LM 300gr" , 792, 100, 0.0685883, -0.00053585, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.759, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".338LM API526" , 872, 100, 0.0602535, -0.00069220, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.580, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".300WM Mk248 Mod0" , 857, 100, 0.0621425, -0.00070530, 3.81, 0, 2, 10, 120, 0, 0, 12.31, 7.80, 25.40, 0.537, 1, "ICAO", [[-15,838],[0,845],[10,852],[15,857],[25,871],[30,880],[35,891]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".300WM Mk248 Mod1" , 839, 100, 0.0637038, -0.00061188, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.619, 1, "ICAO", [[-15,820],[0,827],[10,834],[15,839],[25,853],[30,862],[35,873]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".300WM Berger OTM" , 792, 100, 0.0686968, -0.00053733, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.715, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".300WM Mk248 Mod0" , 857, 100, 0.0621425, -0.00072468, 3.81, 0, 2, 10, 120, 0, 0, 12.31, 7.80, 25.40, 0.537, 1, "ICAO", [[-15,838],[0,845],[10,852],[15,857],[25,871],[30,880],[35,891]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".300WM Mk248 Mod1" , 839, 100, 0.0637038, -0.00063027, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.619, 1, "ICAO", [[-15,820],[0,827],[10,834],[15,839],[25,853],[30,862],[35,873]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".300WM Berger OTM" , 792, 100, 0.0686968, -0.00055262, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.715, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x54mmR" , 812, 100, 0.0678441, -0.00100023, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO", [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x54mmR" , 812, 100, 0.0678441, -0.00102329, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO", [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm M80" , 802, 100, 0.0690229, -0.00100957, 3.81, 0, 2, 10, 120, 0, 0, 9.461, 7.82, 25.40, 0.398, 1, "ICAO", [[-15,783],[0,790],[10,797],[15,802],[25,816],[30,825],[35,836]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm M118LR" , 757, 100, 0.0739989, -0.00082828, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.482, 1, "ICAO", [[-15,738],[0,745],[10,752],[15,757],[25,771],[30,780],[35,791]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm Mk316" , 781, 100, 0.0709422, -0.00082029, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.483, 1, "ICAO", [[-15,777],[0,778],[10,779],[15,781],[25,783],[30,785],[35,787]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm Mk319" , 900, 100, 0.0593025, -0.00102338, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO", [[-15,898],[0,899],[10,900],[15,900],[25,902],[30,903],[35,904]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm M993" , 912, 100, 0.0585007, -0.00107148, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO", [[-15,893],[0,900],[10,907],[15,912],[25,926],[30,935],[35,946]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm Subsonic", 314, 100, 0.3168140, -0.00049899, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.502, 1, "ICAO", [[-15,312],[0,313],[10,314],[15,314],[25,316],[30,317],[35,318]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm M80" , 802, 100, 0.0690229, -0.00103711, 3.81, 0, 2, 10, 120, 0, 0, 9.461, 7.82, 25.40, 0.398, 1, "ICAO", [[-15,783],[0,790],[10,797],[15,802],[25,816],[30,825],[35,836]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm M118LR" , 757, 100, 0.0739989, -0.00085157, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.482, 1, "ICAO", [[-15,738],[0,745],[10,752],[15,757],[25,771],[30,780],[35,791]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm Mk316" , 781, 100, 0.0709422, -0.00084311, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.483, 1, "ICAO", [[-15,777],[0,778],[10,779],[15,781],[25,783],[30,785],[35,787]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm Mk319" , 900, 100, 0.0593025, -0.00104515, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO", [[-15,898],[0,899],[10,900],[15,900],[25,902],[30,903],[35,904]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm M993" , 912, 100, 0.0585007, -0.00109390, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO", [[-15,893],[0,900],[10,907],[15,912],[25,926],[30,935],[35,946]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm Subsonic", 314, 100, 0.3168140, -0.00060194, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.502, 1, "ICAO", [[-15,312],[0,313],[10,314],[15,314],[25,316],[30,317],[35,318]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x39mm" , 708, 100, 0.0846559, -0.00151621, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 7.82, 25.40, 0.275, 1, "ICAO", [[-15,689],[0,696],[10,703],[15,708],[25,722],[30,731],[35,742]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x39mm" , 708, 100, 0.0846559, -0.00154815, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 7.82, 25.40, 0.275, 1, "ICAO", [[-15,689],[0,696],[10,703],[15,708],[25,722],[30,731],[35,742]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["6.5x39mm" , 766, 100, 0.0725986, -0.00075308, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.524, 1, "ICAO", [[-15,747],[0,754],[10,761],[15,766],[25,780],[30,789],[35,800]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["6.5x47mm Lapua" , 767, 100, 0.0722256, -0.00067037, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.577, 1, "ICAO", [[-15,748],[0,755],[10,762],[15,767],[25,781],[30,790],[35,801]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["6.5mm Creedmor" , 822, 100, 0.0655022, -0.00060887, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.632, 1, "ICAO", [[-15,803],[0,810],[10,817],[15,822],[25,836],[30,845],[35,856]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["6.5x39mm" , 766, 100, 0.0725986, -0.00077363, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.524, 1, "ICAO", [[-15,747],[0,754],[10,761],[15,766],[25,780],[30,789],[35,800]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["6.5x47mm Lapua" , 767, 100, 0.0722256, -0.00069003, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.577, 1, "ICAO", [[-15,748],[0,755],[10,762],[15,767],[25,781],[30,790],[35,801]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["6.5mm Creedmor" , 822, 100, 0.0655022, -0.00062437, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.632, 1, "ICAO", [[-15,803],[0,810],[10,817],[15,822],[25,836],[30,845],[35,856]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["5.8x42mm DBP87" , 942, 100, 0.0566639, -0.00117956, 3.81, 0, 2, 10, 120, 0, 0, 4.150, 5.99, 24.40, 0.313, 1, "ICAO", [[-15,923],[0,930],[10,937],[15,942],[25,956],[30,965],[35,976]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["5.8x42mm DBP87" , 942, 100, 0.0566639, -0.00121087, 3.81, 0, 2, 10, 120, 0, 0, 4.150, 5.99, 24.40, 0.313, 1, "ICAO", [[-15,923],[0,930],[10,937],[15,942],[25,956],[30,965],[35,976]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["5.56x45mm M855" , 862, 100, 0.0635456, -0.00126466, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.302, 1, "ASM" , [[-15,843],[0,849],[10,857],[15,862],[25,876],[30,885],[35,898]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["5.56x45mm Mk262" , 812, 100, 0.0682606, -0.00109563, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" , [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["5.56x45mm Mk318" , 872, 100, 0.0624569, -0.00123318, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" , [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["5.56x45mm M995" , 861, 100, 0.0635355, -0.00123272, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" , [[-15,842],[0,849],[10,856],[15,861],[25,875],[30,884],[35,895]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["5.56x45mm M855" , 862, 100, 0.0635456, -0.00130094, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.302, 1, "ASM" , [[-15,843],[0,849],[10,857],[15,862],[25,876],[30,885],[35,898]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["5.56x45mm Mk262" , 812, 100, 0.0682606, -0.00111805, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" , [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["5.56x45mm Mk318" , 872, 100, 0.0624569, -0.00125880, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" , [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["5.56x45mm M995" , 861, 100, 0.0635355, -0.00126182, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" , [[-15,842],[0,849],[10,856],[15,861],[25,875],[30,884],[35,895]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["5.45x39mm 7N6M" , 727, 100, 0.0801269, -0.00116278, 3.81, 0, 2, 10, 120, 0, 0, 3.428, 5.59, 16.00, 0.336, 1, "ICAO", [[-15,708],[0,715],[10,722],[15,727],[25,741],[30,750],[35,761]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true]]; + ["5.45x39mm 7N6M" , 727, 100, 0.0801269, -0.00119458, 3.81, 0, 2, 10, 120, 0, 0, 3.428, 5.59, 16.00, 0.336, 1, "ICAO", [[-15,708],[0,715],[10,722],[15,727],[25,741],[30,750],[35,761]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true]]; [] call FUNC(clear_user_data); profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)]; diff --git a/addons/atragmx/functions/fnc_restore_atmo_default.sqf b/addons/atragmx/functions/fnc_restore_atmo_default.sqf index 560c0da875..d644f81630 100644 --- a/addons/atragmx/functions/fnc_restore_atmo_default.sqf +++ b/addons/atragmx/functions/fnc_restore_atmo_default.sqf @@ -19,7 +19,7 @@ GVAR(atmosphereModeTBH) = true; GVAR(altitude) = 0; GVAR(temperature) = 15; GVAR(barometricPressure) = 1013.25; -GVAR(relativeHumidity) = 0.5; +GVAR(relativeHumidity) = 0.0; [] call FUNC(update_atmo_selection); [] call FUNC(update_atmosphere); diff --git a/addons/atragmx/functions/fnc_restore_user_data.sqf b/addons/atragmx/functions/fnc_restore_user_data.sqf index cf7f2e2bef..a90c537f91 100644 --- a/addons/atragmx/functions/fnc_restore_user_data.sqf +++ b/addons/atragmx/functions/fnc_restore_user_data.sqf @@ -23,7 +23,7 @@ GVAR(atmosphereModeTBH) = profileNamespace getVariable ["ACE_ATragMX_atmosphereM GVAR(altitude) = -1000 max (profileNamespace getVariable ["ACE_ATragMX_altitude", 0]) min 20000; GVAR(temperature) = -50 max (profileNamespace getVariable ["ACE_ATragMX_temperature", 15]) min 160; GVAR(barometricPressure) = 340 max (profileNamespace getVariable ["ACE_ATragMX_barometricPressure", 1013.25]) min 1350; -GVAR(relativeHumidity) = 0 max (profileNamespace getVariable ["ACE_ATragMX_relativeHumidity", 0.5]) min 1; +GVAR(relativeHumidity) = 0 max (profileNamespace getVariable ["ACE_ATragMX_relativeHumidity", 0.0]) min 1; GVAR(showWind2) = profileNamespace getVariable ["ACE_ATragMX_showWind2", false]; GVAR(showCoriolis) = profileNamespace getVariable ["ACE_ATragMX_showCoriolis", true]; diff --git a/addons/atragmx/script_component.hpp b/addons/atragmx/script_component.hpp index 8ebc8b445f..73ca9507f0 100644 --- a/addons/atragmx/script_component.hpp +++ b/addons/atragmx/script_component.hpp @@ -16,4 +16,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define ATRAGMX_PROFILE_NAMESPACE_VERSION 2.0 +#define ATRAGMX_PROFILE_NAMESPACE_VERSION 2.1 diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 795a84087d..99f84c5e01 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -7,7 +7,7 @@ class CfgAmmo { }; class B_556x45_Ball : BulletBase { - airFriction=-0.00126466; + airFriction=-0.00130094; tracerScale = 1; tracerStartTime=0.073; // M856 tracer burns out to 800m tracerEndTime=1.57123; // Time in seconds calculated with ballistics calculator @@ -23,7 +23,7 @@ class CfgAmmo { ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class ACE_556x45_Ball_Mk262 : B_556x45_Ball { - airFriction=-0.00109563; + airFriction=-0.00111805; ACE_caliber=5.69; ACE_bulletLength=23.012; ACE_bulletMass=4.9896; @@ -36,7 +36,7 @@ class CfgAmmo { ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0}; }; class ACE_556x45_Ball_Mk318 : B_556x45_Ball { - airFriction=-0.00123318; + airFriction=-0.0012588; ACE_caliber=5.69; ACE_bulletLength=23.012; ACE_bulletMass=4.0176; @@ -49,7 +49,7 @@ class CfgAmmo { ACE_barrelLengths[]={254.0, 393.7, 508.0}; }; class ACE_556x45_Ball_M995_AP : B_556x45_Ball { - airFriction=-0.00123272; + airFriction=-0.00126182; caliber=1.6; ACE_caliber=5.69; ACE_bulletLength=23.012; @@ -67,7 +67,7 @@ class CfgAmmo { nvgOnly = 1; }; class B_545x39_Ball_F : BulletBase { - airFriction=-0.00116278; + airFriction=-0.00119458; ACE_caliber=5.588; ACE_bulletLength=21.59; ACE_bulletMass=3.42792; @@ -83,7 +83,7 @@ class CfgAmmo { tracerScale = 0.5; }; class B_580x42_Ball_F: BulletBase { - airFriction=-0.00117956; + airFriction=-0.00121087; ACE_caliber=5.9944; ACE_bulletLength=24.2; ACE_bulletMass=4.15; @@ -96,7 +96,7 @@ class CfgAmmo { ACE_barrelLengths[]={369.0, 463.0, 600.0}; }; class B_65x39_Caseless : BulletBase { - airFriction=-0.00075308; + airFriction=-0.00077363; tracerScale = 1.1; //1.0; ACE_caliber=6.706; ACE_bulletLength=32.893; @@ -118,7 +118,7 @@ class CfgAmmo { nvgOnly = 1; }; class ACE_65x47_Ball_Scenar: B_65x39_Caseless { - airFriction=-0.00067037; + airFriction=-0.00069003; caliber=0.9; ACE_caliber=6.706; ACE_bulletLength=34.646; @@ -132,7 +132,7 @@ class CfgAmmo { ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class ACE_65_Creedmor_Ball: B_65x39_Caseless { - airFriction=-0.00060887; + airFriction=-0.00062437; caliber=1.1; ACE_caliber=6.706; ACE_bulletLength=36.22; @@ -150,7 +150,7 @@ class CfgAmmo { tracerScale = 1.1; //1.0; }; class B_762x51_Ball : BulletBase { - airFriction=-0.00100957; + airFriction=-0.00103711; tracerScale = 1.2; //0.6; tracerStartTime=0.073; // Based on the British L5A1 which burns out to 1000m tracerEndTime=2.15957; // Time in seconds calculated with ballistics calculator @@ -170,7 +170,7 @@ class CfgAmmo { nvgOnly = 1; }; class ACE_762x51_Ball_M118LR : B_762x51_Ball { - airFriction=-0.00082828; + airFriction=-0.00085157; caliber=1.8; hit=16; typicalSpeed=790; @@ -186,7 +186,7 @@ class CfgAmmo { ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x51_Ball_Mk316_Mod_0 : B_762x51_Ball { - airFriction=-0.00082029; + airFriction=-0.00084311; caliber=1.8; hit=16; typicalSpeed=790; @@ -202,7 +202,7 @@ class CfgAmmo { ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x51_Ball_Mk319_Mod_0 : B_762x51_Ball { - airFriction=-0.00102338; + airFriction=-0.00104515; caliber=1.5; hit=14; typicalSpeed=900; @@ -218,7 +218,7 @@ class CfgAmmo { ACE_barrelLengths[]={330.2, 406.4, 508.0}; }; class ACE_762x51_Ball_M993_AP : B_762x51_Ball { - airFriction=-0.00107148; + airFriction=-0.0010939; caliber=2.2; hit=11; typicalSpeed=910; @@ -234,7 +234,7 @@ class CfgAmmo { ACE_barrelLengths[]={330.2, 406.4, 508.0}; }; class ACE_762x51_Ball_Subsonic : B_762x51_Ball { - airFriction=-0.00049899; + airFriction=-0.00060194; caliber=1; hit=6; typicalSpeed=320; @@ -250,7 +250,7 @@ class CfgAmmo { ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball { - airFriction=-0.00070530; + airFriction=-0.00072468; caliber=1.8; hit=17; typicalSpeed=900; @@ -266,7 +266,7 @@ class CfgAmmo { ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class ACE_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball { - airFriction=-0.00061188; + airFriction=-0.00063027; caliber=1.9; hit=18; typicalSpeed=867; @@ -282,7 +282,7 @@ class CfgAmmo { ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class ACE_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball { - airFriction=-0.00053733; + airFriction=-0.00055262; caliber=2.0; hit=19; typicalSpeed=853; @@ -298,7 +298,7 @@ class CfgAmmo { ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class B_762x54_Ball: B_762x51_Ball { - airFriction=-0.00100023; + airFriction=-0.00102329; ACE_caliber=7.925; ACE_bulletLength=28.956; ACE_bulletMass=9.8496; @@ -312,7 +312,7 @@ class CfgAmmo { }; class B_762x54_Tracer_Green; class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green { - airFriction=-0.00103989; + airFriction=-0.00106104; typicalSpeed=800; tracerStartTime=0.073; // Based on the 7T2 which burns three seconds tracerEndTime=3; @@ -328,7 +328,7 @@ class CfgAmmo { ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class B_762x39_Ball_F : BulletBase { - airFriction=-0.00151621; + airFriction=-0.00154815; ACE_caliber=7.823; ACE_bulletLength=28.956; ACE_bulletMass=7.9704; @@ -341,7 +341,7 @@ class CfgAmmo { ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_9x21_Ball : BulletBase { - airFriction=-0.00208292; + airFriction=-0.00211064; tracerScale = 0.5; ACE_caliber=9.042; ACE_bulletLength=15.494; @@ -358,7 +358,7 @@ class CfgAmmo { tracerScale = 0.5; }; class ACE_9x19_Ball : B_9x21_Ball { - airFriction=-0.0019835; + airFriction=-0.00201185; ACE_caliber=9.017; ACE_bulletLength=15.494; ACE_bulletMass=8.0352; @@ -371,7 +371,7 @@ class CfgAmmo { ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class B_93x64_Ball : BulletBase { - airFriction=-0.00108571; + airFriction=-0.00110727; ACE_caliber=9.296; ACE_bulletLength=34.29; ACE_bulletMass=14.904; @@ -385,7 +385,7 @@ class CfgAmmo { }; class B_408_Ball : BulletBase { timeToLive=10; - airFriction=-0.00044958; + airFriction=-0.00046249; tracerScale = 1.3; ACE_caliber=10.363; ACE_bulletLength=55.1942; @@ -401,7 +401,7 @@ class CfgAmmo { }; class ACE_408_Ball : BulletBase { timeToLive=10; - airFriction=-0.00063655; + airFriction=-0.00065414; typicalSpeed=1067; tracerScale = 1.3; ACE_caliber=10.363; @@ -418,7 +418,7 @@ class CfgAmmo { }; class B_338_Ball : BulletBase { timeToLive=10; - airFriction=-0.00059133; + airFriction=-0.00060841; ACE_caliber=8.585; ACE_bulletLength=39.573; ACE_bulletMass=16.2; @@ -431,7 +431,7 @@ class CfgAmmo { ACE_barrelLengths[]={508.0, 660.4, 711.2}; }; class B_338_NM_Ball : BulletBase { - airFriction=-0.00052201; + airFriction=-0.00053639; ACE_caliber=8.585; ACE_bulletLength=43.18; ACE_bulletMass=19.44; @@ -445,7 +445,7 @@ class CfgAmmo { }; class ACE_338_Ball : B_338_Ball { timeToLive=10; - airFriction=-0.00052190; + airFriction=-0.00053585; typicalSpeed=826; ACE_caliber=8.585; ACE_bulletLength=43.18; @@ -460,7 +460,7 @@ class CfgAmmo { }; class ACE_338_Ball_API526 : B_338_Ball { timeToLive=10; - airFriction=-0.00069611; + airFriction=-0.0006922; caliber=2.8; typicalSpeed=895; ACE_caliber=8.585; @@ -478,7 +478,7 @@ class CfgAmmo { tracerScale = 1.3; //1.2; }; class B_127x54_Ball : BulletBase { - airFriction=-0.00019268; + airFriction=-0.00019568; tracerScale = 1.3;// ACE_caliber=12.954; ACE_bulletLength=64.516; @@ -493,7 +493,7 @@ class CfgAmmo { }; class B_127x99_Ball : BulletBase { timeToLive=10; - airFriction=-0.00057503; + airFriction=-0.00058679; tracerScale = 1.3; //1.2; ACE_caliber=12.954; ACE_bulletLength=58.674; @@ -508,7 +508,7 @@ class CfgAmmo { }; class ACE_127x99_API : B_127x99_Ball { timeToLive=10; - airFriction=-0.00057503; + airFriction=-0.00058679; tracerScale = 1.3;// hit=25; caliber=4.0; @@ -525,7 +525,7 @@ class CfgAmmo { }; class ACE_127x99_Ball_AMAX : B_127x99_Ball { timeToLive=10; - airFriction=-0.00036645; + airFriction=-0.00037397; caliber=3.0; ACE_caliber=12.954; ACE_bulletLength=64.516; @@ -540,7 +540,7 @@ class CfgAmmo { }; class B_127x108_Ball : BulletBase { timeToLive=10; - airFriction=-0.00063800; + airFriction=-0.00065098; tracerScale = 1.3; //1.5; ACE_caliber=12.979; ACE_bulletLength=64.008; @@ -554,7 +554,7 @@ class CfgAmmo { ACE_barrelLengths[]={728.98}; }; class B_45ACP_Ball : BulletBase { - airFriction=-0.00081221; + airFriction=-0.00082143; tracerScale = 0.6; ACE_caliber=11.481; ACE_bulletLength=17.272; @@ -568,7 +568,7 @@ class CfgAmmo { ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class B_50BW_Ball_F : BulletBase { - airFriction=-0.00202645; + airFriction=-0.00205896; ACE_caliber=12.7; ACE_bulletLength=24.13; ACE_bulletMass=21.7076; diff --git a/addons/rangecard/functions/fnc_calculateRangeCard.sqf b/addons/rangecard/functions/fnc_calculateRangeCard.sqf index 67952f27f4..71d35b5c96 100644 --- a/addons/rangecard/functions/fnc_calculateRangeCard.sqf +++ b/addons/rangecard/functions/fnc_calculateRangeCard.sqf @@ -103,7 +103,7 @@ while {_TOF < 6 && (_bulletPos select 1) < _targetRange} do { _trueSpeed = vectorMagnitude _trueVelocity; if (_useABConfig) then { - private _drag = parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed])); + private _drag = parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3:%4", _dragModel, _bc, _trueSpeed, _temperature])); _bulletAccel = (vectorNormalized _trueVelocity) vectorMultiply (-1 * _drag); } else { _bulletAccel = _trueVelocity vectorMultiply (_trueSpeed * _airFriction * _airFrictionCoef); diff --git a/addons/scopes/ACE_Settings.hpp b/addons/scopes/ACE_Settings.hpp index 6ff483cb50..4bef108cbf 100644 --- a/addons/scopes/ACE_Settings.hpp +++ b/addons/scopes/ACE_Settings.hpp @@ -50,7 +50,7 @@ class ACE_Settings { }; class GVAR(zeroReferenceHumidity) { typeName = "SCALAR"; - value = 0.5; + value = 0.0; displayName = CSTRING(zeroReferenceHumidity_displayName); description = CSTRING(zeroReferenceHumidity_description); }; diff --git a/addons/scopes/CfgVehicles.hpp b/addons/scopes/CfgVehicles.hpp index 85797b8fb5..8a7e2f6189 100644 --- a/addons/scopes/CfgVehicles.hpp +++ b/addons/scopes/CfgVehicles.hpp @@ -74,7 +74,7 @@ class CfgVehicles { displayName = CSTRING(zeroReferenceHumidity_DisplayName); description = CSTRING(zeroReferenceHumidity_Description); typeName = "NUMBER"; - defaultValue = 0.5; + defaultValue = 0.0; }; class deduceBarometricPressureFromTerrainAltitude { displayName = CSTRING(deduceBarometricPressureFromTerrainAltitude_DisplayName); diff --git a/addons/weather/functions/fnc_calculateSpeedOfSound.sqf b/addons/weather/functions/fnc_calculateSpeedOfSound.sqf index f645ba2368..ed968d94f0 100644 --- a/addons/weather/functions/fnc_calculateSpeedOfSound.sqf +++ b/addons/weather/functions/fnc_calculateSpeedOfSound.sqf @@ -15,4 +15,4 @@ */ #include "script_component.hpp" -(331.3 + (0.6 * _this)) +(331.3 * sqrt(1 + (_this / 273.15))) diff --git a/extensions/advanced_ballistics/AdvancedBallistics.cpp b/extensions/advanced_ballistics/AdvancedBallistics.cpp index b3a6568dbd..1caf0783db 100644 --- a/extensions/advanced_ballistics/AdvancedBallistics.cpp +++ b/extensions/advanced_ballistics/AdvancedBallistics.cpp @@ -7,7 +7,6 @@ #include #include - #define DELTA_T 0.02f #define GRAVITY 9.80665f #define DEGREES(X) (X * 180 / M_PI) @@ -21,6 +20,9 @@ #define SPECIFIC_GAS_CONSTANT_DRY_AIR 287.058f #define STD_AIR_DENSITY_ICAO 1.22498f #define STD_AIR_DENSITY_ASM 1.20885f +#define BC_CONVERSION_FACTOR 0.00068418f +#define SPEED_OF_SOUND(t) (331.3 * std::sqrt(1 + t / 273.15f)) +#define SPEED_OF_SOUND_AT_15C 340.275 struct Bullet { double airFriction; @@ -37,6 +39,7 @@ struct Bullet { double twistDirection; double transonicStabilityCoef; double muzzleVelocity; + double bulletSpeed; std::vector origin; double latitude; double temperature; @@ -114,117 +117,35 @@ double calculateAtmosphericCorrection(double ballisticCoefficient, double temper } } -double calculateRetard(int DragFunction, double DragCoefficient, double Velocity) { - double vel = Velocity * 3.2808399; - double val = -1; - double A = -1; - double M = -1; +// Drag Functions from: http://www.jbmballistics.com/ballistics/downloads/text/ +const std::vector dragCoefficientsG1 = { 0.2629, 0.2558, 0.2487, 0.2413, 0.2344, 0.2278, 0.2214, 0.2155, 0.2104, 0.2061, 0.2032, 0.2020, 0.2034, 0.2165, 0.2230, 0.2313, 0.2417, 0.2546, 0.2706, 0.2901, 0.3136, 0.3415, 0.3734, 0.4084, 0.4448, 0.4805, 0.5136, 0.5427, 0.5677, 0.5883, 0.6053, 0.6191, 0.6393, 0.6518, 0.6589, 0.6621, 0.6625, 0.6607, 0.6573, 0.6528, 0.6474, 0.6413, 0.6347, 0.6280, 0.6210, 0.6141, 0.6072, 0.6003, 0.5934, 0.5867, 0.5804, 0.5743, 0.5685, 0.5630, 0.5577, 0.5527, 0.5481, 0.5438, 0.5397, 0.5325, 0.5264, 0.5211, 0.5168, 0.5133, 0.5105, 0.5084, 0.5067, 0.5054, 0.5040, 0.5030, 0.5022, 0.5016, 0.5010, 0.5006, 0.4998, 0.4995, 0.4992, 0.4990, 0.4988 }; +const std::vector machNumbersG1 = { 0.00, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.70, 0.725, 0.75, 0.775, 0.80, 0.825, 0.85, 0.875, 0.90, 0.925, 0.95, 0.975, 1.0, 1.025, 1.05, 1.075, 1.10, 1.125, 1.15, 1.20, 1.25, 1.30, 1.35, 1.40, 1.45, 1.50, 1.55, 1.60, 1.65, 1.70, 1.75, 1.80, 1.85, 1.90, 1.95, 2.00, 2.05, 2.10, 2.15, 2.20, 2.25, 2.30, 2.35, 2.40, 2.45, 2.50, 2.60, 2.70, 2.80, 2.90, 3.00, 3.10, 3.20, 3.30, 3.40, 3.50, 3.60, 3.70, 3.80, 3.90, 4.00, 4.20, 4.40, 4.60, 4.80, 5.00 }; +const std::vector dragCoefficientsG2 = { 0.2303, 0.2298, 0.2287, 0.2271, 0.2251, 0.2227, 0.2196, 0.2156, 0.2107, 0.2048, 0.1980, 0.1905, 0.1828, 0.1758, 0.1702, 0.1669, 0.1664, 0.1667, 0.1682, 0.1711, 0.1761, 0.1831, 0.2004, 0.2589, 0.3492, 0.3983, 0.4075, 0.4103, 0.4114, 0.4106, 0.4089, 0.4068, 0.4046, 0.4021, 0.3966, 0.3904, 0.3835, 0.3759, 0.3678, 0.3594, 0.3512, 0.3432, 0.3356, 0.3282, 0.3213, 0.3149, 0.3089, 0.3033, 0.2982, 0.2933, 0.2889, 0.2846, 0.2806, 0.2768, 0.2731, 0.2696, 0.2663, 0.2632, 0.2602, 0.2572, 0.2543, 0.2515, 0.2487, 0.2460, 0.2433, 0.2408, 0.2382, 0.2357, 0.2333, 0.2309, 0.2262, 0.2217, 0.2173, 0.2132, 0.2091, 0.2052, 0.2014, 0.1978, 0.1944, 0.1912, 0.1851, 0.1794, 0.1741, 0.1693, 0.1648 }; +const std::vector machNumbersG2 = { 0.00, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.65, 0.70, 0.75, 0.775, 0.80, 0.825, 0.85, 0.875, 0.90, 0.925, 0.95, 0.975, 1.0, 1.025, 1.05, 1.075, 1.10, 1.125, 1.15, 1.175, 1.20, 1.25, 1.30, 1.35, 1.40, 1.45, 1.50, 1.55, 1.60, 1.65, 1.70, 1.75, 1.80, 1.85, 1.90, 1.95, 2.00, 2.05, 2.10, 2.15, 2.20, 2.25, 2.30, 2.35, 2.40, 2.45, 2.50, 2.55, 2.60, 2.65, 2.70, 2.75, 2.80, 2.85, 2.90, 2.95, 3.00, 3.10, 3.20, 3.30, 3.40, 3.50, 3.60, 3.70, 3.80, 3.90, 4.00, 4.20, 4.40, 4.60, 4.80, 5.00 }; +const std::vector dragCoefficientsG5 = { 0.1710, 0.1719, 0.1727, 0.1732, 0.1734, 0.1730, 0.1718, 0.1696, 0.1668, 0.1637, 0.1603, 0.1566, 0.1529, 0.1497, 0.1473, 0.1463, 0.1489, 0.1583, 0.1672, 0.1815, 0.2051, 0.2413, 0.2884, 0.3379, 0.3785, 0.4032, 0.4147, 0.4201, 0.4278, 0.4338, 0.4373, 0.4392, 0.4403, 0.4406, 0.4401, 0.4386, 0.4362, 0.4328, 0.4286, 0.4237, 0.4182, 0.4121, 0.4057, 0.3991, 0.3926, 0.3861, 0.3800, 0.3741, 0.3684, 0.3630, 0.3578, 0.3529, 0.3481, 0.3435, 0.3391, 0.3349, 0.3269, 0.3194, 0.3125, 0.3060, 0.2999, 0.2942, 0.2889, 0.2838, 0.2790, 0.2745, 0.2703, 0.2662, 0.2624, 0.2588, 0.2553, 0.2488, 0.2429, 0.2376, 0.2326, 0.2280 }; +const std::vector machNumbersG5 = { 0.00, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.65, 0.70, 0.75, 0.80, 0.85, 0.875, 0.90, 0.925, 0.95, 0.975, 1.0, 1.025, 1.05, 1.075, 1.10, 1.15, 1.20, 1.25, 1.30, 1.35, 1.40, 1.45, 1.50, 1.55, 1.60, 1.65, 1.70, 1.75, 1.80, 1.85, 1.90, 1.95, 2.00, 2.05, 2.10, 2.15, 2.20, 2.25, 2.30, 2.35, 2.40, 2.45, 2.50, 2.60, 2.70, 2.80, 2.90, 3.00, 3.10, 3.20, 3.30, 3.40, 3.50, 3.60, 3.70, 3.80, 3.90, 4.00, 4.20, 4.40, 4.60, 4.80, 5.00 }; +const std::vector dragCoefficientsG6 = { 0.2617, 0.2553, 0.2491, 0.2432, 0.2376, 0.2324, 0.2278, 0.2238, 0.2205, 0.2177, 0.2155, 0.2138, 0.2126, 0.2121, 0.2122, 0.2132, 0.2154, 0.2194, 0.2229, 0.2297, 0.2449, 0.2732, 0.3141, 0.3597, 0.3994, 0.4261, 0.4402, 0.4465, 0.4490, 0.4497, 0.4494, 0.4482, 0.4464, 0.4441, 0.4390, 0.4336, 0.4279, 0.4221, 0.4162, 0.4102, 0.4042, 0.3981, 0.3919, 0.3855, 0.3788, 0.3721, 0.3652, 0.3583, 0.3515, 0.3447, 0.3381, 0.3314, 0.3249, 0.3185, 0.3122, 0.3060, 0.3000, 0.2941, 0.2883, 0.2772, 0.2668, 0.2574, 0.2487, 0.2407, 0.2333, 0.2265, 0.2202, 0.2144, 0.2089, 0.2039, 0.1991, 0.1947, 0.1905, 0.1866, 0.1794, 0.1730, 0.1673, 0.1621, 0.1574 }; +const std::vector machNumbersG6 = { 0.00, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.65, 0.70, 0.75, 0.80, 0.85, 0.875, 0.90, 0.925, 0.95, 0.975, 1.0, 1.025, 1.05, 1.075, 1.10, 1.125, 1.15, 1.175, 1.20, 1.225, 1.25, 1.30, 1.35, 1.40, 1.45, 1.50, 1.55, 1.60, 1.65, 1.70, 1.75, 1.80, 1.85, 1.90, 1.95, 2.00, 2.05, 2.10, 2.15, 2.20, 2.25, 2.30, 2.35, 2.40, 2.45, 2.50, 2.60, 2.70, 2.80, 2.90, 3.00, 3.10, 3.20, 3.30, 3.40, 3.50, 3.60, 3.70, 3.80, 3.90, 4.00, 4.20, 4.40, 4.60, 4.80, 5.00 }; +const std::vector dragCoefficientsG7 = { 0.1198, 0.1197, 0.1196, 0.1194, 0.1193, 0.1194, 0.1194, 0.1194, 0.1193, 0.1193, 0.1194, 0.1193, 0.1194, 0.1197, 0.1202, 0.1207, 0.1215, 0.1226, 0.1242, 0.1266, 0.1306, 0.1368, 0.1464, 0.1660, 0.2054, 0.2993, 0.3803, 0.4015, 0.4043, 0.4034, 0.4014, 0.3987, 0.3955, 0.3884, 0.3810, 0.3732, 0.3657, 0.3580, 0.3440, 0.3376, 0.3315, 0.3260, 0.3209, 0.3160, 0.3117, 0.3078, 0.3042, 0.3010, 0.2980, 0.2951, 0.2922, 0.2892, 0.2864, 0.2835, 0.2807, 0.2779, 0.2752, 0.2725, 0.2697, 0.2670, 0.2643, 0.2615, 0.2588, 0.2561, 0.2533, 0.2506, 0.2479, 0.2451, 0.2424, 0.2368, 0.2313, 0.2258, 0.2205, 0.2154, 0.2106, 0.2060, 0.2017, 0.1975, 0.1935, 0.1861, 0.1793, 0.1730, 0.1672, 0.1618 }; +const std::vector machNumbersG7 = { 0.0, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.65, 0.70, 0.725, 0.75, 0.775, 0.80, 0.825, 0.85, 0.875, 0.90, 0.925, 0.95, 0.975, 1.0, 1.025, 1.05, 1.075, 1.10, 1.125, 1.15, 1.20, 1.25, 1.30, 1.35, 1.40, 1.50, 1.55, 1.60, 1.65, 1.70, 1.75, 1.80, 1.85, 1.90, 1.95, 2.00, 2.05, 2.10, 2.15, 2.20, 2.25, 2.30, 2.35, 2.40, 2.45, 2.50, 2.55, 2.60, 2.65, 2.70, 2.75, 2.80, 2.85, 2.90, 2.95, 3.00, 3.10, 3.20, 3.30, 3.40, 3.50, 3.60, 3.70, 3.80, 3.90, 4.00, 4.20, 4.40, 4.60, 4.80, 5.00 }; +const std::vector dragCoefficientsG8 = { 0.2105, 0.2105, 0.2104, 0.2104, 0.2103, 0.2103, 0.2103, 0.2103, 0.2103, 0.2102, 0.2102, 0.2102, 0.2102, 0.2102, 0.2103, 0.2103, 0.2104, 0.2104, 0.2105, 0.2106, 0.2109, 0.2183, 0.2571, 0.3358, 0.4068, 0.4378, 0.4476, 0.4493, 0.4477, 0.4450, 0.4419, 0.4353, 0.4283, 0.4208, 0.4133, 0.4059, 0.3986, 0.3915, 0.3845, 0.3777, 0.3710, 0.3645, 0.3581, 0.3519, 0.3458, 0.3400, 0.3343, 0.3288, 0.3234, 0.3182, 0.3131, 0.3081, 0.3032, 0.2983, 0.2937, 0.2891, 0.2845, 0.2802, 0.2720, 0.2642, 0.2569, 0.2499, 0.2432, 0.2368, 0.2308, 0.2251, 0.2197, 0.2147, 0.2101, 0.2058, 0.2019, 0.1983, 0.1950, 0.1890, 0.1837, 0.1791, 0.1750, 0.1713 }; +const std::vector machNumbersG8 = { 0.00, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.65, 0.70, 0.75, 0.80, 0.825, 0.85, 0.875, 0.90, 0.925, 0.95, 0.975, 1.0, 1.025, 1.05, 1.075, 1.10, 1.125, 1.15, 1.20, 1.25, 1.30, 1.35, 1.40, 1.45, 1.50, 1.55, 1.60, 1.65, 1.70, 1.75, 1.80, 1.85, 1.90, 1.95, 2.00, 2.05, 2.10, 2.15, 2.20, 2.25, 2.30, 2.35, 2.40, 2.45, 2.50, 2.60, 2.70, 2.80, 2.90, 3.00, 3.10, 3.20, 3.30, 3.40, 3.50, 3.60, 3.70, 3.80, 3.90, 4.00, 4.20, 4.40, 4.60, 4.80, 5.00 }; - switch (DragFunction) { - case 1: - if (vel> 4230) { A = 1.477404177730177e-04; M = 1.9565; } - else if (vel> 3680) { A = 1.920339268755614e-04; M = 1.925; } - else if (vel> 3450) { A = 2.894751026819746e-04; M = 1.875; } - else if (vel> 3295) { A = 4.349905111115636e-04; M = 1.825; } - else if (vel> 3130) { A = 6.520421871892662e-04; M = 1.775; } - else if (vel> 2960) { A = 9.748073694078696e-04; M = 1.725; } - else if (vel> 2830) { A = 1.453721560187286e-03; M = 1.675; } - else if (vel> 2680) { A = 2.162887202930376e-03; M = 1.625; } - else if (vel> 2460) { A = 3.209559783129881e-03; M = 1.575; } - else if (vel> 2225) { A = 3.904368218691249e-03; M = 1.55; } - else if (vel> 2015) { A = 3.222942271262336e-03; M = 1.575; } - else if (vel> 1890) { A = 2.203329542297809e-03; M = 1.625; } - else if (vel> 1810) { A = 1.511001028891904e-03; M = 1.675; } - else if (vel> 1730) { A = 8.609957592468259e-04; M = 1.75; } - else if (vel> 1595) { A = 4.086146797305117e-04; M = 1.85; } - else if (vel> 1520) { A = 1.954473210037398e-04; M = 1.95; } - else if (vel> 1420) { A = 5.431896266462351e-05; M = 2.125; } - else if (vel> 1360) { A = 8.847742581674416e-06; M = 2.375; } - else if (vel> 1315) { A = 1.456922328720298e-06; M = 2.625; } - else if (vel> 1280) { A = 2.419485191895565e-07; M = 2.875; } - else if (vel> 1220) { A = 1.657956321067612e-08; M = 3.25; } - else if (vel> 1185) { A = 4.745469537157371e-10; M = 3.75; } - else if (vel> 1150) { A = 1.379746590025088e-11; M = 4.25; } - else if (vel> 1100) { A = 4.070157961147882e-13; M = 4.75; } - else if (vel> 1060) { A = 2.938236954847331e-14; M = 5.125; } - else if (vel> 1025) { A = 1.228597370774746e-14; M = 5.25; } - else if (vel> 980) { A = 2.916938264100495e-14; M = 5.125; } - else if (vel> 945) { A = 3.855099424807451e-13; M = 4.75; } - else if (vel> 905) { A = 1.185097045689854e-11; M = 4.25; } - else if (vel> 860) { A = 3.566129470974951e-10; M = 3.75; } - else if (vel> 810) { A = 1.045513263966272e-08; M = 3.25; } - else if (vel> 780) { A = 1.291159200846216e-07; M = 2.875; } - else if (vel> 750) { A = 6.824429329105383e-07; M = 2.625; } - else if (vel> 700) { A = 3.569169672385163e-06; M = 2.375; } - else if (vel> 640) { A = 1.839015095899579e-05; M = 2.125; } - else if (vel> 600) { A = 5.71117468873424e-05; M = 1.950; } - else if (vel> 550) { A = 9.226557091973427e-05; M = 1.875; } - else if (vel> 250) { A = 9.337991957131389e-05; M = 1.875; } - else if (vel> 100) { A = 7.225247327590413e-05; M = 1.925; } - else if (vel> 65) { A = 5.792684957074546e-05; M = 1.975; } - else if (vel> 0) { A = 5.206214107320588e-05; M = 2.000; } - break; +const std::vector> dragCoefficients = { {}, dragCoefficientsG1, dragCoefficientsG2, {}, {}, dragCoefficientsG5, dragCoefficientsG6, dragCoefficientsG7, dragCoefficientsG8, {} }; +const std::vector> machNumbers = { {}, machNumbersG1, machNumbersG2, {},{}, machNumbersG5, machNumbersG6, machNumbersG7, machNumbersG8,{} }; - case 2: - if (vel> 1674) { A = .0079470052136733; M = 1.36999902851493; } - else if (vel> 1172) { A = 1.00419763721974e-03; M = 1.65392237010294; } - else if (vel> 1060) { A = 7.15571228255369e-23; M = 7.91913562392361; } - else if (vel> 949) { A = 1.39589807205091e-10; M = 3.81439537623717; } - else if (vel> 670) { A = 2.34364342818625e-04; M = 1.71869536324748; } - else if (vel> 335) { A = 1.77962438921838e-04; M = 1.76877550388679; } - else if (vel> 0) { A = 5.18033561289704e-05; M = 1.98160270524632; } - break; +double calculateRetard(int DragFunction, double DragCoefficient, double Velocity, double Mach) { + int idx = std::max(0, std::min(DragFunction, 9)); + double m = Velocity / Mach; - case 5: - if (vel> 1730) { A = 7.24854775171929e-03; M = 1.41538574492812; } - else if (vel> 1228) { A = 3.50563361516117e-05; M = 2.13077307854948; } - else if (vel> 1116) { A = 1.84029481181151e-13; M = 4.81927320350395; } - else if (vel> 1004) { A = 1.34713064017409e-22; M = 7.8100555281422; } - else if (vel> 837) { A = 1.03965974081168e-07; M = 2.84204791809926; } - else if (vel> 335) { A = 1.09301593869823e-04; M = 1.81096361579504; } - else if (vel> 0) { A = 3.51963178524273e-05; M = 2.00477856801111; } - break; - - case 6: - if (vel> 3236) { A = 0.0455384883480781; M = 1.15997674041274; } - else if (vel> 2065) { A = 7.167261849653769e-02; M = 1.10704436538885; } - else if (vel> 1311) { A = 1.66676386084348e-03; M = 1.60085100195952; } - else if (vel> 1144) { A = 1.01482730119215e-07; M = 2.9569674731838; } - else if (vel> 1004) { A = 4.31542773103552e-18; M = 6.34106317069757; } - else if (vel> 670) { A = 2.04835650496866e-05; M = 2.11688446325998; } - else if (vel> 0) { A = 7.50912466084823e-05; M = 1.92031057847052; } - break; - - case 7: - if (vel> 4200) { A = 1.29081656775919e-09; M = 3.24121295355962; } - else if (vel> 3000) { A = 0.0171422231434847; M = 1.27907168025204; } - else if (vel> 1470) { A = 2.33355948302505e-03; M = 1.52693913274526; } - else if (vel> 1260) { A = 7.97592111627665e-04; M = 1.67688974440324; } - else if (vel> 1110) { A = 5.71086414289273e-12; M = 4.3212826264889; } - else if (vel> 960) { A = 3.02865108244904e-17; M = 5.99074203776707; } - else if (vel> 670) { A = 7.52285155782535e-06; M = 2.1738019851075; } - else if (vel> 540) { A = 1.31766281225189e-05; M = 2.08774690257991; } - else if (vel> 0) { A = 1.34504843776525e-05; M = 2.08702306738884; } - break; - - case 8: - if (vel> 3571) { A = .0112263766252305; M = 1.33207346655961; } - else if (vel> 1841) { A = .0167252613732636; M = 1.28662041261785; } - else if (vel> 1120) { A = 2.20172456619625e-03; M = 1.55636358091189; } - else if (vel> 1088) { A = 2.0538037167098e-16; M = 5.80410776994789; } - else if (vel> 976) { A = 5.92182174254121e-12; M = 4.29275576134191; } - else if (vel> 0) { A = 4.3917343795117e-05; M = 1.99978116283334; } - break; - - default: - break; - - } - - if (A != -1 && M != -1 && vel > 0 && vel < 10000) { - val = A * pow(vel, M) / DragCoefficient; - val = val / 3.2808399; - return val; + for (int i = 0; i < machNumbers[idx].size(); i++) { + if (machNumbers[idx][i] >= m) { + int previousIdx = std::max(0, i - 1); + double previousDragCoefficient = dragCoefficients[idx][previousIdx]; + double previousMachNumber = machNumbers[idx][previousIdx]; + double cd = previousDragCoefficient + (dragCoefficients[idx][i] - previousDragCoefficient) * (m - previousMachNumber) / (machNumbers[idx][i] - previousMachNumber); + return BC_CONVERSION_FACTOR * (cd / DragCoefficient) * std::pow(Velocity, 2); + } } return 0.0; @@ -309,7 +230,7 @@ double calculateZeroAngle(double zeroRange, double muzzleVelocity, double boreHe v = std::sqrt(vx*vx + vy*vy); - double retard = calculateRetard(dragModel, ballisticCoefficient, v); + double retard = calculateRetard(dragModel, ballisticCoefficient, v, SPEED_OF_SOUND_AT_15C); double ax = vx / v * -retard; double ay = vy / v * -retard; ax += gx; @@ -366,13 +287,15 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) double ballisticCoefficient = 1.0; int dragModel = 1; double velocity = 0.0; + double temperature = 15.0; double retard = 0.0; dragModel = strtol(strtok_s(NULL, ":", &next_token), NULL, 10); ballisticCoefficient = strtod(strtok_s(NULL, ":", &next_token), NULL); velocity = strtod(strtok_s(NULL, ":", &next_token), NULL); + temperature = strtod(strtok_s(NULL, ":", &next_token), NULL); - retard = calculateRetard(dragModel, ballisticCoefficient, velocity); + retard = calculateRetard(dragModel, ballisticCoefficient, velocity, SPEED_OF_SOUND(temperature)); // int n = sprintf(output, "%f", retard); outputStr << retard; @@ -460,7 +383,6 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) humidity = strtod(strtok_s(NULL, ":", &next_token), NULL); overcast = strtod(strtok_s(NULL, ":", &next_token), NULL); tickTime = strtod(strtok_s(NULL, ":", &next_token), NULL); - tickTime += strtod(strtok_s(NULL, ":", &next_token), NULL); while (index >= bulletDatabase.size()) { Bullet bullet; @@ -476,6 +398,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) bulletDatabase[index].twistDirection = twistDirection; bulletDatabase[index].transonicStabilityCoef = transonicStabilityCoef; bulletDatabase[index].muzzleVelocity = muzzleVelocity; + bulletDatabase[index].bulletSpeed = muzzleVelocity; bulletDatabase[index].origin = origin; bulletDatabase[index].latitude = latitude / 180 * M_PI; bulletDatabase[index].temperature = temperature; @@ -522,7 +445,6 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) wind[2] = strtod(strtok_s(NULL, ",", &token), NULL); heightAGL = strtod(strtok_s(NULL, ":", &next_token), NULL); tickTime = strtod(strtok_s(NULL, ":", &next_token), NULL); - tickTime += strtod(strtok_s(NULL, ":", &next_token), NULL); if (bulletDatabase[index].randSeed == 0) { int angle = (int)round(atan2(velocity[0], velocity[1]) * 360 / M_PI); @@ -545,24 +467,18 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) double drag = 0.0; double accelRef[3] = { 0.0, 0.0, 0.0 }; double accel[3] = { 0.0, 0.0, 0.0 }; - double TOF = 0.0; - double deltaT = 0.0; - double bulletSpeed; + double TOF = tickTime - bulletDatabase[index].startTime; + double deltaT = tickTime - bulletDatabase[index].lastFrame; double trueVelocity[3] = { 0.0, 0.0, 0.0 }; double trueSpeed = 0.0; - double temperature = 0.0; - double pressure = 1013.25; + double temperature = bulletDatabase[index].temperature - 0.0065 * position[2]; + double pressure = (1013.25 - 10 * bulletDatabase[index].overcast) * pow(1 - (0.0065 * (bulletDatabase[index].altitude + position[2])) / (KELVIN(temperature) + 0.0065 * bulletDatabase[index].altitude), 5.255754495); double windSpeed = 0.0; double windAttenuation = 1.0; double velocityOffset[3] = { 0.0, 0.0, 0.0 }; - TOF = tickTime - bulletDatabase[index].startTime; - - deltaT = tickTime - bulletDatabase[index].lastFrame; bulletDatabase[index].lastFrame = tickTime; - bulletSpeed = sqrt(pow(velocity[0], 2) + pow(velocity[1], 2) + pow(velocity[2], 2)); - windSpeed = sqrt(pow(wind[0], 2) + pow(wind[1], 2) + pow(wind[2], 2)); if (windSpeed > 0.1) { double windSourceTerrain[3]; @@ -610,9 +526,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) trueVelocity[2] = velocity[2] - wind[2]; trueSpeed = sqrt(pow(trueVelocity[0], 2) + pow(trueVelocity[1], 2) + pow(trueVelocity[2], 2)); - double speedOfSound = 331.3 + (0.6 * temperature); - double transonicSpeed = 394 + (0.6 * temperature); - if (bulletDatabase[index].transonicStabilityCoef < 1.0f && bulletSpeed < transonicSpeed && bulletSpeed > speedOfSound) { + if (bulletDatabase[index].transonicStabilityCoef < 1.0f && trueSpeed - 60 < SPEED_OF_SOUND(temperature) && trueSpeed > SPEED_OF_SOUND(temperature)) { std::uniform_real_distribution distribution(-10.0, 10.0); double coef = 1.0f - bulletDatabase[index].transonicStabilityCoef; @@ -628,15 +542,12 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) bulletDatabase[index].bcDegradation *= pow(0.993, coef); }; - temperature = bulletDatabase[index].temperature - 0.0065 * position[2]; - pressure = (1013.25 - 10 * bulletDatabase[index].overcast) * pow(1 - (0.0065 * (bulletDatabase[index].altitude + position[2])) / (273.15 + temperature + 0.0065 * bulletDatabase[index].altitude), 5.255754495); - if (bulletDatabase[index].ballisticCoefficients.size() == bulletDatabase[index].velocityBoundaries.size() + 1) { - dragRef = deltaT * bulletDatabase[index].airFriction * bulletSpeed * bulletSpeed; + dragRef = deltaT * bulletDatabase[index].airFriction * bulletDatabase[index].bulletSpeed * bulletDatabase[index].bulletSpeed; - accelRef[0] = (velocity[0] / bulletSpeed) * dragRef; - accelRef[1] = (velocity[1] / bulletSpeed) * dragRef; - accelRef[2] = (velocity[2] / bulletSpeed) * dragRef; + accelRef[0] = (velocity[0] / bulletDatabase[index].bulletSpeed) * dragRef; + accelRef[1] = (velocity[1] / bulletDatabase[index].bulletSpeed) * dragRef; + accelRef[2] = (velocity[2] / bulletDatabase[index].bulletSpeed) * dragRef; velocityOffset[0] -= accelRef[0]; velocityOffset[1] -= accelRef[1]; @@ -644,7 +555,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) ballisticCoefficient = bulletDatabase[index].ballisticCoefficients[0]; for (int i = (int)bulletDatabase[index].velocityBoundaries.size() - 1; i >= 0; i = i - 1) { - if (bulletSpeed < bulletDatabase[index].velocityBoundaries[i]) { + if (trueSpeed < bulletDatabase[index].velocityBoundaries[i]) { ballisticCoefficient = bulletDatabase[index].ballisticCoefficients[i + 1]; break; } @@ -652,7 +563,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) ballisticCoefficient = calculateAtmosphericCorrection(ballisticCoefficient, temperature, pressure, bulletDatabase[index].humidity, bulletDatabase[index].atmosphereModel); ballisticCoefficient *= bulletDatabase[index].bcDegradation; - drag = deltaT * calculateRetard(bulletDatabase[index].dragModel, ballisticCoefficient, trueSpeed); + drag = deltaT * calculateRetard(bulletDatabase[index].dragModel, ballisticCoefficient, trueSpeed, SPEED_OF_SOUND(temperature)); accel[0] = (trueVelocity[0] / trueSpeed) * drag; accel[1] = (trueVelocity[1] / trueSpeed) * drag; accel[2] = (trueVelocity[2] / trueSpeed) * drag; @@ -665,11 +576,11 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) double airFriction = bulletDatabase[index].airFriction * airDensity / STD_AIR_DENSITY_ICAO; if (airFriction != bulletDatabase[index].airFriction || windSpeed > 0) { - dragRef = deltaT * bulletDatabase[index].airFriction * bulletSpeed * bulletSpeed; + dragRef = deltaT * bulletDatabase[index].airFriction * bulletDatabase[index].bulletSpeed * bulletDatabase[index].bulletSpeed; - accelRef[0] = (velocity[0] / bulletSpeed) * dragRef; - accelRef[1] = (velocity[1] / bulletSpeed) * dragRef; - accelRef[2] = (velocity[2] / bulletSpeed) * dragRef; + accelRef[0] = (velocity[0] / bulletDatabase[index].bulletSpeed) * dragRef; + accelRef[1] = (velocity[1] / bulletDatabase[index].bulletSpeed) * dragRef; + accelRef[2] = (velocity[2] / bulletDatabase[index].bulletSpeed) * dragRef; velocityOffset[0] -= accelRef[0]; velocityOffset[1] -= accelRef[1]; @@ -688,11 +599,11 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) if (TOF > 0) { double bulletDir = atan2(velocity[0], velocity[1]); - double r1 = pow(TOF - deltaT, 0.17); - double r2 = pow(TOF, 0.17); - double spinAccel = bulletDatabase[index].twistDirection * (0.0482251 * (bulletDatabase[index].stabilityFactor + 1.2)) / ((r1 + r2) / 2.0f); - velocityOffset[0] += sin(bulletDir + M_PI / 2) * spinAccel * deltaT; - velocityOffset[1] += cos(bulletDir + M_PI / 2) * spinAccel * deltaT; + double driftAccel = bulletDatabase[index].twistDirection * (0.0482251 * (bulletDatabase[index].stabilityFactor + 1.2)) / pow(TOF, 0.17); + double driftVelocity = 0.0581025 *(bulletDatabase[index].stabilityFactor + 1.2) * pow(TOF, 0.83); + double dragCorrection = (driftVelocity / trueSpeed) * drag; + velocityOffset[0] += sin(bulletDir + M_PI / 2) * (driftAccel * deltaT + dragCorrection); + velocityOffset[1] += cos(bulletDir + M_PI / 2) * (driftAccel * deltaT + dragCorrection); } double lat = bulletDatabase[index].latitude; @@ -704,6 +615,11 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) velocityOffset[1] += accel[1] * deltaT; velocityOffset[2] += accel[2] * deltaT; + velocity[0] += velocityOffset[0]; + velocity[1] += velocityOffset[1]; + velocity[2] += velocityOffset[2]; + bulletDatabase[index].bulletSpeed = sqrt(pow(velocity[0], 2) + pow(velocity[1], 2) + pow(velocity[2], 2)); + outputStr << "[" << velocityOffset[0] << "," << velocityOffset[1] << "," << velocityOffset[2] << "]"; strncpy_s(output, outputSize, outputStr.str().c_str(), _TRUNCATE); EXTENSION_RETURN(); diff --git a/extras/airFrictionAnalysis.txt b/extras/airFrictionAnalysis.txt index 1e91e50f2b..dfd478b451 100644 --- a/extras/airFrictionAnalysis.txt +++ b/extras/airFrictionAnalysis.txt @@ -2,359 +2,359 @@ Ammo Class: B_556x45_Ball MaxRanges (m): [300, 500, 500] MuzzleVelocities (m/s): [750, 870, 910] -Max. velocity difference (m/s): 25.51 -Max. drop difference (cm): 2.05 -Max. tof difference (ms): 10.0 -Optimal airFriction: 0.00126466 +Max. Velocity diff (m/s): 26.68 +Max. Drop diff (cm): 1.98 +Max. Tof diff (ms): 10.5 +Optimal airFriction: 0.00130094 ########################################## Ammo Class: ACE_556x45_Ball_Mk262 MaxRanges (m): [600, 600] MuzzleVelocities (m/s): [810, 840] -Max. velocity difference (m/s): 14.9 -Max. drop difference (cm): 2.67 -Max. tof difference (ms): 10.0 -Optimal airFriction: 0.00109563 +Max. Velocity diff (m/s): 14.67 +Max. Drop diff (cm): 2.58 +Max. Tof diff (ms): 10.5 +Optimal airFriction: 0.00111805 ########################################## Ammo Class: ACE_556x45_Ball_Mk318 MaxRanges (m): [300, 500, 500] MuzzleVelocities (m/s): [780, 880, 950] -Max. velocity difference (m/s): 20.86 -Max. drop difference (cm): 2.29 -Max. tof difference (ms): 9.0 -Optimal airFriction: 0.00123318 +Max. Velocity diff (m/s): 21.13 +Max. Drop diff (cm): 2.06 +Max. Tof diff (ms): 9.5 +Optimal airFriction: 0.0012588 ########################################## Ammo Class: ACE_556x45_Ball_M995_AP MaxRanges (m): [400, 500] MuzzleVelocities (m/s): [820, 880] -Max. velocity difference (m/s): 17.92 -Max. drop difference (cm): 1.25 -Max. tof difference (ms): 7.0 -Optimal airFriction: 0.00123272 +Max. Velocity diff (m/s): 17.28 +Max. Drop diff (cm): 1.04 +Max. Tof diff (ms): 6.0 +Optimal airFriction: 0.00126182 ########################################## Ammo Class: B_545x39_Ball_F MaxRanges (m): [400, 500] MuzzleVelocities (m/s): [735, 892] -Max. velocity difference (m/s): 23.07 -Max. drop difference (cm): 3.76 -Max. tof difference (ms): 12.0 -Optimal airFriction: 0.00116278 +Max. Velocity diff (m/s): 23.85 +Max. Drop diff (cm): 3.61 +Max. Tof diff (ms): 12.0 +Optimal airFriction: 0.00119458 ########################################## Ammo Class: B_580x42_Ball_F MaxRanges (m): [500, 500] MuzzleVelocities (m/s): [930, 970] -Max. velocity difference (m/s): 24.7 -Max. drop difference (cm): 1.51 -Max. tof difference (ms): 8.0 -Optimal airFriction: 0.00117956 +Max. Velocity diff (m/s): 25.65 +Max. Drop diff (cm): 1.46 +Max. Tof diff (ms): 8.5 +Optimal airFriction: 0.00121087 ########################################## Ammo Class: B_65x39_Caseless MaxRanges (m): [400, 800, 800] MuzzleVelocities (m/s): [730, 800, 830] -Max. velocity difference (m/s): 22.17 -Max. drop difference (cm): 4.83 -Max. tof difference (ms): 16.0 -Optimal airFriction: 0.00075308 +Max. Velocity diff (m/s): 23.49 +Max. Drop diff (cm): 4.59 +Max. Tof diff (ms): 16.5 +Optimal airFriction: 0.00077363 ########################################## Ammo Class: ACE_65x47_Ball_Scenar MaxRanges (m): [500, 800] MuzzleVelocities (m/s): [730, 830] -Max. velocity difference (m/s): 16.94 -Max. drop difference (cm): 2.67 -Max. tof difference (ms): 9.0 -Optimal airFriction: 0.00067037 +Max. Velocity diff (m/s): 17.09 +Max. Drop diff (cm): 2.41 +Max. Tof diff (ms): 8.0 +Optimal airFriction: 0.00069003 ########################################## Ammo Class: ACE_65_Creedmor_Ball MaxRanges (m): [600, 1000] MuzzleVelocities (m/s): [750, 860] -Max. velocity difference (m/s): 21.08 -Max. drop difference (cm): 4.29 -Max. tof difference (ms): 14.0 -Optimal airFriction: 0.00060887 +Max. Velocity diff (m/s): 22.99 +Max. Drop diff (cm): 3.82 +Max. Tof diff (ms): 16.0 +Optimal airFriction: 0.00062437 ########################################## Ammo Class: B_762x51_Ball MaxRanges (m): [500, 800] MuzzleVelocities (m/s): [700, 833] -Max. velocity difference (m/s): 27.7 -Max. drop difference (cm): 6.71 -Max. tof difference (ms): 23.0 -Optimal airFriction: 0.00100957 +Max. Velocity diff (m/s): 29.78 +Max. Drop diff (cm): 6.24 +Max. Tof diff (ms): 26.0 +Optimal airFriction: 0.00103711 ########################################## Ammo Class: ACE_762x51_Ball_M118LR MaxRanges (m): [600, 800] MuzzleVelocities (m/s): [750, 795] -Max. velocity difference (m/s): 23.28 -Max. drop difference (cm): 3.65 -Max. tof difference (ms): 17.0 -Optimal airFriction: 0.00082828 +Max. Velocity diff (m/s): 24.95 +Max. Drop diff (cm): 3.64 +Max. Tof diff (ms): 18.0 +Optimal airFriction: 0.00085157 ########################################## Ammo Class: ACE_762x51_Ball_Mk316_Mod_0 MaxRanges (m): [600, 800] MuzzleVelocities (m/s): [780, 810] -Max. velocity difference (m/s): 23.39 -Max. drop difference (cm): 3.25 -Max. tof difference (ms): 16.0 -Optimal airFriction: 0.00082029 +Max. Velocity diff (m/s): 25.0 +Max. Drop diff (cm): 3.31 +Max. Tof diff (ms): 17.0 +Optimal airFriction: 0.00084311 ########################################## Ammo Class: ACE_762x51_Ball_Mk319_Mod_0 MaxRanges (m): [600, 800] MuzzleVelocities (m/s): [840, 910] -Max. velocity difference (m/s): 19.18 -Max. drop difference (cm): 3.9 -Max. tof difference (ms): 17.0 -Optimal airFriction: 0.00102338 +Max. Velocity diff (m/s): 18.56 +Max. Drop diff (cm): 3.74 +Max. Tof diff (ms): 17.0 +Optimal airFriction: 0.00104515 ########################################## Ammo Class: ACE_762x51_Ball_M993_AP MaxRanges (m): [600, 800] MuzzleVelocities (m/s): [875, 930] -Max. velocity difference (m/s): 19.39 -Max. drop difference (cm): 4.08 -Max. tof difference (ms): 18.0 -Optimal airFriction: 0.00107148 +Max. Velocity diff (m/s): 18.62 +Max. Drop diff (cm): 4.03 +Max. Tof diff (ms): 18.0 +Optimal airFriction: 0.0010939 ########################################## Ammo Class: ACE_30_06_M1_Ball MaxRanges (m): [600, 800, 900] MuzzleVelocities (m/s): [700, 800, 840] -Max. velocity difference (m/s): 14.56 -Max. drop difference (cm): 7.89 -Max. tof difference (ms): 15.0 -Optimal airFriction: 0.000809 +Max. Velocity diff (m/s): 14.2 +Max. Drop diff (cm): 7.95 +Max. Tof diff (ms): 15.0 +Optimal airFriction: 0.00082645 ########################################## Ammo Class: ACE_7_Remington_Magnum_Ball MaxRanges (m): [600, 800, 1000] MuzzleVelocities (m/s): [720, 812, 830] -Max. velocity difference (m/s): 17.47 -Max. drop difference (cm): 4.54 -Max. tof difference (ms): 11.0 -Optimal airFriction: 0.00056738 +Max. Velocity diff (m/s): 18.9 +Max. Drop diff (cm): 4.03 +Max. Tof diff (ms): 11.5 +Optimal airFriction: 0.00058198 ########################################## Ammo Class: ACE_243_Winchester_Ball MaxRanges (m): [700, 900, 900] MuzzleVelocities (m/s): [830, 900, 920] -Max. velocity difference (m/s): 22.55 -Max. drop difference (cm): 4.78 -Max. tof difference (ms): 13.0 -Optimal airFriction: 0.00067875 +Max. Velocity diff (m/s): 23.53 +Max. Drop diff (cm): 4.62 +Max. Tof diff (ms): 13.5 +Optimal airFriction: 0.00069778 ########################################## Ammo Class: ACE_762x67_Ball_Mk248_Mod_0 MaxRanges (m): [800, 900, 900] MuzzleVelocities (m/s): [865, 900, 924] -Max. velocity difference (m/s): 24.43 -Max. drop difference (cm): 5.17 -Max. tof difference (ms): 15.0 -Optimal airFriction: 0.0007053 +Max. Velocity diff (m/s): 25.84 +Max. Drop diff (cm): 5.03 +Max. Tof diff (ms): 16.0 +Optimal airFriction: 0.00072468 ########################################## Ammo Class: ACE_762x67_Ball_Mk248_Mod_1 MaxRanges (m): [800, 900, 900] MuzzleVelocities (m/s): [847, 867, 877] -Max. velocity difference (m/s): 20.16 -Max. drop difference (cm): 2.99 -Max. tof difference (ms): 12.0 -Optimal airFriction: 0.00061188 +Max. Velocity diff (m/s): 20.18 +Max. Drop diff (cm): 2.7 +Max. Tof diff (ms): 11.5 +Optimal airFriction: 0.00063027 ########################################## Ammo Class: ACE_762x67_Ball_Berger_Hybrid_OTM MaxRanges (m): [900, 1000, 1000] MuzzleVelocities (m/s): [800, 853, 884] -Max. velocity difference (m/s): 19.65 -Max. drop difference (cm): 8.25 -Max. tof difference (ms): 16.0 -Optimal airFriction: 0.00053733 +Max. Velocity diff (m/s): 19.94 +Max. Drop diff (cm): 8.04 +Max. Tof diff (ms): 16.0 +Optimal airFriction: 0.00055262 ########################################## Ammo Class: B_762x54_Ball MaxRanges (m): [500, 800, 800] MuzzleVelocities (m/s): [700, 820, 833] -Max. velocity difference (m/s): 14.61 -Max. drop difference (cm): 5.74 -Max. tof difference (ms): 15.0 -Optimal airFriction: 0.00100023 +Max. Velocity diff (m/s): 13.84 +Max. Drop diff (cm): 5.42 +Max. Tof diff (ms): 12.5 +Optimal airFriction: 0.00102329 ########################################## Ammo Class: ACE_762x35_Ball MaxRanges (m): [400, 500] MuzzleVelocities (m/s): [620, 675] -Max. velocity difference (m/s): 4.17 -Max. drop difference (cm): 1.71 -Max. tof difference (ms): 4.0 -Optimal airFriction: 0.00128942 +Max. Velocity diff (m/s): 3.68 +Max. Drop diff (cm): 1.54 +Max. Tof diff (ms): 3.5 +Optimal airFriction: 0.00131689 ########################################## Ammo Class: ACE_762x39_Ball MaxRanges (m): [400, 600] MuzzleVelocities (m/s): [650, 750] -Max. velocity difference (m/s): 13.0 -Max. drop difference (cm): 3.78 -Max. tof difference (ms): 8.0 -Optimal airFriction: 0.00151621 +Max. Velocity diff (m/s): 15.54 +Max. Drop diff (cm): 3.92 +Max. Tof diff (ms): 8.5 +Optimal airFriction: 0.00154815 ########################################## Ammo Class: ACE_762x54_Ball_7T2 MaxRanges (m): [500, 800, 800] MuzzleVelocities (m/s): [680, 750, 800] -Max. velocity difference (m/s): 9.79 -Max. drop difference (cm): 7.89 -Max. tof difference (ms): 11.0 -Optimal airFriction: 0.00103989 +Max. Velocity diff (m/s): 9.37 +Max. Drop diff (cm): 7.72 +Max. Tof diff (ms): 9.5 +Optimal airFriction: 0.00106104 ########################################## Ammo Class: ACE_303_Ball MaxRanges (m): [900, 1000] MuzzleVelocities (m/s): [748, 765] -Max. velocity difference (m/s): 7.24 -Max. drop difference (cm): 5.65 -Max. tof difference (ms): 11.0 -Optimal airFriction: 0.0008349 +Max. Velocity diff (m/s): 6.94 +Max. Drop diff (cm): 5.32 +Max. Tof diff (ms): 10.5 +Optimal airFriction: 0.00085117 ########################################## Ammo Class: B_93x64_Ball MaxRanges (m): [900, 1000] MuzzleVelocities (m/s): [850, 880] -Max. velocity difference (m/s): 11.18 -Max. drop difference (cm): 9.08 -Max. tof difference (ms): 15.0 -Optimal airFriction: 0.00108571 +Max. Velocity diff (m/s): 12.89 +Max. Drop diff (cm): 8.75 +Max. Tof diff (ms): 13.5 +Optimal airFriction: 0.00110727 ########################################## Ammo Class: B_408_Ball MaxRanges (m): [1600, 1600] MuzzleVelocities (m/s): [862, 872] -Max. velocity difference (m/s): 28.15 -Max. drop difference (cm): 15.97 -Max. tof difference (ms): 77.0 -Optimal airFriction: 0.00044958 +Max. Velocity diff (m/s): 29.95 +Max. Drop diff (cm): 17.04 +Max. Tof diff (ms): 41.5 +Optimal airFriction: 0.00046249 ########################################## Ammo Class: ACE_408_Ball MaxRanges (m): [1200, 1200] MuzzleVelocities (m/s): [1057, 1067] -Max. velocity difference (m/s): 37.45 -Max. drop difference (cm): 7.45 -Max. tof difference (ms): 56.0 -Optimal airFriction: 0.00063655 +Max. Velocity diff (m/s): 39.19 +Max. Drop diff (cm): 7.92 +Max. Tof diff (ms): 30.0 +Optimal airFriction: 0.00065414 ########################################## Ammo Class: ACE_106x83mm_Ball -MaxRanges (m): [1400, 1400] +MaxRanges (m): [1500, 1500] MuzzleVelocities (m/s): [955, 965] -Max. velocity difference (m/s): 23.44 -Max. drop difference (cm): 8.93 -Max. tof difference (ms): 25.0 -Optimal airFriction: 0.00052047 +Max. Velocity diff (m/s): 23.14 +Max. Drop diff (cm): 12.44 +Max. Tof diff (ms): 31.5 +Optimal airFriction: 0.0005354 ########################################## Ammo Class: B_338_Ball MaxRanges (m): [1100, 1300] MuzzleVelocities (m/s): [880, 925] -Max. velocity difference (m/s): 31.95 -Max. drop difference (cm): 9.97 -Max. tof difference (ms): 33.0 -Optimal airFriction: 0.00059133 +Max. Velocity diff (m/s): 33.76 +Max. Drop diff (cm): 10.17 +Max. Tof diff (ms): 35.0 +Optimal airFriction: 0.00060841 ########################################## Ammo Class: B_338_NM_Ball MaxRanges (m): [1100, 1300] MuzzleVelocities (m/s): [790, 820] -Max. velocity difference (m/s): 24.5 -Max. drop difference (cm): 8.87 -Max. tof difference (ms): 27.0 -Optimal airFriction: 0.00052201 +Max. Velocity diff (m/s): 26.43 +Max. Drop diff (cm): 9.16 +Max. Tof diff (ms): 30.0 +Optimal airFriction: 0.00053639 ########################################## Ammo Class: ACE_338_Ball MaxRanges (m): [1200, 1300] MuzzleVelocities (m/s): [800, 830] -Max. velocity difference (m/s): 23.06 -Max. drop difference (cm): 11.27 -Max. tof difference (ms): 25.0 -Optimal airFriction: 0.0005219 +Max. Velocity diff (m/s): 24.93 +Max. Drop diff (cm): 10.92 +Max. Tof diff (ms): 27.0 +Optimal airFriction: 0.00053585 ########################################## Ammo Class: ACE_338_Ball_API526 MaxRanges (m): [1200, 1300] MuzzleVelocities (m/s): [880, 920] -Max. velocity difference (m/s): 17.05 -Max. drop difference (cm): 14.52 -Max. tof difference (ms): 29.0 -Optimal airFriction: 0.00069611 +Max. Velocity diff (m/s): 36.03 +Max. Drop diff (cm): 18.88 +Max. Tof diff (ms): 46.0 +Optimal airFriction: 0.0006922 ########################################## Ammo Class: B_50BW_Ball_F MaxRanges (m): [300, 400] MuzzleVelocities (m/s): [510, 596] -Max. velocity difference (m/s): 29.6 -Max. drop difference (cm): 2.19 -Max. tof difference (ms): 18.0 -Optimal airFriction: 0.00202645 +Max. Velocity diff (m/s): 30.87 +Max. Drop diff (cm): 2.32 +Max. Tof diff (ms): 19.0 +Optimal airFriction: 0.00205896 ########################################## Ammo Class: B_127x99_Ball MaxRanges (m): [1300, 1300] MuzzleVelocities (m/s): [895, 905] -Max. velocity difference (m/s): 19.44 -Max. drop difference (cm): 9.36 -Max. tof difference (ms): 24.0 -Optimal airFriction: 0.00057503 +Max. Velocity diff (m/s): 19.23 +Max. Drop diff (cm): 9.4 +Max. Tof diff (ms): 25.0 +Optimal airFriction: 0.00058679 ########################################## Ammo Class: ACE_127x99_Ball_AMAX MaxRanges (m): [1600, 1600] MuzzleVelocities (m/s): [855, 865] -Max. velocity difference (m/s): 16.61 -Max. drop difference (cm): 9.1 -Max. tof difference (ms): 20.0 -Optimal airFriction: 0.00036645 +Max. Velocity diff (m/s): 16.89 +Max. Drop diff (cm): 8.95 +Max. Tof diff (ms): 21.0 +Optimal airFriction: 0.00037397 ########################################## Ammo Class: B_127x108_Ball MaxRanges (m): [1300, 1300] MuzzleVelocities (m/s): [815, 825] -Max. velocity difference (m/s): 10.66 -Max. drop difference (cm): 11.74 -Max. tof difference (ms): 22.0 -Optimal airFriction: 0.000638 +Max. Velocity diff (m/s): 10.11 +Max. Drop diff (cm): 11.57 +Max. Tof diff (ms): 21.0 +Optimal airFriction: 0.00065098 ########################################## Ammo Class: ACE_762x51_Ball_Subsonic MaxRanges (m): [200, 300] MuzzleVelocities (m/s): [305, 340] -Max. velocity difference (m/s): 7.92 -Max. drop difference (cm): 3.77 -Max. tof difference (ms): 9.0 -Optimal airFriction: 0.00049899 +Max. Velocity diff (m/s): 11.63 +Max. Drop diff (cm): 6.03 +Max. Tof diff (ms): 14.0 +Optimal airFriction: 0.00060194 ########################################## Ammo Class: B_9x21_Ball MaxRanges (m): [200, 300] MuzzleVelocities (m/s): [380, 420] -Max. velocity difference (m/s): 34.77 -Max. drop difference (cm): 4.7 -Max. tof difference (ms): 31.0 -Optimal airFriction: 0.00208292 +Max. Velocity diff (m/s): 35.22 +Max. Drop diff (cm): 4.66 +Max. Tof diff (ms): 32.5 +Optimal airFriction: 0.00211064 ########################################## Ammo Class: ACE_9x18_Ball_57N181S MaxRanges (m): [100, 200, 200] MuzzleVelocities (m/s): [298, 330, 350] -Max. velocity difference (m/s): 18.03 -Max. drop difference (cm): 4.41 -Max. tof difference (ms): 17.0 -Optimal airFriction: 0.00190333 +Max. Velocity diff (m/s): 17.52 +Max. Drop diff (cm): 4.38 +Max. Tof diff (ms): 16.5 +Optimal airFriction: 0.0019192 ########################################## Ammo Class: ACE_9x19_Ball MaxRanges (m): [100, 200, 200] MuzzleVelocities (m/s): [340, 370, 400] -Max. velocity difference (m/s): 23.95 -Max. drop difference (cm): 3.75 -Max. tof difference (ms): 17.0 -Optimal airFriction: 0.0019835 +Max. Velocity diff (m/s): 24.28 +Max. Drop diff (cm): 3.82 +Max. Tof diff (ms): 17.5 +Optimal airFriction: 0.00201185 ########################################## Ammo Class: ACE_10x25_Ball MaxRanges (m): [200, 300, 300] MuzzleVelocities (m/s): [360, 400, 430] -Max. velocity difference (m/s): 32.8 -Max. drop difference (cm): 8.8 -Max. tof difference (ms): 34.0 -Optimal airFriction: 0.00181928 +Max. Velocity diff (m/s): 33.1 +Max. Drop diff (cm): 8.72 +Max. Tof diff (ms): 34.5 +Optimal airFriction: 0.00184252 ########################################## Ammo Class: ACE_765x17_Ball MaxRanges (m): [100, 200, 200] MuzzleVelocities (m/s): [282, 300, 320] -Max. velocity difference (m/s): 11.18 -Max. drop difference (cm): 4.3 -Max. tof difference (ms): 13.0 -Optimal airFriction: 0.00163356 +Max. Velocity diff (m/s): 10.61 +Max. Drop diff (cm): 4.08 +Max. Tof diff (ms): 12.5 +Optimal airFriction: 0.00165214 ########################################## Ammo Class: B_127x54_Ball MaxRanges (m): [500, 500] MuzzleVelocities (m/s): [295, 305] -Max. velocity difference (m/s): 2.28 -Max. drop difference (cm): 4.52 -Max. tof difference (ms): 5.0 -Optimal airFriction: 0.00019268 +Max. Velocity diff (m/s): 2.24 +Max. Drop diff (cm): 4.31 +Max. Tof diff (ms): 5.0 +Optimal airFriction: 0.00019568 ########################################## Ammo Class: B_45ACP_Ball MaxRanges (m): [100, 200, 200] MuzzleVelocities (m/s): [230, 250, 285] -Max. velocity difference (m/s): 3.5 -Max. drop difference (cm): 2.99 -Max. tof difference (ms): 6.0 -Optimal airFriction: 0.00081221 \ No newline at end of file +Max. Velocity diff (m/s): 2.9 +Max. Drop diff (cm): 2.87 +Max. Tof diff (ms): 5.5 +Optimal airFriction: 0.00082143