mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'abIntegration' into AdvancedBallistics
Conflicts: addons/advanced_ballistics/functions/fnc_displayProtractor.sqf addons/advanced_ballistics/functions/fnc_displayWindInfo.sqf
This commit is contained in:
commit
2a619b5aeb
@ -1,441 +0,0 @@
|
||||
class CfgAmmo
|
||||
{
|
||||
class BulletBase;
|
||||
class B_556x45_Ball_Tracer_Red;
|
||||
class B_762x51_Tracer_Red;
|
||||
class B_556x45_Ball : BulletBase
|
||||
{
|
||||
airFriction=-0.001265;
|
||||
hit=8;
|
||||
typicalSpeed=750;
|
||||
ACE_caliber=0.224;
|
||||
ACE_bulletLength=0.906;
|
||||
ACE_bulletMass=62;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75};
|
||||
ACE_ballisticCoefficients[]={0.151};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900};
|
||||
ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0};
|
||||
};
|
||||
class ACE_556x45_Ball_Mk262 : B_556x45_Ball
|
||||
{
|
||||
airFriction=-0.001125;
|
||||
caliber=0.6;
|
||||
deflecting=18;
|
||||
hit=11;
|
||||
typicalSpeed=836;
|
||||
ACE_caliber=0.224;
|
||||
ACE_bulletLength=0.906;
|
||||
ACE_bulletMass=77;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.361};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={624, 816, 832, 838};
|
||||
ACE_barrelLengths[]={7.5, 14.5, 18, 20};
|
||||
};
|
||||
class ACE_556x45_Ball_Mk318 : B_556x45_Ball
|
||||
{
|
||||
airFriction=-0.001120;
|
||||
caliber=0.6;
|
||||
deflecting=18;
|
||||
hit=9;
|
||||
typicalSpeed=886;
|
||||
ACE_caliber=0.224;
|
||||
ACE_bulletLength=0.906;
|
||||
ACE_bulletMass=62;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.307};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={780, 886, 950};
|
||||
ACE_barrelLengths[]={10, 15.5, 20};
|
||||
};
|
||||
class ACE_545x39_Ball_7N6M : B_556x45_Ball
|
||||
{
|
||||
airFriction=-0.001162;
|
||||
caliber=0.5;
|
||||
deflecting=18;
|
||||
hit=7;
|
||||
typicalSpeed=880;
|
||||
ACE_caliber=0.220;
|
||||
ACE_bulletLength=0.85;
|
||||
ACE_bulletMass=52.9;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.168};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={780, 880, 920};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
};
|
||||
class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Red
|
||||
{
|
||||
airFriction=-0.001162;
|
||||
caliber=0.5;
|
||||
deflecting=18;
|
||||
hit=7;
|
||||
typicalSpeed=883;
|
||||
ACE_caliber=0.220;
|
||||
ACE_bulletLength=0.85;
|
||||
ACE_bulletMass=49.8;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.168};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={785, 883, 925};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
};
|
||||
class B_65x39_Caseless : BulletBase
|
||||
{
|
||||
airFriction=-0.000772;
|
||||
typicalSpeed=800;
|
||||
ACE_caliber=0.264;
|
||||
ACE_bulletLength=1.295;
|
||||
ACE_bulletMass=123;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.263};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={760, 788, 800, 805};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
};
|
||||
class B_762x51_Ball : BulletBase
|
||||
{
|
||||
airFriction=-0.001035;
|
||||
typicalSpeed=833;
|
||||
hit=14;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=146;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.2};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={700, 800, 820, 833, 845};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||
};
|
||||
class ACE_762x51_Ball_M118LR : B_762x51_Ball
|
||||
{
|
||||
airFriction=-0.0008525;
|
||||
caliber=1.05;
|
||||
hit=16;
|
||||
typicalSpeed=790;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.24;
|
||||
ACE_bulletMass=175;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.505, 0.496, 0.485, 0.485, 0.485};
|
||||
ACE_velocityBoundaries[]={853, 549, 549, 549};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={750, 780, 790, 794};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
};
|
||||
class ACE_762x51_Ball_Subsonic : B_762x51_Ball
|
||||
{
|
||||
airFriction=-0.000535;
|
||||
caliber=0.5;
|
||||
hit=16;
|
||||
typicalSpeed=790;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.340;
|
||||
ACE_bulletMass=200;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.235};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={305, 325, 335, 340};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
};
|
||||
class ACE_762x54_Ball_7N14 : B_762x51_Ball
|
||||
{
|
||||
airFriction=-0.001023;
|
||||
caliber=0.95;
|
||||
hit=15;
|
||||
typicalSpeed=820;
|
||||
ACE_caliber=0.312;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=152;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.4};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={700, 800, 820, 833};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
};
|
||||
class ACE_762x54_Ball_7T2 : B_762x51_Tracer_Red
|
||||
{
|
||||
airFriction=-0.001023;
|
||||
caliber=0.9;
|
||||
hit=15;
|
||||
typicalSpeed=800;
|
||||
ACE_caliber=0.312;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=149;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.395};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={680, 750, 798, 800};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
};
|
||||
class ACE_762x35_Ball : B_762x51_Ball
|
||||
{
|
||||
airFriction=-0.000821;
|
||||
caliber=0.9;
|
||||
hit=11;
|
||||
typicalSpeed=790;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.153;
|
||||
ACE_bulletMass=125;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.349, 0.338, 0.330, 0.310};
|
||||
ACE_velocityBoundaries[]={792, 610, 488};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={620, 655, 675};
|
||||
ACE_barrelLengths[]={9, 16, 20};
|
||||
};
|
||||
class ACE_762x39_Ball : B_762x51_Ball
|
||||
{
|
||||
airFriction=-0.0015168;
|
||||
hit=12;
|
||||
typicalSpeed=716;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=123;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.275};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={650, 716, 750};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
};
|
||||
class ACE_762x39_Ball_57N231P : B_762x51_Tracer_Red
|
||||
{
|
||||
airFriction=-0.0015168;
|
||||
hit=12;
|
||||
typicalSpeed=716;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=117;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.275};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={650, 716, 750};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
};
|
||||
class B_9x21_Ball : BulletBase
|
||||
{
|
||||
airFriction=-0.00125;
|
||||
typicalSpeed=390;
|
||||
hit=6;
|
||||
ACE_caliber=0.356;
|
||||
ACE_bulletLength=0.610;
|
||||
ACE_bulletMass=115;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.17};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={350, 390, 420};
|
||||
ACE_barrelLengths[]={4, 5, 9};
|
||||
};
|
||||
class ACE_9x18_Ball_57N181S : B_9x21_Ball
|
||||
{
|
||||
hit=5;
|
||||
airFriction=-0.001234;
|
||||
typicalSpeed=298;
|
||||
ACE_caliber=0.365;
|
||||
ACE_bulletLength=0.610;
|
||||
ACE_bulletMass=92.6;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.125};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={298, 330, 350};
|
||||
ACE_barrelLengths[]={3.8, 5, 9};
|
||||
};
|
||||
class ACE_9x19_Ball : B_9x21_Ball
|
||||
{
|
||||
airFriction=-0.001234;
|
||||
typicalSpeed=370;
|
||||
hit=6;
|
||||
ACE_caliber=0.355;
|
||||
ACE_bulletLength=0.610;
|
||||
ACE_bulletMass=124;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.165};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={340, 370, 400};
|
||||
ACE_barrelLengths[]={4, 5, 9};
|
||||
};
|
||||
class ACE_10x25_Ball : B_9x21_Ball
|
||||
{
|
||||
airFriction=-0.00168;
|
||||
typicalSpeed=425;
|
||||
hit=7;
|
||||
ACE_caliber=0.5;
|
||||
ACE_bulletLength=0.764;
|
||||
ACE_bulletMass=165;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.189};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={360, 400, 430};
|
||||
ACE_barrelLengths[]={4, 4.61, 9};
|
||||
};
|
||||
class ACE_765x17_Ball: B_9x21_Ball
|
||||
{
|
||||
airFriction=-0.001213;
|
||||
typicalSpeed=282;
|
||||
hit=7;
|
||||
ACE_caliber=0.3125;
|
||||
ACE_bulletLength=0.610;
|
||||
ACE_bulletMass=65;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.118};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={282, 300, 320};
|
||||
ACE_barrelLengths[]={4, 5, 9};
|
||||
};
|
||||
class ACE_303_Ball : ACE_762x51_Ball_M118LR
|
||||
{
|
||||
airFriction=-0.00083;
|
||||
typicalSpeed=761;
|
||||
ACE_caliber=0.311;
|
||||
ACE_bulletLength=1.227;
|
||||
ACE_bulletMass=174;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.499, 0.493, 0.48};
|
||||
ACE_velocityBoundaries[]={671, 549};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={748, 761, 765};
|
||||
ACE_barrelLengths[]={20, 24, 26};
|
||||
};
|
||||
class B_408_Ball : BulletBase
|
||||
{
|
||||
airFriction=-0.000395;
|
||||
typicalSpeed=910;
|
||||
ACE_caliber=0.408;
|
||||
ACE_bulletLength=2.126;
|
||||
ACE_bulletMass=410;
|
||||
ACE_transonicStabilityCoef=1;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.97};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={910};
|
||||
ACE_barrelLengths[]={29};
|
||||
};
|
||||
class ACE_106x83mm_Ball : B_408_Ball
|
||||
{
|
||||
ACE_caliber=0.416;
|
||||
ACE_bulletLength=2.089;
|
||||
ACE_bulletMass=398;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.72};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={960};
|
||||
ACE_barrelLengths[]={29};
|
||||
};
|
||||
class ACE_338_Ball : B_408_Ball
|
||||
{
|
||||
airFriction=-0.000526;
|
||||
caliber=1.55;
|
||||
deflecting=12;
|
||||
hit=20;
|
||||
typicalSpeed=826;
|
||||
ACE_caliber=0.338;
|
||||
ACE_bulletLength=1.70;
|
||||
ACE_bulletMass=300;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.381};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={820, 826, 830};
|
||||
ACE_barrelLengths[]={24, 26.5, 28};
|
||||
};
|
||||
class B_127x99_Ball : BulletBase
|
||||
{
|
||||
airFriction=-0.0006;
|
||||
typicalSpeed=853;
|
||||
ACE_caliber=0.510;
|
||||
ACE_bulletLength=2.310;
|
||||
ACE_bulletMass=647;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.670};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={853};
|
||||
ACE_barrelLengths[]={29};
|
||||
};
|
||||
class ACE_127x99_Ball_AMAX : B_127x99_Ball
|
||||
{
|
||||
ACE_caliber=0.510;
|
||||
ACE_bulletLength=2.540;
|
||||
ACE_bulletMass=750;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={1.050};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={860};
|
||||
ACE_barrelLengths[]={29};
|
||||
};
|
||||
class B_127x108_Ball : BulletBase
|
||||
{
|
||||
typicalSpeed=820;
|
||||
ACE_caliber=0.511;
|
||||
ACE_bulletLength=2.520;
|
||||
ACE_bulletMass=745;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.63};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={820};
|
||||
ACE_barrelLengths[]={28.7};
|
||||
};
|
||||
class B_45ACP_Ball : BulletBase
|
||||
{
|
||||
airFriction=-0.0007182;
|
||||
typicalSpeed=250;
|
||||
ACE_caliber=0.452;
|
||||
ACE_bulletLength=0.68;
|
||||
ACE_bulletMass=230;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.195};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={230, 250, 285};
|
||||
ACE_barrelLengths[]={4, 5, 9};
|
||||
};
|
||||
};
|
@ -1,11 +1,10 @@
|
||||
ace_winddeflection
|
||||
ace_advanced_ballistics
|
||||
===============
|
||||
|
||||
Wind deflection for projectiles/bullets.
|
||||
The Advanced Ballistics module introduces advanced external- and internal ballistics to the game.
|
||||
|
||||
## Maintainers
|
||||
|
||||
The people responsible for merging changes to this component or answering potential questions.
|
||||
|
||||
- [Glowbal](https://github.com/Glowbal)
|
||||
- [Ruthberg] (http://github.com/Ulteq)
|
@ -1,34 +1,5 @@
|
||||
class RscTitles
|
||||
{
|
||||
class RscWindIntuitive
|
||||
{
|
||||
idd=-1;
|
||||
onLoad="with uiNameSpace do { RscWindIntuitive = _this select 0 };";
|
||||
movingEnable=0;
|
||||
duration=60;
|
||||
fadeIn="false";
|
||||
fadeOut="false";
|
||||
class controls
|
||||
{
|
||||
class RscWindIntuitive
|
||||
{
|
||||
idc=132948;
|
||||
type=0;
|
||||
style=48;
|
||||
font="TahomaB";
|
||||
colorBackground[]={0,0,0,0};
|
||||
colorText[]={0,0,0,0};
|
||||
x="SafeZoneX + 0.001";
|
||||
y="SafeZoneY + 0.001";
|
||||
w=0.2;
|
||||
h=0.2*4/3;
|
||||
size=0.034;
|
||||
sizeEx=0.027;
|
||||
text="";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class RscTurretDial
|
||||
{
|
||||
idd=-1;
|
||||
|
@ -18,38 +18,8 @@ GVAR(WindInfoStart) = time;
|
||||
GVAR(Protractor) = false;
|
||||
GVAR(ProtractorStart) = time;
|
||||
|
||||
GVAR(Altitude) = 0;
|
||||
GVAR(Latitude) = 50;
|
||||
|
||||
if (worldName in ["Chernarus", "Bootcamp_ACR", "Woodland_ACR", "utes"]) then { GVAR(Latitude) = 50; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Altis", "Stratis"]) then { GVAR(Latitude) = 40; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Takistan", "Zargabad", "Mountains_ACR"]) then { GVAR(Latitude) = 35; GVAR(Altitude) = 2000; };
|
||||
if (worldName in ["Shapur_BAF", "ProvingGrounds_PMC"]) then { GVAR(Latitude) = 35; GVAR(Altitude) = 100; };
|
||||
if (worldName in ["fallujah"]) then { GVAR(Latitude) = 33; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["fata", "Abbottabad"]) then { GVAR(Latitude) = 30; GVAR(Altitude) = 1000; };
|
||||
if (worldName in ["sfp_wamako"]) then { GVAR(Latitude) = 14; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["sfp_sturko"]) then { GVAR(Latitude) = 56; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Bornholm"]) then { GVAR(Latitude) = 55; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Imrali"]) then { GVAR(Latitude) = 40; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Caribou"]) then { GVAR(Latitude) = 68; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Namalsk"]) then { GVAR(Latitude) = 65; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["MCN_Aliabad"]) then { GVAR(Latitude) = 36; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Clafghan"]) then { GVAR(Latitude) = 34; GVAR(Altitude) = 640; };
|
||||
if (worldName in ["Sangin", "hellskitchen"]) then { GVAR(Latitude) = 32; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Sara"]) then { GVAR(Latitude) = 40; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["reshmaan"]) then { GVAR(Latitude) = 35; GVAR(Altitude) = 2000; };
|
||||
if (worldName in ["Thirsk"]) then { GVAR(Latitude) = 65; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["lingor"]) then { GVAR(Latitude) = -4; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Panthera3"]) then { GVAR(Latitude) = 46; GVAR(Altitude) = 0; };
|
||||
|
||||
// TODO: Remove this hack once the weather engine is up and running
|
||||
if (isNil QUOTE(EGVAR(weather,currentTemperature))) then { EGVAR(weather,currentTemperature) = 24; };
|
||||
if (isNil QUOTE(EGVAR(weather,currentHumidity))) then { EGVAR(weather,currentHumidity) = 50; };
|
||||
|
||||
GVAR(SimulationPrecision) = 1;
|
||||
|
||||
GVAR(INIT_MESSAGE_ENABLED) = true;
|
||||
|
||||
GVAR(WindEnabled) = true;
|
||||
GVAR(SpinDriftEnabled) = true;
|
||||
GVAR(CoriolisEnabled) = true;
|
||||
@ -61,6 +31,7 @@ GVAR(BulletTraceEnabled) = true;
|
||||
GVAR(AtmosphericDensitySimulationEnabled) = true;
|
||||
GVAR(BarrelLengthInfluenceEnabled) = true;
|
||||
GVAR(VehicleGunnerEnabled) = true;
|
||||
GVAR(ExtensionsEnabled) = false;
|
||||
|
||||
GVAR(INIT_MESSAGE_ENABLED) = false;
|
||||
|
||||
[] call FUNC(initializeTerrainExtension);
|
||||
|
@ -11,9 +11,7 @@ PREP(calculateRoughnessLength);
|
||||
PREP(calculateStabilityFactor);
|
||||
PREP(calculateWindSpeed);
|
||||
PREP(displayProtractor);
|
||||
PREP(displayWindInfo);
|
||||
PREP(handleFired);
|
||||
PREP(handleFiredExtension);
|
||||
PREP(initializeTerrainExtension);
|
||||
|
||||
ADDON = true;
|
||||
|
@ -5,23 +5,14 @@ class CfgPatches {
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ACE_common", "ACE_weather"};
|
||||
versionDesc = "ACE Advanced Ballistics";
|
||||
version = VERSION;
|
||||
author[] = {$STR_ACE_Common_ACETeam, "Glowbal", "Ruthberg"};
|
||||
};
|
||||
};
|
||||
|
||||
class CfgAddons {
|
||||
class PreloadAddons {
|
||||
class ADDON {
|
||||
list[] = {QUOTE(ADDON)};
|
||||
};
|
||||
requiredAddons[] = {"ACE_ballistics", "ACE_weather"};
|
||||
author[] = {"Ruthberg"};
|
||||
authorUrl = "https://github.com/ulteq";
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgAmmo.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "RscTitles.hpp"
|
@ -1,3 +1,19 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Displays a wind info (colored arrow) in the top left corner of the screen
|
||||
*
|
||||
* Arguments:
|
||||
* 0: temperature - degrees celcius <NUMBER>
|
||||
* 1: pressure - hPa <NUMBER>
|
||||
* 2: relativeHumidity - value between 0.0 and 1.0 <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: density of air - kg * m^(-3) <NUMBER>
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "defines.h"
|
||||
|
||||
|
@ -1,3 +1,18 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Calculates the ammo temperature induced muzzle velocity shift
|
||||
*
|
||||
* Arguments:
|
||||
* 0: ammo - classname <string>
|
||||
* 1: temperature - degrees celcius <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: muzzle velocity shift - m/s <NUMBER>
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ammo", "_temperature", "_muzzleVelocityTable", "_muzzleVelocityShift", "_temperatureIndexA", "_temperatureIndexB", "_temperatureRatio"];
|
||||
|
@ -1,3 +1,20 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Calculates the atmospherically corrected ballistic coefficient
|
||||
*
|
||||
* Arguments:
|
||||
* 0: ballistic coefficient - G1-G7 <NUMBER>
|
||||
* 1: temperature - degrees celcius <NUMBER>
|
||||
* 2: pressure - hPa <NUMBER>
|
||||
* 3: relativeHumidity - value between 0.0 and 1.0 <NUMBER>
|
||||
* 4: atmosphereModel - ICAO or ASM <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* corrected ballistic coefficient <NUMBER>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "defines.h"
|
||||
|
||||
|
@ -1,3 +1,19 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Calculates the muzzle velocity shift caused by different barrel lengths
|
||||
*
|
||||
* Arguments:
|
||||
* 0: ammo - classname <string>
|
||||
* 0: weapon - classname <string>
|
||||
* 1: muzzle velocity - m/s <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: muzzle velocity shift - m/s <NUMBER>
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ammo", "_weapon", "_barrelLength", "_muzzleVelocityTable", "_barrelLengthTable", "_muzzleVelocity", "_lowerIndex", "_upperIndex", "_barrelLengthRatio", "_muzzleVelocityNew"];
|
||||
|
@ -1,3 +1,16 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Calculates the terrain hellmann exponent at a given world position
|
||||
*
|
||||
* Arguments:
|
||||
* 0: _this - world position <posASL>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: hellmann exponent <NUMBER>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_hellmann_exponents", "_hellmann_index", "_windSource", "_nearObjects", "_isWater"];
|
||||
|
@ -1,3 +1,19 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Calculates the retardation of the bullet
|
||||
*
|
||||
* Arguments:
|
||||
* 0: drag model - 1-7 <integer>
|
||||
* 1: drag coefficient - bc <NUMBER>
|
||||
* 2: velocity - m/s <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: retardation - m/(s^2) <NUMBER>
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
// Source: GNU Exterior Ballistics
|
||||
|
@ -1,3 +1,16 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Calculates the terrain roughness length at a given world position
|
||||
*
|
||||
* Arguments:
|
||||
* 0: _this - world position <posASL>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: roughness length <NUMBER>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_roughness_lengths", "_windSource", "_nearBuildings", "_isWater"];
|
||||
|
@ -1,3 +1,23 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Calculates the stability factor of a bullet
|
||||
*
|
||||
* Arguments:
|
||||
* 0: caliber - inches <NUMBER>
|
||||
* 1: bullet length - inches <NUMBER>
|
||||
* 2: bullet mass - grains <NUMBER>
|
||||
* 3: barrel twist - inches <NUMBER>
|
||||
* 4: muzzle velocity shift - m/s <NUMBER>
|
||||
* 5: temperature - degrees celcius <NUMBER>
|
||||
* 6: barometric Pressure - hPA <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: stability factor <NUMBER>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
private ["_caliber", "_bulletLength", "_bulletMass", "_barrelTwist", "_muzzleVelocity", "_temperature", "_barometricPressure", "_l", "_t", "_stabilityFactor"];
|
||||
_caliber = _this select 0;
|
||||
_bulletLength = _this select 1;
|
||||
|
@ -1,3 +1,16 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Calculates the true wind speed at a given world position
|
||||
*
|
||||
* Arguments:
|
||||
* 0: _this - world position <posASL>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: wind speed - m/s <NUMBER>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_windSpeed", "_windDir", "_height", "_newWindSpeed", "_windSource", "_roughnessLength"];
|
||||
|
@ -1,3 +1,14 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Displays a protractor in the top left corner of the screen
|
||||
*
|
||||
* Argument:
|
||||
* None
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define __dsp (uiNamespace getVariable "RscProtractor")
|
||||
@ -15,19 +26,13 @@ if (weaponLowered ACE_player) exitWith { true };
|
||||
if (vehicle ACE_player != ACE_player) exitWith { true };
|
||||
if (currentWeapon ACE_player != primaryWeapon ACE_player) exitWith { true };
|
||||
|
||||
[] spawn {
|
||||
2 cutText ["", "PLAIN"];
|
||||
GVAR(WindInfo) = false;
|
||||
0 cutText ["", "PLAIN"];
|
||||
GVAR(Protractor) = true;
|
||||
|
||||
[{
|
||||
// abort condition
|
||||
if (!(GVAR(Protractor) && !(weaponLowered ACE_player) && currentWeapon ACE_player == primaryWeapon ACE_player)) exitWith {
|
||||
GVAR(Protractor) = false;
|
||||
1 cutText ["", "PLAIN"];
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
while {GVAR(Protractor) && !(weaponLowered ACE_player) && currentWeapon ACE_player == primaryWeapon ACE_player} do {
|
||||
_refPosition = [SafeZoneX + 0.001, SafeZoneY + 0.001, 0.2, 0.2 * 4/3];
|
||||
|
||||
_inclinationAngle = asin((ACE_player weaponDirection currentWeapon ACE_player) select 2);
|
||||
@ -46,6 +51,11 @@ GVAR(Protractor) = true;
|
||||
__ctrl2 ctrlSetText QUOTE(PATHTOF(UI\protractor_marker.paa));
|
||||
__ctrl2 ctrlSetTextColor [1, 1, 1, 1];
|
||||
|
||||
}, 0.1, _this select 0] call CBA_fnc_addPerFrameHandler;
|
||||
sleep 0.1;
|
||||
};
|
||||
|
||||
GVAR(Protractor) = false;
|
||||
1 cutText ["", "PLAIN"];
|
||||
};
|
||||
|
||||
true
|
||||
|
@ -1,65 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define __dsp (uiNamespace getVariable "RscWindIntuitive")
|
||||
#define __ctrl (__dsp displayCtrl 132948)
|
||||
|
||||
private ["_windSpeed", "_windDir", "_playerDir", "_windIndex", "_windColor", "_newWindSpeed", "_windSource", "_height"];
|
||||
|
||||
if (GVAR(WindInfo)) exitWith {
|
||||
GVAR(WindInfo) = false;
|
||||
0 cutText ["", "PLAIN"];
|
||||
true
|
||||
};
|
||||
if (underwater ACE_player) exitWith { true };
|
||||
if (vehicle ACE_player != ACE_player) exitWith { true };
|
||||
|
||||
2 cutText ["", "PLAIN"];
|
||||
GVAR(Protractor) = false;
|
||||
1 cutText ["", "PLAIN"];
|
||||
GVAR(WindInfo) = true;
|
||||
|
||||
[{
|
||||
// abort condition
|
||||
if (!(GVAR(WindInfo) && !(underwater ACE_player) && vehicle ACE_player == ACE_player)) exitWith {
|
||||
GVAR(WindInfo) = false;
|
||||
0 cutText ["", "PLAIN"];
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
_windIndex = 12;
|
||||
_windColor = [1, 1, 1, 1];
|
||||
|
||||
_windSpeed = (eyePos ACE_player) call FUNC(calculateWindSpeed);
|
||||
|
||||
if (_windSpeed > 0.2) then {
|
||||
_playerDir = getDir ACE_player;
|
||||
_windDir = (wind select 0) atan2 (wind select 1);
|
||||
_windIndex = round(((_playerDir - _windDir + 360) % 360) / 30);
|
||||
_windIndex = _windIndex % 12;
|
||||
};
|
||||
|
||||
// Color Codes from https://en.wikipedia.org/wiki/Beaufort_scale#Modern_scale
|
||||
if (_windSpeed > 0.3) then { _windColor = [0.796, 1, 1, 1]; };
|
||||
if (_windSpeed > 1.5) then { _windColor = [0.596, 0.996, 0.796, 1]; };
|
||||
if (_windSpeed > 3.3) then { _windColor = [0.596, 0.996, 0.596, 1]; };
|
||||
if (_windSpeed > 5.4) then { _windColor = [0.6, 0.996, 0.4, 1]; };
|
||||
if (_windSpeed > 7.9) then { _windColor = [0.6, 0.996, 0.047, 1]; };
|
||||
if (_windSpeed > 10.7) then { _windColor = [0.8, 0.996, 0.059, 1]; };
|
||||
if (_windSpeed > 13.8) then { _windColor = [1, 0.996, 0.067, 1]; };
|
||||
if (_windSpeed > 17.1) then { _windColor = [1, 0.796, 0.051, 1]; };
|
||||
if (_windSpeed > 20.7) then { _windColor = [1, 0.596, 0.039, 1]; };
|
||||
if (_windSpeed > 24.4) then { _windColor = [1, 0.404, 0.031, 1]; };
|
||||
if (_windSpeed > 28.4) then { _windColor = [1, 0.22, 0.027, 1]; };
|
||||
if (_windSpeed > 32.6) then { _windColor = [1, 0.078, 0.027, 1]; };
|
||||
|
||||
0 cutRsc ["RscWindIntuitive", "PLAIN", 1, false];
|
||||
|
||||
__ctrl ctrlSetScale 0.75;
|
||||
__ctrl ctrlCommit 0;
|
||||
|
||||
__ctrl ctrlSetText format[QUOTE(PATHTOF(UI\wind%1.paa)), _windIndex];
|
||||
__ctrl ctrlSetTextColor _windColor;
|
||||
|
||||
}, 0.5, _this select 0] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
true
|
@ -1,6 +1,7 @@
|
||||
/*
|
||||
* Author: Glowbal, Ruthberg
|
||||
* Handles wind deflection for projectiles.
|
||||
*
|
||||
* Handles advanced ballistics for (BulletBase) projectiles
|
||||
*
|
||||
* Arguments:
|
||||
* 0: unit - Object the event handler is assigned to <OBJECT>
|
||||
@ -14,9 +15,6 @@
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* [clientFiredBIS-XEH] call ace_winddeflection_fnc_handleFired
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
@ -100,7 +98,7 @@ _stabilityFactor = 1.5;
|
||||
|
||||
if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
||||
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
|
||||
_barometricPressure = 1013.25 * exp(-(GVAR(Altitude) + ((getPosASL _bullet) select 2)) / 7990) - 10 * overcast;
|
||||
_barometricPressure = 1013.25 * exp(-(EGVAR(weather,Altitude) + ((getPosASL _bullet) select 2)) / 7990) - 10 * overcast;
|
||||
_stabilityFactor = [_caliber, _bulletLength, _bulletMass, _barrelTwist, _muzzleVelocity, _temperature, _barometricPressure] call FUNC(calculateStabilityFactor);
|
||||
};
|
||||
|
||||
@ -145,6 +143,54 @@ if (count GVAR(bulletDatabaseFreeIndices) > 0) then {
|
||||
GVAR(bulletDatabaseFreeIndices) = GVAR(bulletDatabaseFreeIndices) - [_index];
|
||||
};
|
||||
|
||||
#ifdef USE_ADVANCEDBALLISTICS_DLL
|
||||
"AdvancedBallistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", _index, _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)];
|
||||
GVAR(bulletDatabase) set[_index, [_bullet, _caliber, _bulletTraceVisible, _index]];
|
||||
|
||||
if ((GVAR(bulletDatabaseOccupiedIndices) pushBack _index) == 0) then {
|
||||
[{
|
||||
private ["_bulletDatabaseEntry", "_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
|
||||
|
||||
{
|
||||
_bulletDatabaseEntry = (GVAR(bulletDatabase) select _x);
|
||||
_bullet = _bulletDatabaseEntry select 0;
|
||||
_index = _bulletDatabaseEntry select 3;
|
||||
if (!alive _bullet) then {
|
||||
GVAR(bulletDatabaseOccupiedIndices) = GVAR(bulletDatabaseOccupiedIndices) - [_index];
|
||||
GVAR(bulletDatabaseFreeIndices) pushBack _index;
|
||||
};
|
||||
true
|
||||
} count GVAR(bulletDatabaseOccupiedIndices);
|
||||
|
||||
if (count GVAR(bulletDatabaseOccupiedIndices) == 0) exitWith {
|
||||
GVAR(bulletDatabase) = [];
|
||||
GVAR(bulletDatabaseOccupiedIndices) = [];
|
||||
GVAR(bulletDatabaseFreeIndices) = [];
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
{
|
||||
_bulletDatabaseEntry = (GVAR(bulletDatabase) select _x);
|
||||
_bullet = _bulletDatabaseEntry select 0;
|
||||
_caliber = _bulletDatabaseEntry select 1;
|
||||
_bulletTraceVisible = _bulletDatabaseEntry select 2;
|
||||
_index = _bulletDatabaseEntry select 3;
|
||||
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_bulletPosition = getPosASL _bullet;
|
||||
|
||||
if (_bulletTraceVisible && vectorMagnitude _bulletVelocity > 600) then {
|
||||
drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.4*_caliber,0.2*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""];
|
||||
};
|
||||
|
||||
call compile ("AdvancedBallistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, floor(time), time - floor(time)]);
|
||||
|
||||
true
|
||||
} count GVAR(bulletDatabaseOccupiedIndices);
|
||||
|
||||
}, 0, []] call CBA_fnc_addPerFrameHandler;
|
||||
};
|
||||
#else
|
||||
GVAR(bulletDatabase) set[_index, [_bullet, _caliber, _airFriction, _muzzleVelocity, _stabilityFactor, _transonicStabilityCoef, _twistDirection, _unit, _bulletTraceVisible, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _index]];
|
||||
GVAR(bulletDatabaseStartTime) set[_index, time];
|
||||
GVAR(bulletDatabaseSpeed) set[_index, 0];
|
||||
@ -252,7 +298,7 @@ if ((GVAR(bulletDatabaseOccupiedIndices) pushBack _index) == 0) then {
|
||||
};
|
||||
|
||||
if (GVAR(AtmosphericDensitySimulationEnabled)) then {
|
||||
_pressure = 1013.25 * exp(-(GVAR(Altitude) + (_bulletPosition select 2)) / 7990) - 10 * overcast;
|
||||
_pressure = 1013.25 * exp(-(EGVAR(weather,Altitude) + (_bulletPosition select 2)) / 7990) - 10 * overcast;
|
||||
_temperature = GET_TEMPERATURE_AT_HEIGHT(_bulletPosition select 2);
|
||||
_humidity = EGVAR(weather,currentHumidity);
|
||||
_airDensity = STD_AIR_DENSITY_ICAO;
|
||||
@ -279,7 +325,7 @@ if ((GVAR(bulletDatabaseOccupiedIndices) pushBack _index) == 0) then {
|
||||
_bulletVelocity = _bulletVelocity vectorDiff _accel;
|
||||
} else {
|
||||
if (GVAR(AtmosphericDensitySimulationEnabled)) then {
|
||||
_pressureDeviation = 1013.25 * exp(-(GVAR(Altitude) + (_bulletPosition select 2)) / 7990) - 1013.25 - 10 * overcast;
|
||||
_pressureDeviation = 1013.25 * exp(-(EGVAR(weather,Altitude) + (_bulletPosition select 2)) / 7990) - 1013.25 - 10 * overcast;
|
||||
_temperature = GET_TEMPERATURE_AT_HEIGHT(_bulletPosition select 2);
|
||||
_humidity = EGVAR(weather,currentHumidity);
|
||||
_airFriction = _airFriction + ((_temperature - 15) * 0.0000015 + _humidity * 0.0000040 + _pressureDeviation * -0.0000009);
|
||||
@ -297,7 +343,7 @@ if ((GVAR(bulletDatabaseOccupiedIndices) pushBack _index) == 0) then {
|
||||
};
|
||||
|
||||
if (GVAR(CoriolisEnabled) && _bulletSpeedAvg > 0) then {
|
||||
_horizontalDeflection = 0.0000729 * (_unit distanceSqr _bullet) * sin(GVAR(Latitude)) / _bulletSpeedAvg;
|
||||
_horizontalDeflection = 0.0000729 * (_unit distanceSqr _bullet) * sin(EGVAR(weather,Latitude)) / _bulletSpeedAvg;
|
||||
_horizontalDeflectionPartial = _horizontalDeflection - (GVAR(bulletDatabaseHDeflect) select _index);
|
||||
GVAR(bulletDatabaseHDeflect) set[_index, _horizontalDeflection];
|
||||
_vect = [sin(_bulletDir + 90) * _horizontalDeflectionPartial, cos(_bulletDir + 90) * _horizontalDeflectionPartial, 0];
|
||||
@ -308,7 +354,7 @@ if ((GVAR(bulletDatabaseOccupiedIndices) pushBack _index) == 0) then {
|
||||
/*
|
||||
// Negligible effect on the trajectory
|
||||
if (GVAR(EoetvoesEnabled)) then {
|
||||
_centripetalAccel = 2 * 0.0000729 * (_muzzleVelocity / -32.2) * cos(GVAR(Latitude)) * sin(_bulletDir);
|
||||
_centripetalAccel = 2 * 0.0000729 * (_muzzleVelocity / -32.2) * cos(EGVAR(weather,Latitude)) * sin(_bulletDir);
|
||||
_accel = [0, 0, -(_centripetalAccel * _deltaT)];
|
||||
|
||||
_bulletVelocity = _bulletVelocity vectorAdd _accel;
|
||||
@ -344,3 +390,4 @@ if ((GVAR(bulletDatabaseOccupiedIndices) pushBack _index) == 0) then {
|
||||
|
||||
}, 0, []] call CBA_fnc_addPerFrameHandler;
|
||||
};
|
||||
#endif
|
||||
|
@ -1,191 +0,0 @@
|
||||
/*
|
||||
* Author: Glowbal, Ruthberg
|
||||
* Handles wind deflection for projectiles using the advanced ballistics dll extension.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: unit - Object the event handler is assigned to <OBJECT>
|
||||
* 1: weapon - Fired weapon <STRING>
|
||||
* 2: muzzle - Muzzle that was used <STRING>
|
||||
* 3: mode - Current mode of the fired weapon <STRING>
|
||||
* 4: ammo - Ammo used <STRING>
|
||||
* 5: magazine - magazine name which was used <STRING>
|
||||
* 6: projectile - Object of the projectile that was shot <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* [clientFiredBIS-XEH] call ace_advanced_ballistics_fnc_handleFired
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "defines.h"
|
||||
|
||||
private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_bulletTranslation", "_airFriction", "_dragModel", "_velocityBoundaryData", "_muzzleVelocity", "_muzzleVelocityCoef", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_bulletWeight", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef", "_ACE_Elevation", "_ACE_Windage", "_ID"];
|
||||
_unit = _this select 0;
|
||||
_weapon = _this select 1;
|
||||
_mode = _this select 3;
|
||||
_ammo = _this select 4;
|
||||
_magazine = _this select 5;
|
||||
_bullet = _this select 6;
|
||||
|
||||
if (isDedicated) exitWith {};
|
||||
if (!alive _bullet) exitWith {};
|
||||
if (!([_unit] call EFUNC(common,isPlayer))) exitWith {};
|
||||
if (underwater _unit) exitWith {};
|
||||
if (!(_ammo isKindOf "BulletBase")) exitWith {};
|
||||
if (_unit distanceSqr ACE_player > 9000000) exitWith {};
|
||||
if (GVAR(ONLY_ACTIVE_FOR_LOCAL_PLAYER) && _unit != ACE_player) exitWith {};
|
||||
if (!GVAR(VehicleGunnerEnabled) && !(_unit isKindOf "Man")) exitWith {};
|
||||
if (GVAR(DISABLED_IN_FULL_AUTO_MODE) && getNumber(configFile >> "cfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) exitWith {};
|
||||
|
||||
_airFriction = getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction");
|
||||
_muzzleVelocity = getNumber(configFile >> "cfgMagazines" >> _magazine >> "initSpeed");
|
||||
_muzzleVelocityCoef = getNumber(configFile >> "cfgWeapons" >> _weapon >> "initSpeed");
|
||||
if (_muzzleVelocityCoef > 0) then {
|
||||
_muzzleVelocity = _muzzleVelocityCoef;
|
||||
};
|
||||
if (_muzzleVelocityCoef < 0) then {
|
||||
_muzzleVelocity = _muzzleVelocity * (-1 * _muzzleVelocityCoef);
|
||||
};
|
||||
|
||||
switch (currentWeapon _unit) do {
|
||||
case primaryWeapon _unit: { _muzzleAccessory = (primaryWeaponItems _unit) select 0; };
|
||||
case handgunWeapon _unit: { _muzzleAccessory = (handgunItems _unit) select 0; };
|
||||
default { _muzzleAccessory = ""; };
|
||||
};
|
||||
if (_muzzleAccessory != "" && isNumber(configFile >> "cfgWeapons" >> _muzzleAccessory >> "ItemInfo" >> "MagazineCoef" >> "initSpeed")) then {
|
||||
_initSpeedCoef = getNumber(configFile >> "cfgWeapons" >> _muzzleAccessory >> "ItemInfo" >> "MagazineCoef" >> "initSpeed");
|
||||
_muzzleVelocity = _muzzleVelocity * _initSpeedCoef;
|
||||
};
|
||||
|
||||
if (GVAR(BarrelLengthInfluenceEnabled)) then {
|
||||
_muzzleVelocityShift = [_ammo, _weapon, _muzzleVelocity] call FUNC(calculateBarrelLengthVelocityShift);
|
||||
if (_muzzleVelocityShift != 0) then {
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift * (_bulletSpeed / _muzzleVelocity)));
|
||||
_bullet setVelocity _bulletVelocity;
|
||||
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
||||
};
|
||||
};
|
||||
|
||||
if (GVAR(AmmoTemperatureEnabled)) then {
|
||||
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
|
||||
_muzzleVelocityShift = [_ammo, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift);
|
||||
if (_muzzleVelocityShift != 0) then {
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift * (_bulletSpeed / _muzzleVelocity)));
|
||||
_bullet setVelocity _bulletVelocity;
|
||||
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
||||
};
|
||||
};
|
||||
|
||||
_bulletTraceVisible = false;
|
||||
if (GVAR(BulletTraceEnabled) && currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then {
|
||||
_opticsName = (primaryWeaponItems ACE_player) select 2;
|
||||
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
||||
_bulletTraceVisible = (_opticType == 2 || currentWeapon ACE_player in ["ACE_Vector", "Binocular", "Rangefinder", "Laserdesignator"]) && cameraView == "GUNNER";
|
||||
};
|
||||
|
||||
_caliber = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_caliber");
|
||||
_bulletLength = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_bulletLength");
|
||||
_bulletMass = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_bulletMass");
|
||||
_barrelTwist = getNumber(configFile >> "cfgWeapons" >> _weapon >> "ACE_barrelTwist");
|
||||
_stabilityFactor = 1.5;
|
||||
|
||||
if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
||||
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
|
||||
_barometricPressure = 1013.25 * exp(-(GVAR(Altitude) + ((getPosASL _bullet) select 2)) / 7990) - 10 * overcast;
|
||||
_stabilityFactor = [_caliber, _bulletLength, _bulletMass, _barrelTwist, _muzzleVelocity, _temperature, _barometricPressure] call FUNC(calculateStabilityFactor);
|
||||
};
|
||||
|
||||
_twistDirection = 1;
|
||||
if (isNumber(configFile >> "cfgWeapons" >> _weapon >> "ACE_twistDirection")) then {
|
||||
_twistDirection = getNumber(configFile >> "cfgWeapons" >> _weapon >> "ACE_twistDirection");
|
||||
if (_twistDirection != -1 && _twistDirection != 0 && _twistDirection != 1) then {
|
||||
_twistDirection = 1;
|
||||
};
|
||||
};
|
||||
|
||||
_transonicStabilityCoef = 0.5;
|
||||
if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_transonicStabilityCoef")) then {
|
||||
_transonicStabilityCoef = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_transonicStabilityCoef");
|
||||
};
|
||||
|
||||
_dragModel = 1;
|
||||
_ballisticCoefficients = [];
|
||||
_velocityBoundaries = [];
|
||||
_atmosphereModel = "ICAO";
|
||||
if (GVAR(AdvancedAirDragEnabled)) then {
|
||||
if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel")) then {
|
||||
_dragModel = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel");
|
||||
if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then {
|
||||
_dragModel = 1;
|
||||
};
|
||||
};
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients")) then {
|
||||
_ballisticCoefficients = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients");
|
||||
};
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries")) then {
|
||||
_velocityBoundaries = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries");
|
||||
};
|
||||
if (isText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then {
|
||||
_atmosphereModel = getText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere");
|
||||
};
|
||||
};
|
||||
|
||||
_index = count GVAR(bulletDatabase);
|
||||
if (count GVAR(bulletDatabaseFreeIndices) > 0) then {
|
||||
_index = GVAR(bulletDatabaseFreeIndices) select 0;
|
||||
GVAR(bulletDatabaseFreeIndices) = GVAR(bulletDatabaseFreeIndices) - [_index];
|
||||
};
|
||||
|
||||
"AdvancedBallistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", _index, _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, GVAR(Latitude), EGVAR(weather,currentTemperature), GVAR(Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)];
|
||||
GVAR(bulletDatabase) set[_index, [_bullet, _caliber, _bulletTraceVisible, _index]];
|
||||
|
||||
if ((GVAR(bulletDatabaseOccupiedIndices) pushBack _index) == 0) then {
|
||||
[{
|
||||
private ["_bulletDatabaseEntry", "_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
|
||||
|
||||
{
|
||||
_bulletDatabaseEntry = (GVAR(bulletDatabase) select _x);
|
||||
_bullet = _bulletDatabaseEntry select 0;
|
||||
_index = _bulletDatabaseEntry select 3;
|
||||
if (!alive _bullet) then {
|
||||
GVAR(bulletDatabaseOccupiedIndices) = GVAR(bulletDatabaseOccupiedIndices) - [_index];
|
||||
GVAR(bulletDatabaseFreeIndices) pushBack _index;
|
||||
};
|
||||
true
|
||||
} count GVAR(bulletDatabaseOccupiedIndices);
|
||||
|
||||
if (count GVAR(bulletDatabaseOccupiedIndices) == 0) exitWith {
|
||||
GVAR(bulletDatabase) = [];
|
||||
GVAR(bulletDatabaseOccupiedIndices) = [];
|
||||
GVAR(bulletDatabaseFreeIndices) = [];
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
{
|
||||
_bulletDatabaseEntry = (GVAR(bulletDatabase) select _x);
|
||||
_bullet = _bulletDatabaseEntry select 0;
|
||||
_caliber = _bulletDatabaseEntry select 1;
|
||||
_bulletTraceVisible = _bulletDatabaseEntry select 2;
|
||||
_index = _bulletDatabaseEntry select 3;
|
||||
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_bulletPosition = getPosASL _bullet;
|
||||
|
||||
if (_bulletTraceVisible && vectorMagnitude _bulletVelocity > 600) then {
|
||||
drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.4*_caliber,0.2*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""];
|
||||
};
|
||||
|
||||
call compile ("AdvancedBallistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, floor(time), time - floor(time)]);
|
||||
|
||||
true
|
||||
} count GVAR(bulletDatabaseOccupiedIndices);
|
||||
|
||||
}, 0, []] call CBA_fnc_addPerFrameHandler;
|
||||
};
|
@ -1,15 +1,3 @@
|
||||
["ACE3", QGVAR(WindInfoKey), localize "STR_ACE_AdvancedBallistics_WindInfoKey",
|
||||
{
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
|
||||
// Statement
|
||||
[] call FUNC(displayWindInfo);
|
||||
false
|
||||
},
|
||||
{false},
|
||||
[37, [true, false, false]], false, 0] call CBA_fnc_addKeybind; // (SHIFT + K)
|
||||
|
||||
["ACE3", QGVAR(ProtractorKey), localize "STR_ACE_AdvancedBallistics_ProtractorKey",
|
||||
{
|
||||
// Conditions: canInteract
|
||||
|
@ -1,6 +1,8 @@
|
||||
#define COMPONENT advanced_ballistics
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
#define USE_ADVANCEDBALLISTICS_DLL
|
||||
|
||||
#ifdef DEBUG_ENABLED_ADVANCEDBALLISTICS
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -17,4 +17,415 @@ class CfgAmmo {
|
||||
class B_30mm_AP : BulletBase {
|
||||
timeToLive = 30;
|
||||
};
|
||||
|
||||
class B_556x45_Ball_Tracer_Red;
|
||||
class B_762x51_Tracer_Red;
|
||||
class B_556x45_Ball : BulletBase {
|
||||
airFriction=-0.001265;
|
||||
hit=8;
|
||||
typicalSpeed=750;
|
||||
ACE_caliber=0.224;
|
||||
ACE_bulletLength=0.906;
|
||||
ACE_bulletMass=62;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75};
|
||||
ACE_ballisticCoefficients[]={0.151};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900};
|
||||
ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0};
|
||||
};
|
||||
class ACE_556x45_Ball_Mk262 : B_556x45_Ball {
|
||||
airFriction=-0.001125;
|
||||
caliber=0.6;
|
||||
deflecting=18;
|
||||
hit=11;
|
||||
typicalSpeed=836;
|
||||
ACE_caliber=0.224;
|
||||
ACE_bulletLength=0.906;
|
||||
ACE_bulletMass=77;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.361};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={624, 816, 832, 838};
|
||||
ACE_barrelLengths[]={7.5, 14.5, 18, 20};
|
||||
};
|
||||
class ACE_556x45_Ball_Mk318 : B_556x45_Ball {
|
||||
airFriction=-0.001120;
|
||||
caliber=0.6;
|
||||
deflecting=18;
|
||||
hit=9;
|
||||
typicalSpeed=886;
|
||||
ACE_caliber=0.224;
|
||||
ACE_bulletLength=0.906;
|
||||
ACE_bulletMass=62;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.307};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={780, 886, 950};
|
||||
ACE_barrelLengths[]={10, 15.5, 20};
|
||||
};
|
||||
class ACE_545x39_Ball_7N6M : B_556x45_Ball {
|
||||
airFriction=-0.001162;
|
||||
caliber=0.5;
|
||||
deflecting=18;
|
||||
hit=7;
|
||||
typicalSpeed=880;
|
||||
ACE_caliber=0.220;
|
||||
ACE_bulletLength=0.85;
|
||||
ACE_bulletMass=52.9;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.168};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={780, 880, 920};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
};
|
||||
class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Red {
|
||||
airFriction=-0.001162;
|
||||
caliber=0.5;
|
||||
deflecting=18;
|
||||
hit=7;
|
||||
typicalSpeed=883;
|
||||
ACE_caliber=0.220;
|
||||
ACE_bulletLength=0.85;
|
||||
ACE_bulletMass=49.8;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.168};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={785, 883, 925};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
};
|
||||
class B_65x39_Caseless : BulletBase {
|
||||
airFriction=-0.000772;
|
||||
typicalSpeed=800;
|
||||
ACE_caliber=0.264;
|
||||
ACE_bulletLength=1.295;
|
||||
ACE_bulletMass=123;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.263};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={760, 788, 800, 805};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
};
|
||||
class B_762x51_Ball : BulletBase {
|
||||
airFriction=-0.001035;
|
||||
typicalSpeed=833;
|
||||
hit=14;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=146;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.2};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={700, 800, 820, 833, 845};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||
};
|
||||
class ACE_762x51_Ball_M118LR : B_762x51_Ball {
|
||||
airFriction=-0.0008525;
|
||||
caliber=1.05;
|
||||
hit=16;
|
||||
typicalSpeed=790;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.24;
|
||||
ACE_bulletMass=175;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.505, 0.496, 0.485, 0.485, 0.485};
|
||||
ACE_velocityBoundaries[]={853, 549, 549, 549};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={750, 780, 790, 794};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
};
|
||||
class ACE_762x51_Ball_Subsonic : B_762x51_Ball {
|
||||
airFriction=-0.000535;
|
||||
caliber=0.5;
|
||||
hit=16;
|
||||
typicalSpeed=790;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.340;
|
||||
ACE_bulletMass=200;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.235};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={305, 325, 335, 340};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
};
|
||||
class ACE_762x54_Ball_7N14 : B_762x51_Ball {
|
||||
airFriction=-0.001023;
|
||||
caliber=0.95;
|
||||
hit=15;
|
||||
typicalSpeed=820;
|
||||
ACE_caliber=0.312;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=152;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.4};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={700, 800, 820, 833};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
};
|
||||
class ACE_762x54_Ball_7T2 : B_762x51_Tracer_Red {
|
||||
airFriction=-0.001023;
|
||||
caliber=0.9;
|
||||
hit=15;
|
||||
typicalSpeed=800;
|
||||
ACE_caliber=0.312;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=149;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.395};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={680, 750, 798, 800};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
};
|
||||
class ACE_762x35_Ball : B_762x51_Ball {
|
||||
airFriction=-0.000821;
|
||||
caliber=0.9;
|
||||
hit=11;
|
||||
typicalSpeed=790;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.153;
|
||||
ACE_bulletMass=125;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.349, 0.338, 0.330, 0.310};
|
||||
ACE_velocityBoundaries[]={792, 610, 488};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={620, 655, 675};
|
||||
ACE_barrelLengths[]={9, 16, 20};
|
||||
};
|
||||
class ACE_762x39_Ball : B_762x51_Ball {
|
||||
airFriction=-0.0015168;
|
||||
hit=12;
|
||||
typicalSpeed=716;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=123;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.275};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={650, 716, 750};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
};
|
||||
class ACE_762x39_Ball_57N231P : B_762x51_Tracer_Red {
|
||||
airFriction=-0.0015168;
|
||||
hit=12;
|
||||
typicalSpeed=716;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=117;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.275};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={650, 716, 750};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
};
|
||||
class B_9x21_Ball : BulletBase {
|
||||
airFriction=-0.00125;
|
||||
typicalSpeed=390;
|
||||
hit=6;
|
||||
ACE_caliber=0.356;
|
||||
ACE_bulletLength=0.610;
|
||||
ACE_bulletMass=115;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.17};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={350, 390, 420};
|
||||
ACE_barrelLengths[]={4, 5, 9};
|
||||
};
|
||||
class ACE_9x18_Ball_57N181S : B_9x21_Ball {
|
||||
hit=5;
|
||||
airFriction=-0.001234;
|
||||
typicalSpeed=298;
|
||||
ACE_caliber=0.365;
|
||||
ACE_bulletLength=0.610;
|
||||
ACE_bulletMass=92.6;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.125};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={298, 330, 350};
|
||||
ACE_barrelLengths[]={3.8, 5, 9};
|
||||
};
|
||||
class ACE_9x19_Ball : B_9x21_Ball {
|
||||
airFriction=-0.001234;
|
||||
typicalSpeed=370;
|
||||
hit=6;
|
||||
ACE_caliber=0.355;
|
||||
ACE_bulletLength=0.610;
|
||||
ACE_bulletMass=124;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.165};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={340, 370, 400};
|
||||
ACE_barrelLengths[]={4, 5, 9};
|
||||
};
|
||||
class ACE_10x25_Ball : B_9x21_Ball {
|
||||
airFriction=-0.00168;
|
||||
typicalSpeed=425;
|
||||
hit=7;
|
||||
ACE_caliber=0.5;
|
||||
ACE_bulletLength=0.764;
|
||||
ACE_bulletMass=165;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.189};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={360, 400, 430};
|
||||
ACE_barrelLengths[]={4, 4.61, 9};
|
||||
};
|
||||
class ACE_765x17_Ball: B_9x21_Ball {
|
||||
airFriction=-0.001213;
|
||||
typicalSpeed=282;
|
||||
hit=7;
|
||||
ACE_caliber=0.3125;
|
||||
ACE_bulletLength=0.610;
|
||||
ACE_bulletMass=65;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.118};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={282, 300, 320};
|
||||
ACE_barrelLengths[]={4, 5, 9};
|
||||
};
|
||||
class ACE_303_Ball : ACE_762x51_Ball_M118LR {
|
||||
airFriction=-0.00083;
|
||||
typicalSpeed=761;
|
||||
ACE_caliber=0.311;
|
||||
ACE_bulletLength=1.227;
|
||||
ACE_bulletMass=174;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.499, 0.493, 0.48};
|
||||
ACE_velocityBoundaries[]={671, 549};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={748, 761, 765};
|
||||
ACE_barrelLengths[]={20, 24, 26};
|
||||
};
|
||||
class B_408_Ball : BulletBase {
|
||||
airFriction=-0.000395;
|
||||
typicalSpeed=910;
|
||||
ACE_caliber=0.408;
|
||||
ACE_bulletLength=2.126;
|
||||
ACE_bulletMass=410;
|
||||
ACE_transonicStabilityCoef=1;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.97};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={910};
|
||||
ACE_barrelLengths[]={29};
|
||||
};
|
||||
class ACE_106x83mm_Ball : B_408_Ball {
|
||||
ACE_caliber=0.416;
|
||||
ACE_bulletLength=2.089;
|
||||
ACE_bulletMass=398;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.72};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={960};
|
||||
ACE_barrelLengths[]={29};
|
||||
};
|
||||
class ACE_338_Ball : B_408_Ball {
|
||||
airFriction=-0.000526;
|
||||
caliber=1.55;
|
||||
deflecting=12;
|
||||
hit=20;
|
||||
typicalSpeed=826;
|
||||
ACE_caliber=0.338;
|
||||
ACE_bulletLength=1.70;
|
||||
ACE_bulletMass=300;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.381};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={820, 826, 830};
|
||||
ACE_barrelLengths[]={24, 26.5, 28};
|
||||
};
|
||||
class B_127x99_Ball : BulletBase {
|
||||
airFriction=-0.0006;
|
||||
typicalSpeed=853;
|
||||
ACE_caliber=0.510;
|
||||
ACE_bulletLength=2.310;
|
||||
ACE_bulletMass=647;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.670};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={853};
|
||||
ACE_barrelLengths[]={29};
|
||||
};
|
||||
class ACE_127x99_Ball_AMAX : B_127x99_Ball {
|
||||
ACE_caliber=0.510;
|
||||
ACE_bulletLength=2.540;
|
||||
ACE_bulletMass=750;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={1.050};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={860};
|
||||
ACE_barrelLengths[]={29};
|
||||
};
|
||||
class B_127x108_Ball : BulletBase {
|
||||
typicalSpeed=820;
|
||||
ACE_caliber=0.511;
|
||||
ACE_bulletLength=2.520;
|
||||
ACE_bulletMass=745;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.63};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={820};
|
||||
ACE_barrelLengths[]={28.7};
|
||||
};
|
||||
class B_45ACP_Ball : BulletBase {
|
||||
airFriction=-0.0007182;
|
||||
typicalSpeed=250;
|
||||
ACE_caliber=0.452;
|
||||
ACE_bulletLength=0.68;
|
||||
ACE_bulletMass=230;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.195};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={230, 250, 285};
|
||||
ACE_barrelLengths[]={4, 5, 9};
|
||||
};
|
||||
};
|
@ -6,7 +6,7 @@ class CfgPatches {
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_common"};
|
||||
author[] = {"TaoSensai","commy2"};
|
||||
author[] = {"TaoSensai","commy2","Ruthberg"};
|
||||
authorUrl = "https://github.com/Taosenai/tmr";
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
|
@ -193,6 +193,7 @@ PREP(getHitPoints);
|
||||
PREP(getHitPointsWithSelections);
|
||||
PREP(getReflectorsWithSelections);
|
||||
PREP(getLightProperties);
|
||||
PREP(getLightPropertiesWeapon);
|
||||
PREP(getVehicleCrew);
|
||||
|
||||
// turrets
|
||||
|
58
addons/common/functions/fnc_getLightPropertiesWeapon.sqf
Normal file
58
addons/common/functions/fnc_getLightPropertiesWeapon.sqf
Normal file
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Author: commy2
|
||||
* Read properties of given flashlight. @todo, Can weapons themselves still have flashlights (no attachment)?
|
||||
*
|
||||
* Arguments:
|
||||
* 0: A flashlight (String)
|
||||
*
|
||||
* Return Value:
|
||||
* Stuff from config (Array)
|
||||
*
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private "_weapon";
|
||||
|
||||
_weapon = _this select 0;
|
||||
|
||||
private "_config";
|
||||
_config = configFile >> "CfgWeapons" >> _weapon >> "ItemInfo" >> "FlashLight";
|
||||
|
||||
private ["_intensity", "_position", "_direction", "_innerAngle", "_outerAngle"];
|
||||
|
||||
_intensity = getNumber (_config >> "intensity");
|
||||
_position = getText (_config >> "position");
|
||||
_direction = getText (_config >> "direction");
|
||||
_innerAngle = getNumber (_config >> "innerAngle");
|
||||
_outerAngle = getNumber (_config >> "outerAngle");
|
||||
|
||||
[_intensity, _position, _direction, _innerAngle, _outerAngle]
|
||||
|
||||
/*
|
||||
class FlashLight
|
||||
{
|
||||
color[] = {180,156,120};
|
||||
ambient[] = {0.9,0.78,0.6};
|
||||
intensity = 20;
|
||||
size = 1;
|
||||
innerAngle = 20;
|
||||
outerAngle = 80;
|
||||
coneFadeCoef = 5;
|
||||
position = "flash dir";
|
||||
direction = "flash";
|
||||
useFlare = 1;
|
||||
flareSize = 1.4;
|
||||
flareMaxDistance = "100.0f";
|
||||
dayLight = 0;
|
||||
class Attenuation
|
||||
{
|
||||
start = 0.5;
|
||||
constant = 0;
|
||||
linear = 0;
|
||||
quadratic = 1.1;
|
||||
hardLimitStart = 20;
|
||||
hardLimitEnd = 30;
|
||||
};
|
||||
scale[] = {0};
|
||||
};
|
||||
*/
|
@ -20,12 +20,53 @@ _lightSource = _this select 1;
|
||||
private "_unitPos";
|
||||
_unitPos = _unit modelToWorld (_unit selectionPosition "spine3");
|
||||
|
||||
private ["_lights", "_lightLevel"];
|
||||
|
||||
_lights = [_lightSource] call FUNC(getTurnedOnLights);
|
||||
|
||||
private "_lightLevel";
|
||||
_lightLevel = 0;
|
||||
|
||||
if (_lightSource isKindOf "CAManBase") then {
|
||||
// handle persons with flashlights
|
||||
|
||||
private "_weapon";
|
||||
_weapon = currentWeapon _lightSource;
|
||||
|
||||
if !(_lightSource isFlashlightOn _weapon) exitWith {};
|
||||
|
||||
private ["_flashlight", "_properties", "_intensity", "_innerAngle", "_outerAngle", "_position", "_direction", "_directionToUnit", "_distance", "_angle"];
|
||||
|
||||
_flashlight = switch (_weapon) do {
|
||||
case (primaryWeapon _lightSource): {
|
||||
primaryWeaponItems _lightSource select 1
|
||||
};
|
||||
case (secondaryWeapon _lightSource): {
|
||||
secondaryWeaponItems _lightSource select 1
|
||||
};
|
||||
case (handgunWeapon _lightSource): {
|
||||
handgunItems _lightSource select 1
|
||||
};
|
||||
default {""};
|
||||
};
|
||||
|
||||
_properties = [_flashlight] call FUNC(getLightPropertiesWeapon);
|
||||
|
||||
_innerAngle = (_properties select 3) / 2;
|
||||
_outerAngle = (_properties select 4) / 2;
|
||||
|
||||
_position = _lightSource modelToWorld (_lightSource selectionPosition "rightHand");
|
||||
_direction = _lightSource weaponDirection _weapon;
|
||||
|
||||
_directionToUnit = _position vectorFromTo _unitPos;
|
||||
|
||||
_distance = _unitPos distance _position;
|
||||
_angle = acos (_direction vectorDotProduct _directionToUnit);
|
||||
|
||||
_lightLevel = (linearConversion [0, 30, _distance, 1, 0, true]) * (linearConversion [_innerAngle, _outerAngle, _angle, 1, 0, true]);
|
||||
|
||||
} else {
|
||||
// handle any object, strcutures, cars, tanks, etc.
|
||||
|
||||
private "_lights";
|
||||
_lights = [_lightSource] call FUNC(getTurnedOnLights);
|
||||
|
||||
{
|
||||
private ["_properties", "_intensity", "_innerAngle", "_outerAngle", "_position", "_direction", "_directionToUnit", "_distance", "_angle"];
|
||||
|
||||
@ -53,4 +94,6 @@ _lightLevel = 0;
|
||||
|
||||
} forEach _lights;
|
||||
|
||||
};
|
||||
|
||||
_lightLevel
|
||||
|
@ -129,52 +129,3 @@ class CfgWeapons {
|
||||
ACE_Overheating_JamChance[] = {0, 0.0003, 0.0015, 0.0075};
|
||||
};
|
||||
};
|
||||
|
||||
class CfgAmmo {
|
||||
class BulletCore;
|
||||
class BulletBase : BulletCore {
|
||||
ACE_BulletMass = 0; // Bullet mass in grams
|
||||
};
|
||||
|
||||
// Rifle and MG rounds
|
||||
class B_556x45_Ball : BulletBase {
|
||||
ACE_BulletMass = 4.1; // 5.56x45 NATO
|
||||
};
|
||||
|
||||
class B_65x39_Caseless : BulletBase {
|
||||
ACE_BulletMass = 8; // 6.5mm Grendel
|
||||
};
|
||||
|
||||
class B_762x51_Ball : BulletBase {
|
||||
ACE_BulletMass = 10; // 7.62x51 NATO
|
||||
};
|
||||
class ACE_B_762x51_M118LR : B_762x51_Ball {
|
||||
ACE_BulletMass = 11; // 7.62x51 NATO M118
|
||||
};
|
||||
|
||||
class B_127x99_Ball : BulletBase {
|
||||
ACE_BulletMass = 42; // 12.7×99mm NATO (.50 BMG)
|
||||
};
|
||||
|
||||
class B_127x108_Ball : BulletBase {
|
||||
ACE_BulletMass = 48.3; // 12.7x108
|
||||
};
|
||||
|
||||
class B_408_Ball : BulletBase {
|
||||
ACE_BulletMass = 27; // .408 Cheyenne Tactical
|
||||
};
|
||||
|
||||
// Pistol Rounds
|
||||
class B_9x21_Ball : BulletBase {
|
||||
ACE_BulletMass = 7.45; // 9×21mm IMI
|
||||
};
|
||||
class B_9x19_Ball : B_9x21_Ball {
|
||||
ACE_BulletMass = 7.45; // 9×19mm Parabellum
|
||||
};
|
||||
class B_127x33_Ball : BulletBase {
|
||||
ACE_BulletMass = 21; // .50 AE
|
||||
};
|
||||
class B_45ACP_Ball : BulletBase {
|
||||
ACE_BulletMass = 12; // .45 ACP
|
||||
};
|
||||
};
|
||||
|
@ -36,9 +36,10 @@ _temperature = _overheat select 0;
|
||||
_time = _overheat select 1;
|
||||
|
||||
// Get physical parameters
|
||||
_bulletMass = getNumber (configFile >> "CfgAmmo" >> _ammo >> "ACE_BulletMass");
|
||||
// Bullet mass is read from config in grains and converted to grams
|
||||
_bulletMass = (getNumber (configFile >> "CfgAmmo" >> _ammo >> "ACE_BulletMass")) * 0.06480;
|
||||
if (_bulletMass == 0) then {
|
||||
// If the bullet mass is not configured, estimate it
|
||||
// If the bullet mass is not configured, estimate it directly in grams
|
||||
_bulletMass = 3.4334 + 0.5171 * (getNumber (configFile >> "CfgAmmo" >> _ammo >> "hit") + getNumber (configFile >> "CfgAmmo" >> _ammo >> "caliber"));
|
||||
};
|
||||
_energyIncrement = 0.75 * 0.0005 * _bulletMass * (vectorMagnitudeSqr _velocity);
|
||||
|
31
addons/weather/RscTitles.hpp
Normal file
31
addons/weather/RscTitles.hpp
Normal file
@ -0,0 +1,31 @@
|
||||
class RscTitles
|
||||
{
|
||||
class RscWindIntuitive
|
||||
{
|
||||
idd=-1;
|
||||
onLoad="with uiNameSpace do { RscWindIntuitive = _this select 0 };";
|
||||
movingEnable=0;
|
||||
duration=60;
|
||||
fadeIn="false";
|
||||
fadeOut="false";
|
||||
class controls
|
||||
{
|
||||
class RscWindIntuitive
|
||||
{
|
||||
idc=132948;
|
||||
type=0;
|
||||
style=48;
|
||||
font="TahomaB";
|
||||
colorBackground[]={0,0,0,0};
|
||||
colorText[]={0,0,0,0};
|
||||
x="SafeZoneX + 0.001";
|
||||
y="SafeZoneY + 0.001";
|
||||
w=0.2;
|
||||
h=0.2*4/3;
|
||||
size=0.034;
|
||||
sizeEx=0.027;
|
||||
text="";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -10,8 +10,18 @@
|
||||
30 setFog (ACE_MISC_PARAMS select 2);
|
||||
};
|
||||
};
|
||||
ACE_wind = wind;
|
||||
if (true) exitwith {};
|
||||
|
||||
["ACE3", QGVAR(WindInfoKey), localize "STR_ACE_Weather_WindInfoKey",
|
||||
{
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
|
||||
// Statement
|
||||
[] call FUNC(displayWindInfo);
|
||||
false
|
||||
},
|
||||
{false},
|
||||
[37, [true, false, false]], false, 0] call CBA_fnc_addKeybind; // (SHIFT + K)
|
||||
|
||||
// Update Wind
|
||||
simulWeatherSync;
|
||||
@ -54,7 +64,7 @@ _fnc_updateTemperature = {
|
||||
_hourlyCoef = -0.5 * sin(360 * ((3 + (date select 3))/24 + (date select 4)/1440));
|
||||
|
||||
GVAR(currentTemperature) = (GVAR(TempDay) select (_month - 1)) * (1 - _hourlyCoef) + (GVAR(TempNight) select (_month - 1)) * _hourlyCoef;
|
||||
GVAR(currentTemperature) = GVAR(currentTemperature) + GVAR(currentTemperature) - 2 * humidity - 4 * overcast;
|
||||
GVAR(currentTemperature) = GVAR(currentTemperature) - 2 * humidity - 4 * overcast;
|
||||
GVAR(currentTemperature) = round(GVAR(currentTemperature) * 10) / 10;
|
||||
|
||||
// Humidity
|
||||
|
@ -4,10 +4,10 @@
|
||||
ADDON = false;
|
||||
LOG(MSG_INIT);
|
||||
|
||||
PREP(serverController);
|
||||
PREP(displayWindInfo);
|
||||
PREP(getMapData);
|
||||
PREP(getWind);
|
||||
|
||||
PREP(serverController);
|
||||
|
||||
|
||||
// Rain variables
|
||||
|
@ -6,11 +6,11 @@ class CfgPatches {
|
||||
weapons[] = {};// "ACE_Kestrel4500" };
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_common"};
|
||||
author[] = {"q1184", "Rocko", "esteldunedain"};
|
||||
author[] = {"q1184", "Rocko", "esteldunedain","Ruthberg"};
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventhandlers.hpp"
|
||||
|
||||
#include "CfgWorlds.hpp"
|
||||
#include "RscTitles.hpp"
|
||||
|
82
addons/weather/functions/fnc_displayWindInfo.sqf
Normal file
82
addons/weather/functions/fnc_displayWindInfo.sqf
Normal file
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Displays a wind info (colored arrow) in the top left corner of the screen
|
||||
*
|
||||
* Argument:
|
||||
* None
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define __dsp (uiNamespace getVariable "RscWindIntuitive")
|
||||
#define __ctrl (__dsp displayCtrl 132948)
|
||||
|
||||
private ["_windSpeed", "_windDir", "_playerDir", "_windIndex", "_windColor", "_newWindSpeed", "_windSource", "_height"];
|
||||
|
||||
if (GVAR(WindInfo)) exitWith {
|
||||
GVAR(WindInfo) = false;
|
||||
0 cutText ["", "PLAIN"];
|
||||
true
|
||||
};
|
||||
if (underwater ACE_player) exitWith { true };
|
||||
if (vehicle ACE_player != ACE_player) exitWith { true };
|
||||
|
||||
[] spawn {
|
||||
2 cutText ["", "PLAIN"];
|
||||
GVAR(Protractor) = false;
|
||||
1 cutText ["", "PLAIN"];
|
||||
GVAR(WindInfo) = true;
|
||||
|
||||
while {GVAR(WindInfo) && !(underwater ACE_player) && vehicle ACE_player == ACE_player} do {
|
||||
_windIndex = 12;
|
||||
_windColor = [1, 1, 1, 1];
|
||||
|
||||
// Toogle behaviour depending on ace_advanced_ballistics being used or not
|
||||
// @todo, check ACE_AB is actually enabled
|
||||
_windSpeed = if (isClass (configFile >> "CfgPatches" >> "ACE_Advanced_Ballistics")) then {
|
||||
(eyePos ACE_player) call EFUNC(advanced_ballistics,calculateWindSpeed);
|
||||
} else {
|
||||
vectorMagnitude ACE_wind;
|
||||
};
|
||||
|
||||
|
||||
if (_windSpeed > 0.2) then {
|
||||
_playerDir = getDir ACE_player;
|
||||
_windDir = (ACE_wind select 0) atan2 (ACE_wind select 1);
|
||||
_windIndex = round(((_playerDir - _windDir + 360) % 360) / 30);
|
||||
_windIndex = _windIndex % 12;
|
||||
};
|
||||
|
||||
// Color Codes from https://en.wikipedia.org/wiki/Beaufort_scale#Modern_scale
|
||||
if (_windSpeed > 0.3) then { _windColor = [0.796, 1, 1, 1]; };
|
||||
if (_windSpeed > 1.5) then { _windColor = [0.596, 0.996, 0.796, 1]; };
|
||||
if (_windSpeed > 3.3) then { _windColor = [0.596, 0.996, 0.596, 1]; };
|
||||
if (_windSpeed > 5.4) then { _windColor = [0.6, 0.996, 0.4, 1]; };
|
||||
if (_windSpeed > 7.9) then { _windColor = [0.6, 0.996, 0.047, 1]; };
|
||||
if (_windSpeed > 10.7) then { _windColor = [0.8, 0.996, 0.059, 1]; };
|
||||
if (_windSpeed > 13.8) then { _windColor = [1, 0.996, 0.067, 1]; };
|
||||
if (_windSpeed > 17.1) then { _windColor = [1, 0.796, 0.051, 1]; };
|
||||
if (_windSpeed > 20.7) then { _windColor = [1, 0.596, 0.039, 1]; };
|
||||
if (_windSpeed > 24.4) then { _windColor = [1, 0.404, 0.031, 1]; };
|
||||
if (_windSpeed > 28.4) then { _windColor = [1, 0.22, 0.027, 1]; };
|
||||
if (_windSpeed > 32.6) then { _windColor = [1, 0.078, 0.027, 1]; };
|
||||
|
||||
0 cutRsc ["RscWindIntuitive", "PLAIN", 1, false];
|
||||
|
||||
__ctrl ctrlSetScale 0.75;
|
||||
__ctrl ctrlCommit 0;
|
||||
|
||||
__ctrl ctrlSetText format[QUOTE(PATHTOF(UI\wind%1.paa)), _windIndex];
|
||||
__ctrl ctrlSetTextColor _windColor;
|
||||
|
||||
sleep 0.5;
|
||||
};
|
||||
|
||||
GVAR(WindInfo) = false;
|
||||
0 cutText ["", "PLAIN"];
|
||||
};
|
||||
|
||||
true
|
@ -11,6 +11,30 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
GVAR(Altitude) = getNumber(configFile >> "CfgWorlds" >> worldName >> "elevationOffset");
|
||||
GVAR(Latitude) = getNumber(configFile >> "CfgWorlds" >> worldName >> "latitude");
|
||||
|
||||
if (worldName in ["Chernarus", "Bootcamp_ACR", "Woodland_ACR", "utes"]) then { GVAR(Latitude) = 50; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Altis", "Stratis"]) then { GVAR(Latitude) = 40; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Takistan", "Zargabad", "Mountains_ACR"]) then { GVAR(Latitude) = 35; GVAR(Altitude) = 2000; };
|
||||
if (worldName in ["Shapur_BAF", "ProvingGrounds_PMC"]) then { GVAR(Latitude) = 35; GVAR(Altitude) = 100; };
|
||||
if (worldName in ["fallujah"]) then { GVAR(Latitude) = 33; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["fata", "Abbottabad"]) then { GVAR(Latitude) = 30; GVAR(Altitude) = 1000; };
|
||||
if (worldName in ["sfp_wamako"]) then { GVAR(Latitude) = 14; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["sfp_sturko"]) then { GVAR(Latitude) = 56; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Bornholm"]) then { GVAR(Latitude) = 55; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Imrali"]) then { GVAR(Latitude) = 40; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Caribou"]) then { GVAR(Latitude) = 68; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Namalsk"]) then { GVAR(Latitude) = 65; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["MCN_Aliabad"]) then { GVAR(Latitude) = 36; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Clafghan"]) then { GVAR(Latitude) = 34; GVAR(Altitude) = 640; };
|
||||
if (worldName in ["Sangin", "hellskitchen"]) then { GVAR(Latitude) = 32; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Sara"]) then { GVAR(Latitude) = 40; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["reshmaan"]) then { GVAR(Latitude) = 35; GVAR(Altitude) = 2000; };
|
||||
if (worldName in ["Thirsk"]) then { GVAR(Latitude) = 65; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["lingor"]) then { GVAR(Latitude) = -4; GVAR(Altitude) = 0; };
|
||||
if (worldName in ["Panthera3"]) then { GVAR(Latitude) = 46; GVAR(Altitude) = 0; };
|
||||
|
||||
// Check if the weather data is defined in the map config
|
||||
if (isArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempDay")) exitWith {
|
||||
GVAR(TempDay) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempDay");
|
||||
|
8
addons/weather/stringtable.xml
Normal file
8
addons/weather/stringtable.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Project name="ACE">
|
||||
<Package name="Weather">
|
||||
<Key ID="STR_ACE_Weather_WindInfoKey">
|
||||
<English>Show Wind Info</English>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -576,33 +576,25 @@ See the make.cfg file for additional build options.
|
||||
if build_tool == "pboproject":
|
||||
try:
|
||||
#PABST: Convert config (run the macro'd config.cpp through CfgConvert twice to produce a de-macro'd cpp that pboProject can read without fucking up:
|
||||
os.chdir(os.path.join(arma3tools_path, "CfgConvert"))
|
||||
shutil.copyfile(os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.backup"))
|
||||
|
||||
ret = subprocess.call(["cfgConvertGUI.exe", os.path.join(work_drive, prefix, module, "config.cpp")])
|
||||
if ret != 0:
|
||||
print_error("cfgConvertGUI (bin) return code == " + str(ret))
|
||||
input("Press Enter to continue...")
|
||||
|
||||
#PABST: Need micro sleeps because cfgConvertGUI can return before it's finished procressing
|
||||
time.sleep(0.05)
|
||||
|
||||
ret = subprocess.call(["cfgConvertGUI.exe", os.path.join(work_drive, prefix, module, "config.bin")])
|
||||
if ret != 0:
|
||||
print_error("cfgConvertGUI (txt) return code == " + str(ret))
|
||||
input("Press Enter to continue...")
|
||||
|
||||
time.sleep(0.05)
|
||||
|
||||
#cmd = [rapifyTool, "-L", "-P", os.path.join(work_drive, prefix, module, "config.cpp")];
|
||||
#ret = subprocess.call(cmd)
|
||||
#if ret != 0:
|
||||
# print_error("rapifyTool return code == " + str(ret) + str(cmd))
|
||||
# input("Press Enter to continue...")
|
||||
|
||||
# Call pboProject
|
||||
os.chdir("P:\\")
|
||||
|
||||
cmd = [os.path.join(work_drive, "CfgConvert", "CfgConvert.exe"), "-bin", "-dst", os.path.join(work_drive, prefix, module, "config.bin"), os.path.join(work_drive, prefix, module, "config.cpp")]
|
||||
ret = subprocess.call(cmd)
|
||||
#ret = subprocess.call(["cfgConvertGUI.exe", os.path.join(work_drive, prefix, module, "config.cpp")])
|
||||
|
||||
if ret != 0:
|
||||
print_error("CfgConvert -bin return code == " + str(ret))
|
||||
input("Press Enter to continue...")
|
||||
|
||||
|
||||
cmd = [os.path.join(work_drive, "CfgConvert", "CfgConvert.exe"), "-txt", "-dst", os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.bin")]
|
||||
ret = subprocess.call(cmd)
|
||||
if ret != 0:
|
||||
print_error("CfgConvert -txt) return code == " + str(ret))
|
||||
input("Press Enter to continue...")
|
||||
|
||||
if os.path.isfile(os.path.join(work_drive, prefix, module, "$NOBIN$")):
|
||||
print_green("$NOBIN$ Found. Proceeding with non-binarizing!")
|
||||
cmd = [makepboTool, "-P","-A","-L","-N","-G", os.path.join(work_drive, prefix, module),os.path.join(module_root, release_dir, project,"Addons")]
|
||||
|
Loading…
Reference in New Issue
Block a user