diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml
index dfd346a9e1..65fd7de04a 100644
--- a/addons/advanced_throwing/stringtable.xml
+++ b/addons/advanced_throwing/stringtable.xml
@@ -6,126 +6,147 @@
Улучшенный бросок гранат
アドバンスド投てき
Zaawansowane rzucanie
+ Erweitertes Wurfsystem
Allows changing advanced throwing behaviour.
Позволяет настраивать поведение улучшенного броска гранат.
アドバンスド投てきの挙動変更を許可します。
Zezwala na zmianę zachowania zaawansowanego trybu rzucania.
+ Erlaubt es, das Verhalten des erweiterten Wurfsystems zu ändern.
Enable Advanced Throwing
Включить улучшенный бросок
アドバンスド投てきを有効化
Aktywuj zaawansowane rzucanie
+ Aktiviere erweitertes Wurfsystem
Enables advanced throwing system.
Включает систему улучшенного броска.
アドバンスド投てきシステムを有効化
Aktywuje system zaawansowanego rzucania.
+ Aktiviert das erweiterte Wurfsystem.
Show Throw Arc
Показать траекторию броска
軌道を表示
Pokaż trasę lotu
+ Zeige Wurfbogen
Enables visualization of the throw arc (where throwable will fly).
Включает визуализацию траектории броска (как полетит граната).
投てき物の予測軌道の表示を有効化します。
Wyświetla wizualizację trasy przelotu granatu.
+ Aktiviert die Visualisierung des Wurfbogens (wohin das Objekt geworfen werden wird).
Show Throwing Mouse Controls
Показывать управление мышью
投てきのマウス操作を表示
Pokaż podpowiedzi sterowania myszą
+ Zeige Maussteuerung beim Werfen
Enables visual cues for mouse controls when throwable is prepared.
Включает отображение подсказок по управлению мышью, когда граната подготовлена.
投てき物を投げるとき、マウス操作の説明表示を有効化します。
Wyświetla podpowiedzi sterowania myszą kiedy obiekt miotany jest w ręku.
+ Aktiviert visuelle Hinweise zur Maussteuerung, wenn ein Objekt zum Werfen vorbereitet wird.
Enable Throwables Pick Up
Включить подбор гранат
投てき物の拾い上げを有効化
Zezwól na podnoszenie obiektów miotanych
+ Aktiviere Aufheben von Wurfobjekten
Enables ability to pick up throwables from the ground.
Включает возможность подбирать гранаты с земли.
地面に落ちている投てき物の拾い上げ動作を有効化します。
Umożliwia podnoszenie obiektów miotanych z ziemi.
+ Aktiviert die Möglichkeit, geworfene Objekte wieder vom Boden aufzuheben.
Enable Attached Throwables Pick Up
Включить подбор прикрепленных гранат
拾い上げた投てき物の取り付けを有効化
Zezwól na podnoszenie przyczepionych obiektów miotanych
+ Aktiviere erneute Aufnahme befestigter Wurfobjekte
Enables ability to pick up throwables from attached objects.
Включает возможность подбирать гранаты, прикрепленные к объектам.
オブジェクトに取り付けられていた投てき物を拾い上げられるようにします。
Umożliwia podnoszenie obiektów miotanych przyczepionych do innych obiektów.
+ Aktiviert die Möglichkeit, befestigte Wurfobjekte erneut aufzunehmen.
Prepare/Change Throwable
Подготовить/заменить гранату
機能の起動/変更
Przygotuj/zmień ob. miotany
+ Wurfobjekt vorbereiten/wechseln
Throwable Drop Mode (Hold)
Режим броска гранаты (удерживать)
投てきモード (押しっぱ)
Tryb upuszczania ob. miotanego (przytrzymaj)
+ Wurfobjekt Fallmodus (halten)
Throwable Drop Mode (Toggle)
Режим броска гранаты (переключить)
投てきモード (トグル)
Tryb upuszczania ob. miotanego (przełącz)
+ Wurfobjekt Fallmodus (umschalten)
Primed
Подготовлена
起動した
Odbezpieczony
+ Scharf gemacht
Throw
Бросить
投げる
Rzuć
+ Werfen
(Scroll) Change Mode
(Скролл) Изменить режим
(スクロール) モード変更
(Kółko m.) zmień tryb
+ (Scrollen) Modus wechseln
(Scroll) Extend
(Скролл) Увеличить
(スクロール) 遠くに
(Kółko m.) przedłuż
+ (Scrollen) Erweitern
(Click) Cook
(Клик) Подготовить
(クリック) 起爆
(Kliknięcie) Odbezpiecz
+ (Klicken) Abkochen
Pick Up
Подобрать
拾い上げる
Podnieś
+ Aufheben
-
+
\ No newline at end of file
diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp
index 625cd68deb..eb2de958d6 100644
--- a/addons/atragmx/RscTitles.hpp
+++ b/addons/atragmx/RscTitles.hpp
@@ -2,6 +2,8 @@
#define ST_RIGHT 1
#define ST_CENTER 2
+#define ST_WITH_RECT 160
+
class ATragMX_RscText {
idc=-1;
type=0;
@@ -350,6 +352,7 @@ class ATragMX_Display {
colorBackground[]={0.15,0.21,0.23,0.3};
colorFocused[]={0.15,0.21,0.23,0.2};
text="MV";
+ action=QUOTE(0 call FUNC(toggle_muzzle_velocity_data));
};
class TEXT_MUZZLE_VELOCITY_OUTPUT: TEXT_BORE_HEIGHT_OUTPUT {
idc=130;
@@ -383,18 +386,18 @@ class ATragMX_Display {
y=0.265*safezoneH+safezoneY+0.320;
text="";
};
- class TEXT_BAROMETRIC_PRESSURE: TEXT_AIR_FRICTION {
+ class TEXT_BAROMETRIC_PRESSURE: TEXT_TEMPERATURE {
idc=21;
x=0.550*safezoneW+safezoneX+0.20;
+ y=0.265*safezoneH+safezoneY+0.355;
text="BP";
};
class TEXT_BAROMETRIC_PRESSURE_OUTPUT: TEXT_TEMPERATURE_OUTPUT {
idc=210;
y=0.265*safezoneH+safezoneY+0.355;
};
- class TEXT_RELATIVE_HUMIDITY: TEXT_AIR_FRICTION {
+ class TEXT_RELATIVE_HUMIDITY: TEXT_BAROMETRIC_PRESSURE {
idc=22;
- x=0.550*safezoneW+safezoneX+0.20;
y=0.265*safezoneH+safezoneY+0.390;
text="RH";
};
@@ -526,7 +529,7 @@ class ATragMX_Display {
};
class TEXT_ELEVATION_OUTPUT_ABSOLUTE: ATragMX_RscText {
idc=400;
- style=160;
+ style=ST_WITH_RECT+ST_RIGHT;
sizeEx=0.025;
w=0.065;
h=0.032;
@@ -606,17 +609,39 @@ class ATragMX_Display {
class TEXT_SCOPE_CLICK_NUMBER: TEXT_GUN_LIST {
idc=2001;
style=ST_CENTER;
- w=0.03;
+ w=0.025;
x=0.550*safezoneW+safezoneX+0.27;
text="4";
action=QUOTE(call FUNC(toggle_solution_setup));
};
- class TEXT_CALCULATE: TEXT_SCOPE_UNIT {
+ class TEXT_OPTIONS: TEXT_GUN_LIST {
idc=3000;
style=ST_RIGHT;
x=0.550*safezoneW+safezoneX+0.3;
- text="Calc";
- action=QUOTE(call FUNC(calculate_target_solution));
+ text="Options";
+ action=QUOTE(false call FUNC(toggle_option_menu));
+ };
+ class TEXT_OPTIONS_BACKGROUND: ATragMX_RscButton {
+ idc=3001;
+ colorBackground[]={0.15,0.21,0.23,0.2};
+ colorBackgroundActive[]={0.15,0.21,0.23,0.2};
+ colorFocused[]={0.15,0.21,0.23,0.2};
+ x=0.550*safezoneW+safezoneX+0.105;
+ y=0.265*safezoneH+safezoneY+0.17;
+ w=0.3;
+ h=0.535;
+ offsetPressedX=0.0;
+ offsetPressedY=0.0;
+ action=QUOTE(false call FUNC(toggle_option_menu));
+ };
+ class TEXT_OPTIONS_LIST_OUTPUT: ATragMX_RscListBox {
+ idc=3002;
+ w=0.17;
+ h=0.28;
+ x=0.550*safezoneW+safezoneX+0.225;
+ y=0.265*safezoneH+safezoneY+0.355;
+ sizeEx=0.025;
+ onMouseButtonClick=QUOTE(true call FUNC(toggle_option_menu));
};
class TEXT_RANGE_CARD_SCOPE_UNIT: TEXT_GUN_PROFILE {
@@ -766,8 +791,9 @@ class ATragMX_Display {
class TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE: TEXT_TARGET_RANGE_ASSIST_MEASUREMENT_METHOD {
idc=7003;
style=ST_RIGHT;
- x=0.550*safezoneW+safezoneX+0.10;
+ x=0.550*safezoneW+safezoneX+0.092;
y=0.265*safezoneH+safezoneY+0.4;
+ w=0.128;
text="Target Size";
};
class TEXT_TARGET_RANGE_ASSIST_IMAGE_SIZE: TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE {
@@ -874,22 +900,22 @@ class ATragMX_Display {
class TEXT_TARGET_SPEED_ASSIST_TARGET_RANGE: TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE {
idc=8000;
- x=0.550*safezoneW+safezoneX+0.13;
+ x=0.550*safezoneW+safezoneX+0.12;
text="Target Range";
};
class TEXT_TARGET_SPEED_ASSIST_NUM_TICKS: TEXT_TARGET_RANGE_ASSIST_IMAGE_SIZE {
idc=8001;
- x=0.550*safezoneW+safezoneX+0.13;
+ x=0.550*safezoneW+safezoneX+0.12;
text="Num Ticks";
};
class TEXT_TARGET_SPEED_ASSIST_TIME: TEXT_TARGET_RANGE_ASSIST_ANGLE {
idc=8002;
- x=0.550*safezoneW+safezoneX+0.13;
+ x=0.550*safezoneW+safezoneX+0.12;
text="Time (secs)";
};
class TEXT_TARGET_SPEED_ASSIST_TARGET_ESTIMATED_SPEED: TEXT_TARGET_RANGE_ASSIST_ESTIMATED_RANGE {
idc=8003;
- x=0.550*safezoneW+safezoneX+0.13;
+ x=0.550*safezoneW+safezoneX+0.12;
text="Est Speed";
};
class TEXT_TARGET_SPEED_ASSIST_TARGET_RANGE_INPUT: TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE_INPUT {
@@ -1468,5 +1494,343 @@ class ATragMX_Display {
y=0.265*safezoneH+safezoneY+0.55;
action=QUOTE(0 call FUNC(toggle_solution_setup));
};
+
+ class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE: TEXT_BORE_HEIGHT {
+ idc=16000;
+ w=0.22;
+ y=0.265*safezoneH+safezoneY+0.25;
+ sizeEx=0.022;
+ text="Temperature";
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE {
+ idc=16001;
+ x=0.550*safezoneW+safezoneX+0.215;
+ sizeEx=0.022;
+ text="Muzzle velocity";
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1: ATragMX_RscEdit {
+ idc=160021;
+ w=0.082;
+ h=0.035;
+ x=0.550*safezoneW+safezoneX+0.128;
+ y=0.265*safezoneH+safezoneY+0.29;
+ text="0";
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_2: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
+ idc=160022;
+ y=0.265*safezoneH+safezoneY+0.325;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_3: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
+ idc=160023;
+ y=0.265*safezoneH+safezoneY+0.360;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_4: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
+ idc=160024;
+ y=0.265*safezoneH+safezoneY+0.395;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_5: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
+ idc=160025;
+ y=0.265*safezoneH+safezoneY+0.430;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_6: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
+ idc=160026;
+ y=0.265*safezoneH+safezoneY+0.465;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_7: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
+ idc=160027;
+ y=0.265*safezoneH+safezoneY+0.500;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_1: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
+ idc=160031;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_2: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_2 {
+ idc=160032;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_3: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_3 {
+ idc=160033;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_4: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_4 {
+ idc=160034;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_5: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_5 {
+ idc=160035;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_6: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_6 {
+ idc=160036;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_7: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_7 {
+ idc=160037;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_CLEAR: TEXT_TARGET_DATA_NEXT {
+ idc=16004;
+ style=ST_CENTER;
+ h=0.035;
+ y=0.265*safezoneH+safezoneY+0.3625;
+ text="Clear";
+ action=QUOTE(call FUNC(clear_muzzle_velocity_data));
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_QUESTIONMARK: TEXT_MUZZLE_VELOCITY_DATA_CLEAR {
+ idc=16005;
+ y=0.265*safezoneH+safezoneY+0.430;
+ text="?";
+ action="";
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_DONE: TEXT_TARGET_DATA_DONE {
+ idc=16006;
+ action=QUOTE(1 call FUNC(toggle_muzzle_velocity_data));
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_CANCEL: TEXT_TARGET_DATA_CANCEL {
+ idc=16007;
+ action=QUOTE(0 call FUNC(toggle_muzzle_velocity_data));
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_PREV: TEXT_TARGET_DATA_PREV {
+ idc=16008;
+ };
+ class TEXT_MUZZLE_VELOCITY_DATA_NEXT: TEXT_TARGET_DATA_NEXT {
+ idc=16009;
+ };
+
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE: TEXT_BORE_HEIGHT {
+ idc=17000;
+ w=0.22;
+ x=0.550*safezoneW+safezoneX+0.15;
+ y=0.265*safezoneH+safezoneY+0.25;
+ sizeEx=0.022;
+ text="Meters";
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE {
+ idc=17001;
+ x=0.550*safezoneW+safezoneX+0.235;
+ sizeEx=0.022;
+ text="BC-Coef";
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1: ATragMX_RscEdit {
+ idc=170021;
+ w=0.082;
+ h=0.035;
+ x=0.550*safezoneW+safezoneX+0.128;
+ y=0.265*safezoneH+safezoneY+0.29;
+ text="0";
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_2: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
+ idc=170022;
+ y=0.265*safezoneH+safezoneY+0.325;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_3: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
+ idc=170023;
+ y=0.265*safezoneH+safezoneY+0.360;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_4: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
+ idc=170024;
+ y=0.265*safezoneH+safezoneY+0.395;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_5: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
+ idc=170025;
+ y=0.265*safezoneH+safezoneY+0.430;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_6: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
+ idc=170026;
+ y=0.265*safezoneH+safezoneY+0.465;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_7: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
+ idc=170027;
+ y=0.265*safezoneH+safezoneY+0.500;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_1: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
+ idc=170031;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_2: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_2 {
+ idc=170032;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_3: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_3 {
+ idc=170033;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_4: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_4 {
+ idc=170034;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_5: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_5 {
+ idc=170035;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_6: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_6 {
+ idc=170036;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_7: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_7 {
+ idc=170037;
+ x=0.550*safezoneW+safezoneX+0.225;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_QUESTIONMARK: TEXT_TARGET_DATA_NEXT {
+ idc=17004;
+ style=ST_CENTER;
+ w=0.04;
+ h=0.035;
+ y=0.265*safezoneH+safezoneY+0.35;
+ text="?";
+ action="";
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_CLEAR: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_QUESTIONMARK {
+ idc=17005;
+ w=0.07;
+ y=0.265*safezoneH+safezoneY+0.4175;
+ text="Clear";
+ action=QUOTE(call FUNC(clear_c1_ballistic_coefficient_data));
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DONE: TEXT_TARGET_DATA_DONE {
+ idc=17006;
+ action=QUOTE(1 call FUNC(toggle_c1_ballistic_coefficient_data));
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_CANCEL: TEXT_TARGET_DATA_CANCEL {
+ idc=17007;
+ action=QUOTE(0 call FUNC(toggle_c1_ballistic_coefficient_data));
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_PREV: TEXT_TARGET_DATA_PREV {
+ idc=17008;
+ };
+ class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_NEXT: TEXT_TARGET_DATA_NEXT {
+ idc=17009;
+ };
+
+ class TEXT_TRUING_DROP_ZERO_RANGE: ATragMX_RscText {
+ idc=18000;
+ style=ST_LEFT;
+ x=0.550*safezoneW+safezoneX+0.115;
+ y=0.265*safezoneH+safezoneY+0.220;
+ w=0.135;
+ h=0.03;
+ sizeEx=0.025;
+ text="ZR=100meters";
+ };
+ class TEXT_TRUING_DROP_DROP_UNIT: TEXT_TRUING_DROP_ZERO_RANGE {
+ idc=18001;
+ style=ST_LEFT;
+ x=0.550*safezoneW+safezoneX+0.25;
+ text="Drop=mil";
+ };
+ class TEXT_TRUING_DROP_TARGET_RANGE: TEXT_TRUING_DROP_ZERO_RANGE {
+ idc=18002;
+ y=0.265*safezoneH+safezoneY+0.35;
+ sizeEx=0.027;
+ text="Target Range";
+ };
+ class TEXT_TRUING_DROP_DROP: TEXT_TRUING_DROP_TARGET_RANGE {
+ idc=18003;
+ w=0.07;
+ y=0.265*safezoneH+safezoneY+0.40;
+ text="Drop";
+ };
+ class TEXT_TRUING_DROP_MUZZLE_VELOCITY: TEXT_TRUING_DROP_DROP {
+ idc=18004;
+ y=0.265*safezoneH+safezoneY+0.50;
+ text="MV";
+ };
+ class TEXT_TRUING_DROP_C1_BALLISTIC_COEFFICIENT: TEXT_TRUING_DROP_DROP {
+ idc=18005;
+ y=0.265*safezoneH+safezoneY+0.55;
+ text="C1";
+ };
+ class TEXT_TRUING_DROP_DROP_OUTPUT: ATragMX_RscEdit {
+ idc=18006;
+ style=ST_WITH_RECT+ST_RIGHT;
+ colorBackground[]={0.15,0.21,0.23,0.3};
+ colorDisabled[]={0,0,0,1};
+ w=0.06;
+ y=0.265*safezoneH+safezoneY+0.40;
+ x=0.550*safezoneW+safezoneX+0.17;
+ text="";
+ };
+ class TEXT_TRUING_DROP_MUZZLE_VELOCITY_OUTPUT: TEXT_TRUING_DROP_DROP_OUTPUT {
+ idc=18007;
+ y=0.265*safezoneH+safezoneY+0.50;
+ text="";
+ };
+ class TEXT_TRUING_DROP_C1_BALLISTIC_COEFFICIENT_OUTPUT: TEXT_TRUING_DROP_DROP_OUTPUT {
+ idc=18008;
+ y=0.265*safezoneH+safezoneY+0.55;
+ text="";
+ };
+ class TEXT_TRUING_DROP_SUPER: TEXT_TARGET_A {
+ idc=18009;
+ w=0.06;
+ x=0.550*safezoneW+safezoneX+0.25;
+ y=0.265*safezoneH+safezoneY+0.30;
+ text="SUPER";
+ action=QUOTE(GVAR(truingDropMode) = 0; call FUNC(update_truing_drop_selection));
+ };
+ class TEXT_TRUING_DROP_SUB: TEXT_TRUING_DROP_SUPER {
+ idc=18010;
+ x=0.550*safezoneW+safezoneX+0.32;
+ text="SUB";
+ action=QUOTE(GVAR(truingDropMode) = 1; call FUNC(update_truing_drop_selection));
+ };
+ class TEXT_TRUING_DROP_TARGET_RANGE_SUPER_INPUT: ATragMX_RscEdit {
+ idc=18011;
+ style=ST_WITH_RECT+ST_RIGHT;
+ colorDisabled[]={0,0,0,0.6};
+ w=0.06;
+ x=0.550*safezoneW+safezoneX+0.25;
+ y=0.265*safezoneH+safezoneY+0.35;
+ };
+ class TEXT_TRUING_DROP_TARGET_RANGE_SUB_INPUT: TEXT_TRUING_DROP_TARGET_RANGE_SUPER_INPUT {
+ idc=18012;
+ x=0.550*safezoneW+safezoneX+0.32;
+ };
+ class TEXT_TRUING_DROP_DROP_SUPER_INPUT: TEXT_TRUING_DROP_TARGET_RANGE_SUPER_INPUT {
+ idc=18013;
+ y=0.265*safezoneH+safezoneY+0.40;
+ };
+ class TEXT_TRUING_DROP_DROP_SUB_INPUT: TEXT_TRUING_DROP_TARGET_RANGE_SUB_INPUT {
+ idc=18014;
+ y=0.265*safezoneH+safezoneY+0.40;
+ };
+ class TEXT_TRUING_DROP_CALC: TEXT_GUN_LIST {
+ idc=18015;
+ style=ST_CENTER;
+ w=0.11;
+ x=0.550*safezoneW+safezoneX+0.26;
+ y=0.265*safezoneH+safezoneY+0.45;
+ text="Calc";
+ action=QUOTE(true call FUNC(calculate_truing_drop));
+ };
+ class TEXT_TRUING_DROP_MV_INPUT: TEXT_TRUING_DROP_TARGET_RANGE_SUPER_INPUT {
+ idc=18016;
+ y=0.265*safezoneH+safezoneY+0.50;
+ };
+ class TEXT_TRUING_DROP_C1_BALLISTIC_COEFFICIENT_INPUT: TEXT_TRUING_DROP_TARGET_RANGE_SUB_INPUT {
+ idc=18017;
+ y=0.265*safezoneH+safezoneY+0.55;
+ };
+ class TEXT_TRUING_DROP_ACCEPT: TEXT_GUN_LIST {
+ idc=18018;
+ w=0.085;
+ h=0.04;
+ x=0.550*safezoneW+safezoneX+0.125;
+ y=0.265*safezoneH+safezoneY+0.60;
+ text="Accept";
+ action=QUOTE(1 call FUNC(toggle_truing_drop));
+ };
+ class TEXT_TRUING_DROP_CANCEL: TEXT_TRUING_DROP_ACCEPT {
+ idc=18019;
+ x=0.550*safezoneW+safezoneX+0.210;
+ text="Cancel";
+ action=QUOTE(0 call FUNC(toggle_truing_drop));
+ };
+ class TEXT_TRUING_DROP_RESTORE: TEXT_TRUING_DROP_CANCEL {
+ idc=18020;
+ x=0.550*safezoneW+safezoneX+0.29525;
+ text="Restore";
+ action=QUOTE(true call FUNC(restore_truing_drop));
+ };
};
};
diff --git a/addons/atragmx/XEH_PREP.hpp b/addons/atragmx/XEH_PREP.hpp
index 20900711c3..fc4c5a0224 100644
--- a/addons/atragmx/XEH_PREP.hpp
+++ b/addons/atragmx/XEH_PREP.hpp
@@ -1,13 +1,17 @@
PREP(add_new_gun);
+PREP(calculate_distance_at_velocity);
PREP(calculate_range_card);
PREP(calculate_solution);
PREP(calculate_target_range_assist);
PREP(calculate_target_solution);
PREP(calculate_target_speed_assist);
+PREP(calculate_truing_drop);
PREP(can_show);
PREP(change_gun);
PREP(change_target_slot);
+PREP(clear_c1_ballistic_coefficient_data);
+PREP(clear_muzzle_velocity_data);
PREP(clear_user_data);
PREP(create_dialog);
PREP(cycle_gun_list);
@@ -18,17 +22,28 @@ PREP(cycle_scope_unit);
PREP(cycle_target_size_units);
PREP(cycle_target_speed_direction);
PREP(delete_gun);
+PREP(evaluate_option_menu_input);
PREP(init);
+PREP(insert_c1_ballistic_coefficient_data);
+PREP(insert_muzzle_velocity_data);
PREP(parse_input);
+PREP(read_gun_list_entries_from_config);
+PREP(recalculate_c1_ballistic_coefficient);
+PREP(recalculate_muzzle_velocity);
PREP(reset_relative_click_memory);
PREP(restore_atmo_default);
+PREP(restore_truing_drop);
PREP(restore_user_data);
PREP(save_gun);
+PREP(shift_c1_ballistic_coefficient_data);
+PREP(shift_muzzle_velocity_data);
PREP(show_add_new_gun);
PREP(show_atmo_env_data);
+PREP(show_c1_ballistic_coefficient_data);
PREP(show_gun_ammo_data);
PREP(show_gun_list);
PREP(show_main_page);
+PREP(show_muzzle_velocity_data);
PREP(show_range_card);
PREP(show_range_card_setup);
PREP(show_solution_setup);
@@ -36,24 +51,35 @@ PREP(show_target_data);
PREP(show_target_range_assist);
PREP(show_target_speed_assist);
PREP(show_target_speed_assist_timer);
+PREP(show_truing_drop);
PREP(sord);
+PREP(store_gun_list);
PREP(store_user_data);
PREP(target_speed_assist_timer);
PREP(toggle_atmo_env_data);
+PREP(toggle_c1_ballistic_coefficient_data);
+PREP(toggle_coriolis);
PREP(toggle_gun_ammo_data);
PREP(toggle_gun_list);
+PREP(toggle_muzzle_velocity_data);
+PREP(toggle_option_menu);
PREP(toggle_range_card);
PREP(toggle_range_card_setup);
PREP(toggle_solution_setup);
PREP(toggle_target_data);
PREP(toggle_target_range_assist);
PREP(toggle_target_speed_assist);
+PREP(toggle_truing_drop);
+PREP(true_c1_ballistic_coefficient);
+PREP(true_muzzle_velocity);
PREP(update_atmosphere);
PREP(update_atmo_env_data);
PREP(update_atmo_selection);
+PREP(update_c1_ballistic_coefficient_data);
PREP(update_gun);
PREP(update_gun_ammo_data);
PREP(update_inclination_angle);
+PREP(update_muzzle_velocity_data);
PREP(update_range_card);
PREP(update_relative_click_memory);
PREP(update_result);
@@ -62,6 +88,8 @@ PREP(update_solution_setup);
PREP(update_target);
PREP(update_target_data);
PREP(update_target_selection);
+PREP(update_truing_drop_data);
+PREP(update_truing_drop_selection);
PREP(update_unit_selection);
PREP(update_zero_range);
PREP(on_close_dialog);
diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf
index 4a68aac749..9d4c903b06 100644
--- a/addons/atragmx/XEH_postInit.sqf
+++ b/addons/atragmx/XEH_postInit.sqf
@@ -5,44 +5,49 @@
if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ATRAGMX_PROFILE_NAMESPACE_VERSION && count (profileNamespace getVariable ["ACE_ATragMX_gunList", []]) > 0) then {
GVAR(gunList) = profileNamespace getVariable "ACE_ATragMX_gunList";
} else {
- // 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
- GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657485, -0.00063800, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ],
+ // 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" , 820, 100, 0.0657485, -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" , 860, 100, 0.0611565, -0.00036645, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ],
- ["12.7x99mm" , 900, 100, 0.0582418, -0.00057503, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ],
- ["12.7x99mm API" , 900, 100, 0.0582418, -0.00057503, 3.81, 0, 2, 10, 120, 0, 0, 41.99, 12.9, 38.10, 0.670, 1, "ASM" ],
+ ["12.7x99mm AMAX" , 860, 100, 0.0611565, -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" , 900, 100, 0.0582418, -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.7x54mm" , 300, 100, 0.3394630, -0.00019268, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ],
+ ["12.7x54mm" , 300, 100, 0.3394630, -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],
+
+ [".50 Beowulf" , 563, 100, 0.0657485, -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],
- [".408 Chey Tac" , 910, 100, 0.0569400, -0.00038944, 3.81, 0, 2, 10, 120, 0, 0, 26.57, 10.4, 33.02, 0.970, 1, "ASM" ],
+ [".408 Chey Tac" , 910, 100, 0.0569400, -0.00038944, 3.81, 0, 2, 10, 120, 0, 0, 26.57, 10.4, 33.02, 0.970, 1, "ASM" , [[-15,883],[0,890],[10,897],[15,902],[25,916],[30,925],[35,936]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
- ["9.3×64mm" , 870, 100, 0.0619295, -0.00108571, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ],
+ ["9.3×64mm" , 870, 100, 0.0619295, -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],
- [".338LM 250gr" , 880, 100, 0.0598469, -0.00059133, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"],
- [".338LM 300gr" , 800, 100, 0.0677343, -0.00052190, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"],
- [".338LM API526" , 895, 100, 0.0588865, -0.00069611, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.560, 1, "ASM" ],
+ [".338LM 250gr" , 880, 100, 0.0598469, -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" , 800, 100, 0.0677343, -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" , 880, 100, 0.0588865, -0.00069611, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.760, 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" , 900, 100, 0.0584442, -0.00070530, 3.81, 0, 2, 10, 120, 0, 0, 12.31, 7.80, 25.40, 0.268, 7, "ICAO"],
- [".300WM Mk248 Mod1" , 867, 100, 0.0610738, -0.00061188, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.310, 7, "ICAO"],
- [".300WM Berger OTM" , 853, 100, 0.0622179, -0.00053733, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.368, 7, "ICAO"],
+ [".300WM Mk248 Mod0" , 900, 100, 0.0584442, -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" , 867, 100, 0.0610738, -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" , 853, 100, 0.0622179, -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],
- ["7.62x54mmR" , 800, 100, 0.0691878, -0.00100023, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO"],
+ ["7.62x54mmR" , 820, 100, 0.0691878, -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.62x51mm M80" , 810, 100, 0.0679374, -0.00100957, 3.81, 0, 2, 10, 120, 0, 0, 9.461, 7.82, 25.40, 0.200, 7, "ICAO"],
- ["7.62x51mm M118LR" , 780, 100, 0.0710319, -0.00082828, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"],
- ["7.62x51mm Mk316" , 780, 100, 0.0710319, -0.00082029, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"],
- ["7.62x51mm Mk319" , 910, 100, 0.0584524, -0.00102338, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"],
- ["7.62x51mm M993" , 930, 100, 0.0570316, -0.00107148, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO"],
- ["7.62x51mm Subsonic", 320, 100, 0.3059680, -0.00049899, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.235, 7, "ICAO"],
+ ["7.62x51mm M80" , 810, 100, 0.0679374, -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" , 765, 100, 0.0710319, -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" , 782, 100, 0.0710319, -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" , 901, 100, 0.0584524, -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" , 920, 100, 0.0570316, -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", 315, 100, 0.3059680, -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],
- ["6.5x39mm" , 800, 100, 0.0683482, -0.00075308, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"],
- ["6.5x47mm Lapua" , 800, 100, 0.0682221, -0.00067037, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"],
- ["6.5mm Creedmor" , 840, 100, 0.0636501, -0.00060887, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.317, 7, "ICAO"],
-
- ["5.56x45mm M855" , 870, 100, 0.0626386, -0.00126466, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ],
- ["5.56x45mm Mk262" , 820, 100, 0.0671481, -0.00109563, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ],
- ["5.56x45mm Mk318" , 880, 100, 0.0615937, -0.00123318, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ],
- ["5.56x45mm M995" , 869, 100, 0.0626713, -0.00123272, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" ]];
+ ["6.5x39mm" , 774, 100, 0.0683482, -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" , 775, 100, 0.0682221, -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" , 830, 100, 0.0636501, -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],
+
+ ["5.8x42mm DBP87" , 950, 100, 0.0572574, -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.56x45mm M855" , 870, 100, 0.0626386, -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" , 820, 100, 0.0671481, -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" , 880, 100, 0.0615937, -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" , 869, 100, 0.0626713, -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.45x39mm 7N6M" , 735, 100, 0.0787205, -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]];
[] call FUNC(clear_user_data);
profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)];
@@ -50,5 +55,6 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) ==
[] call FUNC(init);
[] call FUNC(restore_user_data);
+[] call FUNC(read_gun_list_entries_from_config);
[QEGVAR(vector,rangefinderData), {_this call FUNC(sord)}] call CBA_fnc_addEventHandler;
diff --git a/addons/atragmx/functions/fnc_add_new_gun.sqf b/addons/atragmx/functions/fnc_add_new_gun.sqf
index dbc85cc27f..75d0ddd5f1 100644
--- a/addons/atragmx/functions/fnc_add_new_gun.sqf
+++ b/addons/atragmx/functions/fnc_add_new_gun.sqf
@@ -17,11 +17,11 @@
private _gunName = ctrlText 11001;
if (_gunName != "") then {
- private _gunProfileEntry = [_gunName, 810, 100, 0.0679, -0.0010350, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.393, 1, "ICAO"],
+ private _gunProfileEntry = [_gunName, 810, 100, 0.0679, -0.0010350, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.393, 1, "ICAO", [[-15,0],[0,0],[10,0],[15,0],[25,0],[30,0],[35,0]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true];
GVAR(gunList) = GVAR(gunList) + [_gunProfileEntry];
lbAdd [6000, _gunProfileEntry select 0];
- profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)];
+ call FUNC(store_gun_list);
};
diff --git a/addons/atragmx/functions/fnc_calculate_distance_at_velocity.sqf b/addons/atragmx/functions/fnc_calculate_distance_at_velocity.sqf
new file mode 100644
index 0000000000..f86ef5d28a
--- /dev/null
+++ b/addons/atragmx/functions/fnc_calculate_distance_at_velocity.sqf
@@ -0,0 +1,41 @@
+/*
+ * Author: Ruthberg
+ * Calculates distance at which the bullet velocity drops below the threshold velocity
+ *
+ * Arguments:
+ * theshold velocity
+ *
+ * Return Value:
+ * distance _thresholdVelocity} do {
+ private _bc = GVAR(targetSolutionInput) select 14;
+ private _dragModel = GVAR(targetSolutionInput) select 15;
+ private _drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then {
+ parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _velocity]))
+ } else {
+ ([_dragModel, _bc, _velocity] call EFUNC(advanced_ballistics,calculateRetardation))
+ };
+ _distance = _distance + _velocity * __DELTA_T;
+ _velocity = _velocity - (_drag * __DELTA_T);
+};
+
+_distance
diff --git a/addons/atragmx/functions/fnc_calculate_target_range_assist.sqf b/addons/atragmx/functions/fnc_calculate_target_range_assist.sqf
index e59cdee37d..be21a09927 100644
--- a/addons/atragmx/functions/fnc_calculate_target_range_assist.sqf
+++ b/addons/atragmx/functions/fnc_calculate_target_range_assist.sqf
@@ -16,7 +16,7 @@
#include "script_component.hpp"
private _angle = parseNumber(ctrlText 7012);
-private _targetSize = parseNumber(ctrlText 7010);
+private _targetSize = abs(parseNumber(ctrlText 7010));
if (GVAR(rangeAssistUseTargetHeight)) then {
_targetSize = _targetSize * cos(_angle);
};
@@ -43,7 +43,7 @@ switch (GVAR(rangeAssistImageSizeUnit)) do {
_imageSize = _imageSize / 60 / 1.047;
};
};
-private _estRange = parseNumber(ctrlText 7013);
+private _estRange = abs(parseNumber(ctrlText 7013));
if (GVAR(currentUnit) == 1) then {
_estRange = _estRange / 1.0936133;
};
@@ -52,7 +52,7 @@ switch (_this) do {
case 0: {
_targetSize = tan(_imageSize) * _estRange;
- if (GVAR(rangeAssistUseTargetHeight)) then {
+ if (GVAR(rangeAssistUseTargetHeight) && cos(_angle) != 0) then {
_targetSize = _targetSize / cos(_angle);
};
@@ -71,8 +71,10 @@ switch (_this) do {
ctrlSetText [7010, Str(Round(_targetSize * 100) / 100)];
};
case 1: {
- _imageSize = atan(_targetSize / _estRange);
-
+ if (_estRange > 0) then {
+ _imageSize = atan(_targetSize / _estRange);
+ };
+
switch (GVAR(rangeAssistImageSizeUnit)) do {
case 0: {
_imageSize = _imageSize * 6400 / 360;
@@ -88,8 +90,10 @@ switch (_this) do {
ctrlSetText [7011, Str(Round(_imageSize * 100) / 100)];
};
case 2: {
- _estRange = _targetSize / tan(_imageSize);
-
+ if (tan(_imageSize) != 0) then {
+ _estRange = _targetSize / tan(_imageSize);
+ };
+
ctrlSetText [7013, Str(Round(_estRange))];
};
};
diff --git a/addons/atragmx/functions/fnc_calculate_target_solution.sqf b/addons/atragmx/functions/fnc_calculate_target_solution.sqf
index 8bd844938f..ced57df973 100644
--- a/addons/atragmx/functions/fnc_calculate_target_solution.sqf
+++ b/addons/atragmx/functions/fnc_calculate_target_solution.sqf
@@ -70,9 +70,10 @@ _inclinationAngle = GVAR(inclinationAngle) select GVAR(currentTarget);
_targetSpeed = GVAR(targetSpeed) select GVAR(currentTarget);
_targetRange = GVAR(targetRange) select GVAR(currentTarget);
-private ["_result"];
-_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000,
- [_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false, _stabilityFactor, _twistDirection, _latitude, _directionOfFire] call FUNC(calculate_solution);
+GVAR(targetSolutionInput) = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000,
+ [_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false, _stabilityFactor, _twistDirection, _latitude, _directionOfFire];
+
+private _result = GVAR(targetSolutionInput) call FUNC(calculate_solution);
GVAR(elevationOutput) set [GVAR(currentTarget), _result select 0];
GVAR(windage1Output) set [GVAR(currentTarget), (_result select 1) select 0];
@@ -80,5 +81,8 @@ GVAR(windage2Output) set [GVAR(currentTarget), (_result select 1) select 1];
GVAR(leadOutput) set [GVAR(currentTarget), _result select 2];
GVAR(tofOutput) set [GVAR(currentTarget), _result select 3];
GVAR(velocityOutput) set [GVAR(currentTarget), _result select 4];
+GVAR(verticalCoriolisOutput) set [GVAR(currentTarget), _result select 6];
+GVAR(horizontalCoriolisOutput) set [GVAR(currentTarget), _result select 7];
+GVAR(spinDriftOutput) set [GVAR(currentTarget), _result select 8];
[] call FUNC(update_result);
diff --git a/addons/atragmx/functions/fnc_calculate_truing_drop.sqf b/addons/atragmx/functions/fnc_calculate_truing_drop.sqf
new file mode 100644
index 0000000000..ddc57bdb96
--- /dev/null
+++ b/addons/atragmx/functions/fnc_calculate_truing_drop.sqf
@@ -0,0 +1,107 @@
+/*
+ * Author: Ruthberg
+ * Calculates the truing drop and updates the output fields
+ *
+ * Arguments:
+ * parse input
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_calculate_truing_drop
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+private _parseInput = _this;
+
+private _transonicRange = GVAR(truingDropRangeData) select 0;
+private _subsonicRange = GVAR(truingDropRangeData) select 1;
+private _transonicDrop = GVAR(truingDropDropData) select 1;
+private _subsonicDrop = GVAR(truingDropDropData) select 2;
+
+if (_parseInput) then {
+ _transonicRange = 0 max abs(parseNumber(ctrlText 18011)) min 4000;
+ _subsonicRange = 0 max abs(parseNumber(ctrlText 18012)) min 4000;
+ if (GVAR(currentUnit) != 2) then {
+ _transonicRange = _transonicRange * 0.9144;
+ _subsonicRange = _subsonicRange * 0.9144;
+ };
+ _transonicRange = Round(_transonicRange);
+ _subsonicRange = Round(_subsonicRange);
+
+ _subsonicRange = _transonicRange max _subsonicRange;
+
+ _transonicDrop = 0 max abs(parseNumber(ctrlText 18013)) min 1000;
+ _subsonicDrop = 0 max abs(parseNumber(ctrlText 18014)) min 1000;
+ private _dropUnit = GVAR(currentScopeUnit);
+ if (_dropUnit == 3) then {
+ switch (GVAR(currentScopeClickUnit)) do {
+ case 0: { _dropUnit = 1; };
+ case 1: { _dropUnit = 2; };
+ case 2: { _dropUnit = 0; };
+ };
+ };
+ switch (_dropUnit) do {
+ case 0: {
+ _transonicDrop = _transonicDrop * 3.38;
+ _subsonicDrop = _subsonicDrop * 3.38;
+ };
+ case 2: {
+ _transonicDrop = _transonicDrop / 1.047;
+ _subsonicDrop = _subsonicDrop / 1.047;
+ };
+ };
+ _transonicDrop = Round(_transonicDrop * 100) / 100;
+ _subsonicDrop = Round(_subsonicDrop * 100) / 100;
+
+ _subsonicDrop = _transonicDrop max _subsonicDrop;
+};
+
+if ((GVAR(truingDropDropData) select 0) == 0 || {!([_transonicRange, _subsonicRange] isEqualTo GVAR(truingDropRangeData))}) then {
+ if (isNil QGVAR(targetSolutionInput)) then {
+ call FUNC(calculate_target_solution);
+ };
+ private _solutionInput = +GVAR(targetSolutionInput);
+
+ if (_transonicRange == 0) then {
+ _transonicRange = Round(403 call FUNC(calculate_distance_at_velocity));
+ };
+ _solutionInput set [13, _transonicRange];
+ private _result1 = _solutionInput call FUNC(calculate_solution);
+ _transonicDrop = Round((_result1 select 0) * 100) / 100;
+ GVAR(truingDropRangeData) set [0, _transonicRange];
+ GVAR(truingDropDropData) set [1, _transonicDrop];
+ GVAR(truingDropReferenceDropData) set [0, _transonicDrop];
+
+ private _speedOfSound = (_solutionInput select 5) call EFUNC(weather,calculateSpeedOfSound);
+ if (_subsonicRange == 0) then {
+ _subsonicRange = _speedOfSound call FUNC(calculate_distance_at_velocity);
+ if (GVAR(currentUnit) == 2) then {
+ _subsonicRange = _subsonicRange + 200;
+ } else {
+ _subsonicRange = _subsonicRange + 200 * 1.0936133;
+ };
+ _subsonicRange = Round(_subsonicRange);
+ };
+ _solutionInput set [13, _subsonicRange];
+ private _result2 = _solutionInput call FUNC(calculate_solution);
+ _subsonicDrop = Round((_result2 select 0) * 100) / 100;
+ GVAR(truingDropRangeData) set [1, _subsonicRange];
+ GVAR(truingDropDropData) set [2, _subsonicDrop];
+ GVAR(truingDropReferenceDropData) set [1, _subsonicDrop];
+} else {
+ if (_transonicDrop != GVAR(truingDropDropData) select 1 || _subsonicDrop != GVAR(truingDropDropData) select 2) then {
+ GVAR(truingDropDropData) set [1, _transonicDrop];
+ GVAR(truingDropDropData) set [2, _subsonicDrop];
+ if (GVAR(truingDropMode) == 0) then {
+ call FUNC(true_muzzle_velocity);
+ } else {
+ call FUNC(true_c1_ballistic_coefficient);
+ };
+ };
+};
+
+call FUNC(update_truing_drop_data);
diff --git a/addons/atragmx/functions/fnc_change_gun.sqf b/addons/atragmx/functions/fnc_change_gun.sqf
index babd4e733c..b6e5e24658 100644
--- a/addons/atragmx/functions/fnc_change_gun.sqf
+++ b/addons/atragmx/functions/fnc_change_gun.sqf
@@ -26,6 +26,12 @@ if (_restoreMemory) then {
};
GVAR(currentGun) = _gunID;
+[false, false] call FUNC(recalculate_muzzle_velocity);
+if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
+ false call FUNC(restore_truing_drop);
+ [false, false] call FUNC(recalculate_c1_ballistic_coefficient);
+};
+
if (_updateDisplay) then {
lbSetCurSel [6000, GVAR(currentGun)];
};
@@ -37,6 +43,8 @@ GVAR(currentScopeClickNumber) = 1 max (GVAR(workingMemory) select 8) min 10;
if (_updateDisplay) then {
[] call FUNC(update_gun);
[] call FUNC(update_gun_ammo_data);
+ [] call FUNC(update_muzzle_velocity_data);
+ [] call FUNC(update_c1_ballistic_coefficient_data);
};
GVAR(elevationOutput) set [GVAR(currentTarget), 0];
@@ -45,6 +53,9 @@ GVAR(windage2Output) set [GVAR(currentTarget), 0];
GVAR(leadOutput) set [GVAR(currentTarget), 0];
GVAR(tofOutput) set [GVAR(currentTarget), 0];
GVAR(velocityOutput) set [GVAR(currentTarget), 0];
+GVAR(verticalCoriolisOutput) set [GVAR(currentTarget), 0];
+GVAR(horizontalCoriolisOutput) set [GVAR(currentTarget), 0];
+GVAR(spinDriftOutput) set [GVAR(currentTarget), 0];
if (_updateDisplay) then {
[] call FUNC(calculate_target_solution);
diff --git a/addons/atragmx/functions/fnc_change_target_slot.sqf b/addons/atragmx/functions/fnc_change_target_slot.sqf
index a867749f21..7c660ff7de 100644
--- a/addons/atragmx/functions/fnc_change_target_slot.sqf
+++ b/addons/atragmx/functions/fnc_change_target_slot.sqf
@@ -17,9 +17,8 @@
private _target = 0 max _this min 3;
-call FUNC(parse_input);
+[] call FUNC(parse_input);
GVAR(currentTarget) = _target;
call FUNC(update_target_selection);
-
-[] call FUNC(calculate_target_solution);
+call FUNC(calculate_target_solution);
diff --git a/addons/atragmx/functions/fnc_clear_c1_ballistic_coefficient_data.sqf b/addons/atragmx/functions/fnc_clear_c1_ballistic_coefficient_data.sqf
new file mode 100644
index 0000000000..c6f2d47134
--- /dev/null
+++ b/addons/atragmx/functions/fnc_clear_c1_ballistic_coefficient_data.sqf
@@ -0,0 +1,21 @@
+/*
+ * Author: Ruthberg
+ * Clears the c1 ballistic coefficient data fields
+ *
+ * Arguments:
+ * Nothing
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_clear_c1_ballistic_coefficient_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+// Distances
+{ctrlSetText [_x, "0"]} forEach [170021, 170022, 170023, 170024, 170025, 170026, 170027];
+// Ballistic Coefficients
+{ctrlSetText [_x, "0"]} forEach [170031, 170032, 170033, 170034, 170035, 170036, 170037];
diff --git a/addons/atragmx/functions/fnc_clear_muzzle_velocity_data.sqf b/addons/atragmx/functions/fnc_clear_muzzle_velocity_data.sqf
new file mode 100644
index 0000000000..d76fa5864b
--- /dev/null
+++ b/addons/atragmx/functions/fnc_clear_muzzle_velocity_data.sqf
@@ -0,0 +1,21 @@
+/*
+ * Author: Ruthberg
+ * Clears the muzzle velocity data fields
+ *
+ * Arguments:
+ * Nothing
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_clear_muzzle_velocity_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+// Temperatures
+{ctrlSetText [_x, "0"]} forEach [160021, 160022, 160023, 160024, 160025, 160026, 160027];
+// Muzzle velocities
+{ctrlSetText [_x, "0"]} forEach [160031, 160032, 160033, 160034, 160035, 160036, 160037];
diff --git a/addons/atragmx/functions/fnc_clear_user_data.sqf b/addons/atragmx/functions/fnc_clear_user_data.sqf
index 308b5bbf12..faa9af07f7 100644
--- a/addons/atragmx/functions/fnc_clear_user_data.sqf
+++ b/addons/atragmx/functions/fnc_clear_user_data.sqf
@@ -28,6 +28,7 @@ profileNamespace setVariable ["ACE_ATragMX_temperature", nil];
profileNamespace setVariable ["ACE_ATragMX_barometricPressure", nil];
profileNamespace setVariable ["ACE_ATragMX_relativeHumidity", nil];
+profileNamespace setVariable ["ACE_ATragMX_showCoriolis", nil];
profileNamespace setVariable ["ACE_ATragMX_showWind2", nil];
profileNamespace setVariable ["ACE_ATragMX_latitude", nil];
profileNamespace setVariable ["ACE_ATragMX_directionOfFire", nil];
diff --git a/addons/atragmx/functions/fnc_create_dialog.sqf b/addons/atragmx/functions/fnc_create_dialog.sqf
index 2eee7c1824..322f135b45 100644
--- a/addons/atragmx/functions/fnc_create_dialog.sqf
+++ b/addons/atragmx/functions/fnc_create_dialog.sqf
@@ -30,8 +30,10 @@ GVAR(showMainPage) call FUNC(show_main_page);
GVAR(showAddNewGun) call FUNC(show_add_new_gun);
GVAR(showAtmoEnvData) call FUNC(show_atmo_env_data);
+GVAR(showC1BallisticCoefficientData) call FUNC(show_c1_ballistic_coefficient_data);
GVAR(showGunAmmoData) call FUNC(show_gun_ammo_data);
GVAR(showGunList) call FUNC(show_gun_list);
+GVAR(showMuzzleVelocityData) call FUNC(show_muzzle_velocity_data);
GVAR(showRangeCard) call FUNC(show_range_card);
if (GVAR(showRangeCard)) then {
ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 5001);
@@ -43,6 +45,7 @@ GVAR(showTargetData) call FUNC(show_target_data);
GVAR(showTargetRangeAssist) call FUNC(show_target_range_assist);
GVAR(showTargetSpeedAssist) call FUNC(show_target_speed_assist);
GVAR(showTargetSpeedAssistTimer) call FUNC(show_target_speed_assist_timer);
+GVAR(showTruingDrop) call FUNC(show_truing_drop);
[GVAR(currentGun), false, true] call FUNC(change_gun);
@@ -50,6 +53,13 @@ GVAR(showTargetSpeedAssistTimer) call FUNC(show_target_speed_assist_timer);
lbAdd [6000, _x select 0];
} forEach GVAR(gunList);
+ctrlShow [3001, false];
+ctrlShow [3002, false];
+
+{
+ (__dsp displayCtrl _x) ctrlEnable false;
+} forEach [18006, 18007, 18008];
+
GVAR(active) = true;
GVAR(DialogPFH) = [{
diff --git a/addons/atragmx/functions/fnc_cycle_scope_unit.sqf b/addons/atragmx/functions/fnc_cycle_scope_unit.sqf
index d83236bc78..f1cc9c2219 100644
--- a/addons/atragmx/functions/fnc_cycle_scope_unit.sqf
+++ b/addons/atragmx/functions/fnc_cycle_scope_unit.sqf
@@ -15,10 +15,10 @@
*/
#include "script_component.hpp"
-[] call FUNC(parse_input);
-
GVAR(currentScopeUnit) = (GVAR(currentScopeUnit) + 1) % (count GVAR(scopeUnits));
GVAR(workingMemory) set [6, GVAR(currentScopeUnit)];
+true call FUNC(show_main_page);
+
[] call FUNC(update_scope_unit);
[] call FUNC(update_result);
diff --git a/addons/atragmx/functions/fnc_delete_gun.sqf b/addons/atragmx/functions/fnc_delete_gun.sqf
index 42970d7aab..c94739035e 100644
--- a/addons/atragmx/functions/fnc_delete_gun.sqf
+++ b/addons/atragmx/functions/fnc_delete_gun.sqf
@@ -28,4 +28,4 @@ GVAR(gunList) = GVAR(gunList) - [0];
lbDelete [6000, _index];
-profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)];
+call FUNC(store_gun_list);
diff --git a/addons/atragmx/functions/fnc_evaluate_option_menu_input.sqf b/addons/atragmx/functions/fnc_evaluate_option_menu_input.sqf
new file mode 100644
index 0000000000..f74f8678a4
--- /dev/null
+++ b/addons/atragmx/functions/fnc_evaluate_option_menu_input.sqf
@@ -0,0 +1,30 @@
+/*
+ * Author: Ruthberg
+ * Evalutes input from the option menu
+ *
+ * Arguments:
+ * option menu id
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * 1 call ace_atragmx_fnc_evaluate_option_menu_input
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+params ["_optionID"];
+
+switch (_optionID) do {
+ case 0: {}; // Accuracy 1st
+ case 1: { 0 call FUNC(toggle_muzzle_velocity_data); }; // MuzVel Table
+ case 2: { 0 call FUNC(toggle_c1_ballistic_coefficient_data); }; // Bal Coef Table
+ case 3: { 0 call FUNC(toggle_target_speed_assist); }; // Target Speed Est
+ case 4: { 0 call FUNC(toggle_target_range_assist); }; // Target Range Est
+ case 5: { 0 call FUNC(toggle_truing_drop); }; // Truing Drop
+ case 6: { 0 call FUNC(toggle_coriolis); }; // Show Coriolis
+ case 7: { 0 call FUNC(toggle_solution_setup); }; // Set Clicks
+ case 8: {}; // Gun Note
+};
diff --git a/addons/atragmx/functions/fnc_init.sqf b/addons/atragmx/functions/fnc_init.sqf
index 30b17ebf90..eda2cc1ee0 100644
--- a/addons/atragmx/functions/fnc_init.sqf
+++ b/addons/atragmx/functions/fnc_init.sqf
@@ -65,18 +65,33 @@ GVAR(targetSpeedDirection) = [1, 1, 1, 1];
GVAR(targetRange) = [0, 0, 0, 0];
GVAR(showWind2) = false;
+GVAR(showCoriolis) = false;
GVAR(elevationOutput) = [0, 0, 0, 0];
GVAR(windage1Output) = [0, 0, 0, 0];
GVAR(windage2Output) = [0, 0, 0, 0];
GVAR(leadOutput) = [0, 0, 0, 0];
GVAR(tofOutput) = [0, 0, 0, 0];
GVAR(velocityOutput) = [0, 0, 0, 0];
+GVAR(verticalCoriolisOutput) = [0, 0, 0, 0];
+GVAR(horizontalCoriolisOutput) = [0, 0, 0, 0];
+GVAR(spinDriftOutput) = [0, 0, 0, 0];
+
+GVAR(truingDropMode) = 0;
+GVAR(truingDropRangeData) = [0, 0];
+GVAR(truingDropDropData) = [0, 0, 0];
+GVAR(truingDropReferenceDropData) = [0, 0, 0];
+GVAR(truingDropC1) = 0;
+GVAR(truingDropMuzzleVelocity) = 0;
+
+GVAR(targetSolutionInput) = nil;
GVAR(showMainPage) = true;
GVAR(showAddNewGun) = false;
GVAR(showAtmoEnvData) = false;
+GVAR(showC1BallisticCoefficientData) = false;
GVAR(showGunAmmoData) = false;
GVAR(showGunList) = false;
+GVAR(showMuzzleVelocityData) = false;
GVAR(showRangeCard) = false;
GVAR(showRangeCardSetup) = false;
GVAR(showSolutionSetup) = false;
@@ -84,3 +99,4 @@ GVAR(showTargetData) = false;
GVAR(showTargetRangeAssist) = false;
GVAR(showTargetSpeedAssist) = false;
GVAR(showTargetSpeedAssistTimer) = false;
+GVAR(showTruingDrop) = false;
diff --git a/addons/atragmx/functions/fnc_insert_c1_ballistic_coefficient_data.sqf b/addons/atragmx/functions/fnc_insert_c1_ballistic_coefficient_data.sqf
new file mode 100644
index 0000000000..5b03c11475
--- /dev/null
+++ b/addons/atragmx/functions/fnc_insert_c1_ballistic_coefficient_data.sqf
@@ -0,0 +1,55 @@
+/*
+ * Author: Ruthberg
+ * Inserts entry in the c1 ballistic coefficient vs. distance interpolation table
+ *
+ * Arguments:
+ * transonic range -
+ * subsonic range -
+ * c1 ballistic coefficient -
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * [800, 0.485] call ace_atragmx_fnc_insert_c1_ballistic_coefficient_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+params ["_transonicRange", "_subsonicRange", "_c1"];
+
+private _entries = {(_x select 1) > 0} count (GVAR(workingMemory) select 19);
+
+if (_entries > 0) then {
+ // Insert
+ private _insertIndex = 0;
+ private _minDiff = 10000;
+ {
+ if (_minDiff > 0 && {(((GVAR(workingMemory) select 19) select _forEachIndex) select 1) == 0}) then {
+ _insertIndex = _forEachIndex;
+ _minDiff = 0;
+ };
+ private _tr = ((GVAR(workingMemory) select 19) select _forEachIndex) select 0;
+ private _diff = abs(_subsonicRange - _tr);
+ if (_diff == 0) exitWith {
+ _insertIndex = _forEachIndex;
+ };
+ if (_diff < _minDiff) then {
+ _insertIndex = _forEachIndex;
+ _minDiff = _diff;
+ };
+ } forEach (GVAR(workingMemory) select 19);
+
+ (GVAR(workingMemory) select 19) set [_insertIndex, [_subsonicRange, 0.1 max _c1 min 2.0]];
+} else {
+ // Reset
+ private _zeroRange = GVAR(workingMemory) select 2;
+ private _bc = GVAR(workingMemory) select 15;
+ GVAR(workingMemory) set [19, [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]];
+ (GVAR(workingMemory) select 19) set [0, [_zeroRange, _bc]];
+ (GVAR(workingMemory) select 19) set [1, [_transonicRange + (_subsonicRange - _transonicRange) * 0.75, _bc]];
+ (GVAR(workingMemory) select 19) set [2, [_subsonicRange, 0.1 max _c1 min 2.0]];
+};
+
+call FUNC(update_c1_ballistic_coefficient_data);
diff --git a/addons/atragmx/functions/fnc_insert_muzzle_velocity_data.sqf b/addons/atragmx/functions/fnc_insert_muzzle_velocity_data.sqf
new file mode 100644
index 0000000000..1eb25b2f62
--- /dev/null
+++ b/addons/atragmx/functions/fnc_insert_muzzle_velocity_data.sqf
@@ -0,0 +1,41 @@
+/*
+ * Author: Ruthberg
+ * Inserts entry in the muzzle velocity vs. temperature interpolation table
+ *
+ * Arguments:
+ * temperature -
+ * muzzle velocity -
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * [10, 800] call ace_atragmx_fnc_insert_muzzle_velocity_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+params ["_temperature", "_muzzleVelocity"];
+
+private _insertIndex = 0;
+private _minDiff = 1000;
+{
+ if (_minDiff > 0 && {(((GVAR(workingMemory) select 18) select _forEachIndex) select 1) == 0}) then {
+ _insertIndex = _forEachIndex;
+ _minDiff = 0;
+ };
+ private _t = ((GVAR(workingMemory) select 18) select _forEachIndex) select 0;
+ private _diff = abs(_temperature - _t);
+ if (_diff == 0) exitWith {
+ _insertIndex = _forEachIndex;
+ };
+ if (_diff < _minDiff) then {
+ _insertIndex = _forEachIndex;
+ _minDiff = _diff;
+ };
+} forEach (GVAR(workingMemory) select 18);
+
+(GVAR(workingMemory) select 18) set [_insertIndex, [_temperature, 0 max _muzzleVelocity min 1400]];
+
+call FUNC(update_muzzle_velocity_data);
diff --git a/addons/atragmx/functions/fnc_parse_input.sqf b/addons/atragmx/functions/fnc_parse_input.sqf
index 61a8caea6a..2f73ecebba 100644
--- a/addons/atragmx/functions/fnc_parse_input.sqf
+++ b/addons/atragmx/functions/fnc_parse_input.sqf
@@ -1,6 +1,6 @@
/*
* Author: Ruthberg
- * Parses all input fields in the gun, atmosphere and target column and the result input fields
+ * Parses all input fields in the gun-, atmosphere- and target column, the result input fields and the muzzle velocity data input fields
*
* Arguments:
* Nothing
@@ -15,6 +15,35 @@
*/
#include "script_component.hpp"
+// Muzzle velocity vs. temperature interpolation data
+{
+ private _temperature = -50 max parseNumber(ctrlText _x) min 160;
+ if (GVAR(currentUnit) == 1) then {
+ _temperature = (_temperature - 32) / 1.8;
+ };
+ ((GVAR(workingMemory) select 18) select _forEachIndex) set [0, _temperature];
+} forEach [160021, 160022, 160023, 160024, 160025, 160026, 160027];
+{
+ private _muzzleVelocity = parseNumber(ctrlText _x);
+ if (GVAR(currentUnit) == 1) then {
+ _muzzleVelocity = _muzzleVelocity / 3.2808399;
+ };
+ ((GVAR(workingMemory) select 18) select _forEachIndex) set [1, 0 max _muzzleVelocity min 1400];
+} forEach [160031, 160032, 160033, 160034, 160035, 160036, 160037];
+
+// C1 coefficient vs. distance interpolation data
+{
+ private _distance = 0 max parseNumber(ctrlText _x) min 4000;
+ if (GVAR(currentUnit) != 2) then {
+ _distance = _distance * 0.9144;
+ };
+ ((GVAR(workingMemory) select 19) select _forEachIndex) set [0, _distance];
+} forEach [170021, 170022, 170023, 170024, 170025, 170026, 170027];
+{
+ private _c1 = 0 max parseNumber(ctrlText _x) min 2.0;
+ ((GVAR(workingMemory) select 19) select _forEachIndex) set [1, _c1];
+} forEach [170031, 170032, 170033, 170034, 170035, 170036, 170037];
+
GVAR(altitude) = -1000 max parseNumber(ctrlText 130030) min 20000;
GVAR(temperature) = -50 max parseNumber(ctrlText 130040) min 160;
GVAR(barometricPressure) = 10 max parseNumber(ctrlText 130050) min 1350;
@@ -49,11 +78,11 @@ if ((ctrlText 140051) == ">") then {
GVAR(targetRange) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140060)) min 4000];
if (GVAR(currentUnit) != 2) then {
GVAR(windSpeed1) set [GVAR(currentTarget), (GVAR(windSpeed1) select GVAR(currentTarget)) * 0.44704];
- GVAR(windSpeed2) set [GVAR(currentTarget), (GVAR(windSpeed2) select GVAR(currentTarget)) * 0.44704];
- GVAR(targetSpeed) set [GVAR(currentTarget), (GVAR(targetSpeed) select GVAR(currentTarget)) * 0.44704];
+ GVAR(windSpeed2) set [GVAR(currentTarget), (GVAR(windSpeed2) select GVAR(currentTarget)) * 0.44704];
+ GVAR(targetSpeed) set [GVAR(currentTarget), (GVAR(targetSpeed) select GVAR(currentTarget)) * 0.44704];
};
if (GVAR(currentUnit) == 1) then {
- GVAR(targetRange) set [GVAR(currentTarget), (GVAR(targetRange) select GVAR(currentTarget)) * 0.9144];
+ GVAR(targetRange) set [GVAR(currentTarget), (GVAR(targetRange) select GVAR(currentTarget)) * 0.9144];
};
private ["_boreHeight", "_bulletMass", "_bulletDiameter", "_airFriction", "_rifleTwist", "_muzzleVelocity", "_zeroRange"];
@@ -67,7 +96,7 @@ if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) t
};
_rifleTwist = parseNumber(ctrlText 120040);
_muzzleVelocity = parseNumber(ctrlText 120050);
-_zeroRange = parseNumber (ctrlText 120060);
+_zeroRange = parseNumber(ctrlText 120060);
if (GVAR(currentUnit) != 2) then {
_boreHeight = _boreHeight * 2.54;
_bulletMass = _bulletMass * 0.06479891;
@@ -88,10 +117,16 @@ GVAR(workingMemory) set [12, _bulletMass];
GVAR(workingMemory) set [13, _bulletDiameter];
GVAR(workingMemory) set [14, _rifleTwist];
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
+ if (_airFriction != GVAR(workingMemory) select 15) then {
+ (_airFriction - (GVAR(workingMemory) select 15)) call FUNC(shift_c1_ballistic_coefficient_data);
+ };
GVAR(workingMemory) set [15, _airFriction];
} else {
GVAR(workingMemory) set [4, _airFriction];
};
+if (_muzzleVelocity != GVAR(workingMemory) select 1) then {
+ (_muzzleVelocity - (GVAR(workingMemory) select 1)) call FUNC(shift_muzzle_velocity_data);
+};
GVAR(workingMemory) set [1, _muzzleVelocity];
GVAR(workingMemory) set [2, _zeroRange];
@@ -101,5 +136,7 @@ GVAR(workingMemory) set [2, _zeroRange];
[] call FUNC(update_atmo_env_data);
[] call FUNC(update_target);
[] call FUNC(update_target_data);
+[] call FUNC(update_muzzle_velocity_data);
+[] call FUNC(update_c1_ballistic_coefficient_data);
[] call FUNC(store_user_data);
diff --git a/addons/atragmx/functions/fnc_read_gun_list_entries_from_config.sqf b/addons/atragmx/functions/fnc_read_gun_list_entries_from_config.sqf
new file mode 100644
index 0000000000..717fb07084
--- /dev/null
+++ b/addons/atragmx/functions/fnc_read_gun_list_entries_from_config.sqf
@@ -0,0 +1,120 @@
+/*
+ * Author: Ruthberg
+ * Reads gun list entries from the config and appends them to the gun list
+ *
+ * Arguments:
+ * Nothing
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_read_gun_list_entries_from_config
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+private _validate_preset = {
+ private _valid = true;
+ if (count _this != 20) then {
+ private _errorMsg = format ["Invalid preset array size: %1", count _this];
+ ERROR(_errorMsg);
+ _valid = false;
+ };
+ if (_this select 0 == "") then {
+ ERROR("Invalid gun profile name");
+ _valid = false;
+ };
+ if (_this select 1 < 0 || _this select 1 > 1400) then {
+ private _errorMsg = format ["Invalid muzzle velocity: %1", _this select 1];
+ ERROR(_errorMsg);
+ _valid = false;
+ };
+ if (_this select 2 < 25 || _this select 2 > 1000) then {
+ private _errorMsg = format ["Invalid zero range: %1", _this select 2];
+ ERROR(_errorMsg);
+ _valid = false;
+ };
+ if (_this select 4 > 0) then {
+ private _errorMsg = format ["Invalid airFriction value: %1", _this select 4];
+ ERROR(_errorMsg);
+ _valid = false;
+ };
+ if (_this select 5 < 0.1 || _this select 5 > 10) then {
+ private _errorMsg = format ["Invalid bore height value: %1", _this select 4];
+ ERROR(_errorMsg);
+ _valid = false;
+ };
+ if (_this select 12 < 1 || _this select 12 > 100) then {
+ private _errorMsg = format ["Invalid bullet weight: %1", _this select 12];
+ ERROR(_errorMsg);
+ _valid = false;
+ };
+ if (_this select 13 < 1 || _this select 13 > 25) then {
+ private _errorMsg = format ["Invalid bullet diameter: %1", _this select 13];
+ ERROR(_errorMsg);
+ _valid = false;
+ };
+ if (_this select 14 < 1 || _this select 14 > 75) then {
+ private _errorMsg = format ["Invalid rifle twist: %1", _this select 14];
+ ERROR(_errorMsg);
+ _valid = false;
+ };
+ if (_this select 15 < 0.1 || _this select 15 > 2.0) then {
+ private _errorMsg = format ["Invalid ballistic coefficient: %1", _this select 15];
+ ERROR(_errorMsg);
+ _valid = false;
+ };
+ if (_this select 16 != 1) then {
+ private _errorMsg = format ["Invalid drag model: %1", _this select 16];
+ ERROR(_errorMsg);
+ _valid = false;
+ };
+ if (!((_this select 17) in ["ASM", "ICAO"])) then {
+ private _errorMsg = format ["Invalid atmosphere model: %1", _this select 17];
+ ERROR(_errorMsg);
+ _valid = false;
+ };
+ if (count (_this select 18) != 7) then {
+ private _errorMsg = format ["Invalid muzzle velocity table array size: %1", count (_this select 18)];
+ ERROR(_errorMsg);
+ _valid = false;
+ } else {
+ {
+ if (count _x != 2) exitWith {
+ private _errorMsg = format ["Invalid muzzle velocity table subarray size: %1", count _x];
+ ERROR(_errorMsg);
+ _valid = false;
+ };
+ } forEach (_this select 18);
+ };
+ if (count (_this select 19) != 7) then {
+ private _errorMsg = format ["Invalid drag coefficient table array size: %1", count (_this select 19)];
+ ERROR(_errorMsg);
+ _valid = false;
+ } else {
+ {
+ if (count _x != 2) exitWith {
+ private _errorMsg = format ["Invalid drag coefficient table subarray size: %1", count _x];
+ ERROR(_errorMsg);
+ _valid = false;
+ };
+ } forEach (_this select 19);
+ };
+ _valid
+};
+
+{
+ private _preset = _x >> "preset";
+
+ if (isArray(_preset)) then {
+ private _gun = getArray _preset;
+
+ if (_gun call _validate_preset) then {
+ _gun set [20, false];
+ GVAR(gunList) = GVAR(gunList) + [_gun];
+ lbAdd [6000, _gunProfileEntry select 0];
+ };
+ };
+} forEach ("true" configClasses (configFile >> "ACE_ATragMX_Presets"));
diff --git a/addons/atragmx/functions/fnc_recalculate_c1_ballistic_coefficient.sqf b/addons/atragmx/functions/fnc_recalculate_c1_ballistic_coefficient.sqf
new file mode 100644
index 0000000000..3ad4f26845
--- /dev/null
+++ b/addons/atragmx/functions/fnc_recalculate_c1_ballistic_coefficient.sqf
@@ -0,0 +1,57 @@
+/*
+ * Author: Ruthberg
+ * Recalculates the c1 ballistic coefficient based on the c1 ballistic coefficient vs. distance interpolation input
+ *
+ * Arguments:
+ * parse input
+ * update display
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_recalculate_c1_ballistic_coefficient
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+params ["_parseInput", "_updateDisplay"];
+
+if (_parseInput) then {
+ [] call FUNC(parse_input);
+};
+
+private _lookupTable = [];
+{
+ if ((_x select 1) > 0) then {
+ _lookupTable pushBack _x;
+ };
+} forEach (GVAR(workingMemory) select 19);
+
+private _lookupTableSize = count _lookupTable;
+if (_lookupTableSize < 2) exitWith {};
+_lookupTable sort true;
+
+private ["_lowerIndex", "_upperIndex"];
+for "_index" from 1 to (_lookupTableSize - 1) do {
+ _upperIndex = _index;
+ _lowerIndex = _upperIndex - 1;
+ if (((_lookupTable select _index) select 0) >= (GVAR(targetRange) select GVAR(currentTarget))) exitWith {}
+};
+
+private ["_lowerDistance", "_upperDistance", "_lowerC1", "_upperC1", "_slope", "_c1"];
+_lowerDistance = (_lookupTable select _lowerIndex) select 0;
+_upperDistance = (_lookupTable select _upperIndex) select 0;
+_lowerC1 = (_lookupTable select _lowerIndex) select 1;
+_upperC1 = (_lookupTable select _upperIndex) select 1;
+_slope = (_upperC1 - _lowerC1) / (_upperDistance - _lowerDistance);
+_c1 = 0.1 max (_lowerC1 + ((GVAR(targetRange) select GVAR(currentTarget)) - _lowerDistance) * _slope) min 2.0;
+
+if (_c1 != GVAR(workingMemory) select 15) then {
+ GVAR(workingMemory) set [15, _c1];
+ if (_updateDisplay) then {
+ call FUNC(update_gun);
+ call FUNC(update_gun_ammo_data);
+ };
+};
diff --git a/addons/atragmx/functions/fnc_recalculate_muzzle_velocity.sqf b/addons/atragmx/functions/fnc_recalculate_muzzle_velocity.sqf
new file mode 100644
index 0000000000..430e8ecc68
--- /dev/null
+++ b/addons/atragmx/functions/fnc_recalculate_muzzle_velocity.sqf
@@ -0,0 +1,57 @@
+/*
+ * Author: Ruthberg
+ * Recalculates the muzzle velocity based on the muzzle velocity vs. temperature interpolation input
+ *
+ * Arguments:
+ * parse input
+ * update display
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_recalculate_muzzle_velocity
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+params ["_parseInput", "_updateDisplay"];
+
+if (_parseInput) then {
+ [] call FUNC(parse_input);
+};
+
+private _lookupTable = [];
+{
+ if ((_x select 1) > 0) then {
+ _lookupTable pushBack _x;
+ };
+} forEach (GVAR(workingMemory) select 18);
+
+private _lookupTableSize = count _lookupTable;
+if (_lookupTableSize < 2) exitWith {};
+_lookupTable sort true;
+
+private ["_lowerIndex", "_upperIndex"];
+for "_index" from 1 to (_lookupTableSize - 1) do {
+ _upperIndex = _index;
+ _lowerIndex = _upperIndex - 1;
+ if (((_lookupTable select _index) select 0) >= GVAR(temperature)) exitWith {}
+};
+
+private ["_lowerTemperature", "_upperTemperature", "_lowerMuzzleVelocity", "_upperMuzzleVelocity", "_slope", "_muzzleVelocity"];
+_lowerTemperature = (_lookupTable select _lowerIndex) select 0;
+_upperTemperature = (_lookupTable select _upperIndex) select 0;
+_lowerMuzzleVelocity = (_lookupTable select _lowerIndex) select 1;
+_upperMuzzleVelocity = (_lookupTable select _upperIndex) select 1;
+_slope = (_upperMuzzleVelocity - _lowerMuzzleVelocity) / (_upperTemperature - _lowerTemperature);
+_muzzleVelocity = _lowerMuzzleVelocity + (GVAR(temperature) - _lowerTemperature) * _slope;
+
+if (_muzzleVelocity != GVAR(workingMemory) select 1) then {
+ GVAR(workingMemory) set [1, _muzzleVelocity];
+ if (_updateDisplay) then {
+ call FUNC(update_gun);
+ call FUNC(update_gun_ammo_data);
+ };
+};
diff --git a/addons/atragmx/functions/fnc_restore_truing_drop.sqf b/addons/atragmx/functions/fnc_restore_truing_drop.sqf
new file mode 100644
index 0000000000..b8541152a0
--- /dev/null
+++ b/addons/atragmx/functions/fnc_restore_truing_drop.sqf
@@ -0,0 +1,33 @@
+/*
+ * Author: Ruthberg
+ * Restores the truing drop defaults
+ *
+ * Arguments:
+ * update display
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_restore_truing_drop
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+private _updateDisplay = _this;
+
+GVAR(truingDropMode) = 0;
+GVAR(truingDropRangeData) = [0, 0];
+GVAR(truingDropDropData) = [0, 0, 0];
+GVAR(truingDropReferenceDropData) = [0, 0, 0];
+GVAR(truingDropC1) = 0;
+GVAR(truingDropMuzzleVelocity) = 0;
+
+// Resets input fields
+call FUNC(update_truing_drop_selection);
+
+if (_updateDisplay) then {
+ // Repopulates input fields
+ false call FUNC(calculate_truing_drop);
+};
diff --git a/addons/atragmx/functions/fnc_restore_user_data.sqf b/addons/atragmx/functions/fnc_restore_user_data.sqf
index 896455ec7a..de91a7cd0e 100644
--- a/addons/atragmx/functions/fnc_restore_user_data.sqf
+++ b/addons/atragmx/functions/fnc_restore_user_data.sqf
@@ -26,6 +26,7 @@ GVAR(barometricPressure) = 340 max (profileNamespace getVariable ["ACE_ATragMX_b
GVAR(relativeHumidity) = 0 max (profileNamespace getVariable ["ACE_ATragMX_relativeHumidity", 0.5]) min 1;
GVAR(showWind2) = profileNamespace getVariable ["ACE_ATragMX_showWind2", false];
+GVAR(showCoriolis) = profileNamespace getVariable ["ACE_ATragMX_showCoriolis", true];
GVAR(latitude) = profileNamespace getVariable ["ACE_ATragMX_latitude", [38, 38, 38, 38]];
GVAR(directionOfFire) = profileNamespace getVariable ["ACE_ATragMX_directionOfFire", [0, 0, 0, 0]];
GVAR(windSpeed1) = profileNamespace getVariable ["ACE_ATragMX_windSpeed1", [0, 0, 0, 0]];
diff --git a/addons/atragmx/functions/fnc_save_gun.sqf b/addons/atragmx/functions/fnc_save_gun.sqf
index 64fe17e4c4..73e26ee5fd 100644
--- a/addons/atragmx/functions/fnc_save_gun.sqf
+++ b/addons/atragmx/functions/fnc_save_gun.sqf
@@ -25,4 +25,4 @@ lbClear 6000;
lbAdd [6000, _x select 0];
} forEach GVAR(gunList);
-profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)];
+call FUNC(store_gun_list);
diff --git a/addons/atragmx/functions/fnc_shift_c1_ballistic_coefficient_data.sqf b/addons/atragmx/functions/fnc_shift_c1_ballistic_coefficient_data.sqf
new file mode 100644
index 0000000000..241d7fe7e0
--- /dev/null
+++ b/addons/atragmx/functions/fnc_shift_c1_ballistic_coefficient_data.sqf
@@ -0,0 +1,25 @@
+/*
+ * Author: Ruthberg
+ * Shifts all c1 ballistic coefficient entries in the c1 ballistic coefficient vs. distance interpolation table
+ *
+ * Arguments:
+ * ballistic coefficient -
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * 10 call ace_atragmx_fnc_shift_c1_ballistic_coefficient_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+if (_this == 0) exitWith {};
+
+{
+ private _c1 = _x select 1;
+ if (_c1 > 0) then {
+ ((GVAR(workingMemory) select 19) select _forEachIndex) set [1, 0.1 max (_c1 + _this) min 2];
+ }
+} forEach (GVAR(workingMemory) select 19);
diff --git a/addons/atragmx/functions/fnc_shift_muzzle_velocity_data.sqf b/addons/atragmx/functions/fnc_shift_muzzle_velocity_data.sqf
new file mode 100644
index 0000000000..4bbd9337fd
--- /dev/null
+++ b/addons/atragmx/functions/fnc_shift_muzzle_velocity_data.sqf
@@ -0,0 +1,25 @@
+/*
+ * Author: Ruthberg
+ * Shifts all muzzle velocity entries in the muzzle velocity vs. temperature interpolation table
+ *
+ * Arguments:
+ * velocity -
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * 10 call ace_atragmx_fnc_shift_muzzle_velocity_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+if (_this == 0) exitWith {};
+
+{
+ private _velocity = _x select 1;
+ if (_velocity > 0) then {
+ ((GVAR(workingMemory) select 18) select _forEachIndex) set [1, 0 max (_velocity + _this) min 1400];
+ }
+} forEach (GVAR(workingMemory) select 18);
diff --git a/addons/atragmx/functions/fnc_show_c1_ballistic_coefficient_data.sqf b/addons/atragmx/functions/fnc_show_c1_ballistic_coefficient_data.sqf
new file mode 100644
index 0000000000..b96902f5fa
--- /dev/null
+++ b/addons/atragmx/functions/fnc_show_c1_ballistic_coefficient_data.sqf
@@ -0,0 +1,25 @@
+/*
+ * Author: Ruthberg
+ * Shows/Hides the c1 ballistic coefficient data controls
+ *
+ * Arguments:
+ * visible -
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * false call ace_atragmx_fnc_show_c1_ballistic_coefficient_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+GVAR(showC1BallisticCoefficientData) = _this;
+
+{ctrlShow [_x, _this]} forEach [17000, 17001, 170021, 170022, 170023, 170024, 170025, 170026, 170027, 170031, 170032, 170033, 170034, 170035, 170036, 170037, 17004, 17005, 17006, 17007, 17008, 17009];
+
+if (_this) then {
+ ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 170031);
+ [] call FUNC(update_c1_ballistic_coefficient_data);
+};
diff --git a/addons/atragmx/functions/fnc_show_main_page.sqf b/addons/atragmx/functions/fnc_show_main_page.sqf
index 486ea1655a..591554d632 100644
--- a/addons/atragmx/functions/fnc_show_main_page.sqf
+++ b/addons/atragmx/functions/fnc_show_main_page.sqf
@@ -21,6 +21,18 @@ GVAR(showMainPage) = _this;
500, 501, 502, 503, 600, 601, 602, 603, 1000, 1001, 1002, 1003, 1004, 2000, 2001, 3000, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008];
if (_this) then {
+ if (GVAR(showCoriolis)) then {
+ ctrlSetText [4003, "Hold"];
+ ctrlSetText [4004, "Cor"];
+ ctrlSetText [4005, "Spin"];
+ {ctrlShow [_x, false]} forEach [402, 4006, 4007];
+ } else {
+ ctrlSetText [4003, "Abs"];
+ ctrlSetText [4004, "Rel"];
+ ctrlSetText [4005, "Cur"];
+ private _visible = (GVAR(currentScopeUnit) == 3);
+ {ctrlShow [_x, _visible]} forEach [401, 402, 411, 412, 4004, 4005, 4006, 4007];
+ };
if (GVAR(atmosphereModeTBH)) then {
{ctrlShow [_x, false]} forEach [23, 230];
} else {
diff --git a/addons/atragmx/functions/fnc_show_muzzle_velocity_data.sqf b/addons/atragmx/functions/fnc_show_muzzle_velocity_data.sqf
new file mode 100644
index 0000000000..8a5d39f2b5
--- /dev/null
+++ b/addons/atragmx/functions/fnc_show_muzzle_velocity_data.sqf
@@ -0,0 +1,25 @@
+/*
+ * Author: Ruthberg
+ * Shows/Hides the muzzle velocity data controls
+ *
+ * Arguments:
+ * visible -
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * false call ace_atragmx_fnc_show_muzzle_velocity_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+GVAR(showMuzzleVelocityData) = _this;
+
+{ctrlShow [_x, _this]} forEach [16000, 16001, 160021, 160022, 160023, 160024, 160025, 160026, 160027, 160031, 160032, 160033, 160034, 160035, 160036, 160037, 16004, 16005, 16006, 16007, 16008, 16009];
+
+if (_this) then {
+ ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 160031);
+ [] call FUNC(update_muzzle_velocity_data);
+};
diff --git a/addons/atragmx/functions/fnc_show_truing_drop.sqf b/addons/atragmx/functions/fnc_show_truing_drop.sqf
new file mode 100644
index 0000000000..d4b7ce551f
--- /dev/null
+++ b/addons/atragmx/functions/fnc_show_truing_drop.sqf
@@ -0,0 +1,43 @@
+/*
+ * Author: Ruthberg
+ * Shows/Hides the truing drop controls
+ *
+ * Arguments:
+ * visible -
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_show_truing_drop
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+GVAR(showTruingDrop) = _this;
+
+{ctrlShow [_x, _this]} forEach [18000, 18001, 18002, 18003, 18004, 18005, 18006, 18007, 18008, 18009, 18010, 18011, 18012, 18013, 18014, 18015, 18016, 18017, 18018, 18019, 18020];
+
+if (_this) then {
+ if (GVAR(currentUnit) == 2) then {
+ ctrlSetText [18000, format["ZR=%1meters", Round(GVAR(workingMemory) select 2)]];
+ } else {
+ ctrlSetText [18000, format["ZR=%1yards", Round((GVAR(workingMemory) select 2) * 1.0936133)]];
+ };
+ private _dropUnit = GVAR(currentScopeUnit);
+ if (_dropUnit == 3) then {
+ switch (GVAR(currentScopeClickUnit)) do {
+ case 0: { _dropUnit = 1; };
+ case 1: { _dropUnit = 2; };
+ case 2: { _dropUnit = 0; };
+ };
+ };
+ switch (_dropUnit) do {
+ case 0: { ctrlSetText [18001, "Drop=mils"]; };
+ case 1: { ctrlSetText [18001, "Drop=tmoa"]; };
+ case 2: { ctrlSetText [18001, "Drop=smoa"]; };
+ };
+ false call FUNC(calculate_truing_drop);
+ call FUNC(update_truing_drop_selection);
+};
diff --git a/addons/atragmx/functions/fnc_store_gun_list.sqf b/addons/atragmx/functions/fnc_store_gun_list.sqf
new file mode 100644
index 0000000000..3e569f8a59
--- /dev/null
+++ b/addons/atragmx/functions/fnc_store_gun_list.sqf
@@ -0,0 +1,25 @@
+/*
+ * Author: Ruthberg
+ * Saves the persistent gun list entries into profileNamespace
+ *
+ * Arguments:
+ * Nothing
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_store_user_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+private _gunList = [];
+{
+ if (_x select 20) then {
+ _gunList pushBack _x;
+ };
+} forEach GVAR(gunList);
+
+profileNamespace setVariable ["ACE_ATragMX_gunList", _gunList];
diff --git a/addons/atragmx/functions/fnc_store_user_data.sqf b/addons/atragmx/functions/fnc_store_user_data.sqf
index 5cfe7f2ae0..a0b3f9fe80 100644
--- a/addons/atragmx/functions/fnc_store_user_data.sqf
+++ b/addons/atragmx/functions/fnc_store_user_data.sqf
@@ -28,6 +28,7 @@ profileNamespace setVariable ["ACE_ATragMX_barometricPressure", GVAR(barometricP
profileNamespace setVariable ["ACE_ATragMX_relativeHumidity", GVAR(relativeHumidity)];
profileNamespace setVariable ["ACE_ATragMX_showWind2", GVAR(showWind2)];
+profileNamespace setVariable ["ACE_ATragMX_showCoriolis", GVAR(showCoriolis)];
profileNamespace setVariable ["ACE_ATragMX_latitude", GVAR(latitude)];
profileNamespace setVariable ["ACE_ATragMX_directionOfFire", GVAR(directionOfFire)];
profileNamespace setVariable ["ACE_ATragMX_windSpeed1", GVAR(windSpeed1)];
diff --git a/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf b/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf
index 87e973c7c0..bda24a48f4 100644
--- a/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf
+++ b/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf
@@ -20,7 +20,11 @@ if (ctrlVisible 13000) then {
true call FUNC(show_main_page);
if (_this == 1) then {
+ GVAR(truingDropDropData) set [0, 0];
+ [true, true] call FUNC(recalculate_muzzle_velocity);
call FUNC(calculate_target_solution);
+ } else {
+ call FUNC(update_atmo_env_data);
};
} else {
true call FUNC(show_atmo_env_data);
diff --git a/addons/atragmx/functions/fnc_toggle_c1_ballistic_coefficient_data.sqf b/addons/atragmx/functions/fnc_toggle_c1_ballistic_coefficient_data.sqf
new file mode 100644
index 0000000000..e83f0d985c
--- /dev/null
+++ b/addons/atragmx/functions/fnc_toggle_c1_ballistic_coefficient_data.sqf
@@ -0,0 +1,33 @@
+/*
+ * Author: Ruthberg
+ * Toggles the c1 ballistic coefficient data screen on/off
+ *
+ * Arguments:
+ * Apply new data?
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * 1 call ace_atragmx_fnc_toggle_c1_ballistic_coefficient_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+if (!(missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false])) exitWith {};
+
+if (ctrlVisible 17000) then {
+ false call FUNC(show_c1_ballistic_coefficient_data);
+ true call FUNC(show_main_page);
+
+ if (_this == 1) then {
+ [true, true] call FUNC(recalculate_c1_ballistic_coefficient);
+ call FUNC(calculate_target_solution);
+ } else {
+ call FUNC(update_c1_ballistic_coefficient_data);
+ };
+} else {
+ true call FUNC(show_c1_ballistic_coefficient_data);
+ false call FUNC(show_main_page);
+};
diff --git a/addons/atragmx/functions/fnc_toggle_coriolis.sqf b/addons/atragmx/functions/fnc_toggle_coriolis.sqf
new file mode 100644
index 0000000000..17b081131e
--- /dev/null
+++ b/addons/atragmx/functions/fnc_toggle_coriolis.sqf
@@ -0,0 +1,19 @@
+/*
+ * Author: Ruthberg
+ * Toggles the coriolis and spin drift output on/off
+ *
+ * Arguments:
+ * Nothing
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_toggle_coriolis
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+GVAR(showCoriolis) = !GVAR(showCoriolis);
+true call FUNC(show_main_page);
diff --git a/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf b/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf
index f3eb814da7..c8cfe0f8f3 100644
--- a/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf
+++ b/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf
@@ -20,8 +20,11 @@ if (ctrlVisible 12000) then {
true call FUNC(show_main_page);
if (_this == 1) then {
+ GVAR(truingDropDropData) set [0, 0];
call FUNC(update_zero_range);
call FUNC(calculate_target_solution);
+ } else {
+ call FUNC(update_gun_ammo_data);
};
} else {
true call FUNC(show_gun_ammo_data);
diff --git a/addons/atragmx/functions/fnc_toggle_muzzle_velocity_data.sqf b/addons/atragmx/functions/fnc_toggle_muzzle_velocity_data.sqf
new file mode 100644
index 0000000000..9a334b35ca
--- /dev/null
+++ b/addons/atragmx/functions/fnc_toggle_muzzle_velocity_data.sqf
@@ -0,0 +1,33 @@
+/*
+ * Author: Ruthberg
+ * Toggles the muzzle velocity data screen on/off
+ *
+ * Arguments:
+ * Apply new data?
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * 1 call ace_atragmx_fnc_toggle_muzzle_velocity_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+if (!(missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false])) exitWith {};
+
+if (ctrlVisible 16000) then {
+ false call FUNC(show_muzzle_velocity_data);
+ true call FUNC(show_main_page);
+
+ if (_this == 1) then {
+ [true, true] call FUNC(recalculate_muzzle_velocity);
+ call FUNC(calculate_target_solution);
+ } else {
+ call FUNC(update_muzzle_velocity_data);
+ };
+} else {
+ true call FUNC(show_muzzle_velocity_data);
+ false call FUNC(show_main_page);
+};
diff --git a/addons/atragmx/functions/fnc_toggle_option_menu.sqf b/addons/atragmx/functions/fnc_toggle_option_menu.sqf
new file mode 100644
index 0000000000..ea14baedad
--- /dev/null
+++ b/addons/atragmx/functions/fnc_toggle_option_menu.sqf
@@ -0,0 +1,51 @@
+/*
+ * Author: Ruthberg
+ * Toggles the option menu on/off
+ *
+ * Arguments:
+ * open menu item
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * 1 call ace_atragmx_fnc_toggle_option_menu
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+if (ctrlVisible 3001) then {
+ if (_this) then {
+ private _optionID = lbCurSel 3002;
+ if (_optionID > 0) then {
+ ctrlShow [3001, false];
+ ctrlShow [3002, false];
+ [_optionID] call FUNC(evaluate_option_menu_input);
+ };
+ } else {
+ ctrlShow [3001, false];
+ ctrlShow [3002, false];
+ };
+} else {
+ lbClear 3002;
+
+ lbAdd [3002, "Accuracy 1st"];
+ lbAdd [3002, "Muz Vel Table"];
+ lbAdd [3002, "Drag Coef Table"];
+ lbAdd [3002, "Target Speed Est"];
+ lbAdd [3002, "Target Range Est"];
+ lbAdd [3002, "Truing Drop"];
+ if (GVAR(showCoriolis)) then {
+ lbAdd [3002, "Show Coriolis *"];
+ } else {
+ lbAdd [3002, "Show Coriolis"];
+ };
+ lbAdd [3002, "Set Clicks"];
+ lbAdd [3002, "Gun Note"];
+
+ lbSetCurSel [3002, 0];
+
+ ctrlShow [3001, true];
+ ctrlShow [3002, true];
+};
diff --git a/addons/atragmx/functions/fnc_toggle_target_data.sqf b/addons/atragmx/functions/fnc_toggle_target_data.sqf
index 2cfa2f8df5..44892ca882 100644
--- a/addons/atragmx/functions/fnc_toggle_target_data.sqf
+++ b/addons/atragmx/functions/fnc_toggle_target_data.sqf
@@ -21,6 +21,8 @@ if (ctrlVisible 14000) then {
if (_this == 1) then {
call FUNC(calculate_target_solution);
+ } else {
+ call FUNC(update_target_data);
};
} else {
true call FUNC(show_target_data);
diff --git a/addons/atragmx/functions/fnc_toggle_truing_drop.sqf b/addons/atragmx/functions/fnc_toggle_truing_drop.sqf
new file mode 100644
index 0000000000..8c2e72587c
--- /dev/null
+++ b/addons/atragmx/functions/fnc_toggle_truing_drop.sqf
@@ -0,0 +1,39 @@
+/*
+ * Author: Ruthberg
+ * Toggles the truing drop screen on/off
+ *
+ * Arguments:
+ * Apply new data?
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * 1 call ace_atragmx_fnc_toggle_truing_drop
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+if (!(missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false])) exitWith {};
+
+if (ctrlVisible 18000) then {
+ false call FUNC(show_truing_drop);
+ true call FUNC(show_main_page);
+
+ if (_this == 1) then {
+ if (GVAR(truingDropMode) == 0) then {
+ [GVAR(temperature), GVAR(truingDropMuzzleVelocity)] call FUNC(insert_muzzle_velocity_data);
+ [false, true] call FUNC(recalculate_muzzle_velocity);
+ } else {
+ [GVAR(truingDropRangeData) select 0, GVAR(truingDropRangeData) select 1, GVAR(truingDropC1)] call FUNC(insert_c1_ballistic_coefficient_data);
+ [false, true] call FUNC(recalculate_c1_ballistic_coefficient);
+ };
+ call FUNC(calculate_target_solution);
+ } else {
+ call FUNC(update_truing_drop_data);
+ };
+} else {
+ false call FUNC(show_main_page);
+ true call FUNC(show_truing_drop);
+};
diff --git a/addons/atragmx/functions/fnc_true_c1_ballistic_coefficient.sqf b/addons/atragmx/functions/fnc_true_c1_ballistic_coefficient.sqf
new file mode 100644
index 0000000000..42bb18b875
--- /dev/null
+++ b/addons/atragmx/functions/fnc_true_c1_ballistic_coefficient.sqf
@@ -0,0 +1,42 @@
+/*
+ * Author: Ruthberg
+ * Trues the c1 ballistic coefficient
+ *
+ * Arguments:
+ * Nothing
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_true_c1_ballistic_coefficient
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+private _referenceDrop = GVAR(truingDropDropData) select 0;
+private _actualDrop = GVAR(truingDropDropData) select 2;
+
+if (Round(_actualDrop * 10) / 10 == Round(_referenceDrop * 10) / 10) exitWith {};
+
+private _step = 0.01;
+if (_actualDrop > _referenceDrop) then {
+ _step = -0.01;
+};
+
+private _solutionInput = +GVAR(targetSolutionInput);
+_solutionInput set [13, GVAR(truingDropRangeData) select 1];
+private _c1 = _solutionInput select 14;
+
+{
+ _step = _step * _x;
+ while { _actualDrop * _step < _referenceDrop * _step } do {
+ _c1 = _c1 + _step;
+ _solutionInput set [14, _c1];
+ private _result = _solutionInput call FUNC(calculate_solution);
+ _referenceDrop = (_result select 0);
+ };
+} forEach [1, -0.1];
+
+GVAR(truingDropC1) = _c1;
diff --git a/addons/atragmx/functions/fnc_true_muzzle_velocity.sqf b/addons/atragmx/functions/fnc_true_muzzle_velocity.sqf
new file mode 100644
index 0000000000..26ee2a18ce
--- /dev/null
+++ b/addons/atragmx/functions/fnc_true_muzzle_velocity.sqf
@@ -0,0 +1,42 @@
+/*
+ * Author: Ruthberg
+ * Trues the muzzle velocity
+ *
+ * Arguments:
+ * Nothing
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_true_muzzle_velocity
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+private _referenceDrop = GVAR(truingDropDropData) select 0;
+private _actualDrop = GVAR(truingDropDropData) select 1;
+
+if (Round(_actualDrop * 10) / 10 == Round(_referenceDrop * 10) / 10) exitWith {};
+
+private _step = 10;
+if (_actualDrop > _referenceDrop) then {
+ _step = -10;
+};
+
+private _solutionInput = +GVAR(targetSolutionInput);
+_solutionInput set [13, GVAR(truingDropRangeData) select 0];
+private _muzzleVelocity = _solutionInput select 4;
+
+{
+ _step = _step * _x;
+ while { _actualDrop * _step < _referenceDrop * _step } do {
+ _muzzleVelocity = _muzzleVelocity + _step;
+ _solutionInput set [4, _muzzleVelocity];
+ private _result = _solutionInput call FUNC(calculate_solution);
+ _referenceDrop = (_result select 0);
+ };
+} forEach [1, -0.1];
+
+GVAR(truingDropMuzzleVelocity) = _muzzleVelocity;
diff --git a/addons/atragmx/functions/fnc_update_c1_ballistic_coefficient_data.sqf b/addons/atragmx/functions/fnc_update_c1_ballistic_coefficient_data.sqf
new file mode 100644
index 0000000000..09148fd156
--- /dev/null
+++ b/addons/atragmx/functions/fnc_update_c1_ballistic_coefficient_data.sqf
@@ -0,0 +1,25 @@
+/*
+ * Author: Ruthberg
+ * Updates the c1 ballistic coefficient data fields
+ *
+ * Arguments:
+ * Nothing
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_update_c1_ballistic_coefficient_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+// Distances
+if (GVAR(currentUnit) == 2) then {
+ {ctrlSetText [_x, Str(Round(((GVAR(workingMemory) select 19) select _forEachIndex) select 0))]} forEach [170021, 170022, 170023, 170024, 170025, 170026, 170027];
+} else {
+ {ctrlSetText [_x, Str(Round((((GVAR(workingMemory) select 19) select _forEachIndex) select 0) * 1.0936133))]} forEach [170021, 170022, 170023, 170024, 170025, 170026, 170027];
+};
+// Ballistic coefficients
+{ctrlSetText [_x, Str(Round((((GVAR(workingMemory) select 19) select _forEachIndex) select 1) * 1000) / 1000)]} forEach [170031, 170032, 170033, 170034, 170035, 170036, 170037];
diff --git a/addons/atragmx/functions/fnc_update_muzzle_velocity_data.sqf b/addons/atragmx/functions/fnc_update_muzzle_velocity_data.sqf
new file mode 100644
index 0000000000..989d3d113c
--- /dev/null
+++ b/addons/atragmx/functions/fnc_update_muzzle_velocity_data.sqf
@@ -0,0 +1,28 @@
+/*
+ * Author: Ruthberg
+ * Updates the muzzle velocity data fields
+ *
+ * Arguments:
+ * Nothing
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_update_muzzle_velocity_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+if (GVAR(currentUnit) == 2) then {
+ // Temperatures
+ {ctrlSetText [_x, Str(Round((((GVAR(workingMemory) select 18) select _forEachIndex) select 0) * 10) / 10)]} forEach [160021, 160022, 160023, 160024, 160025, 160026, 160027];
+ // Muzzle velocities
+ {ctrlSetText [_x, Str(Round(((GVAR(workingMemory) select 18) select _forEachIndex) select 1))]} forEach [160031, 160032, 160033, 160034, 160035, 160036, 160037];
+} else {
+ // Temperatures
+ {ctrlSetText [_x, Str(Round(((((GVAR(workingMemory) select 18) select _forEachIndex) select 0) * 1.8 + 32) * 10) / 10)]} forEach [160021, 160022, 160023, 160024, 160025, 160026, 160027];
+ // Muzzle velocities
+ {ctrlSetText [_x, Str(Round((((GVAR(workingMemory) select 18) select _forEachIndex) select 1) * 3.2808399))]} forEach [160031, 160032, 160033, 160034, 160035, 160036, 160037];
+};
diff --git a/addons/atragmx/functions/fnc_update_result.sqf b/addons/atragmx/functions/fnc_update_result.sqf
index 2b6ca29e23..2541222583 100644
--- a/addons/atragmx/functions/fnc_update_result.sqf
+++ b/addons/atragmx/functions/fnc_update_result.sqf
@@ -15,17 +15,28 @@
*/
#include "script_component.hpp"
-private ["_elevationAbs", "_elevationRel", "_elevationCur", "_windageAbs", "_wind2", "_windageRel", "_windageCur", "_lead", "_clickSize", "_clickNumber", "_clickInterval"];
+private ["_elevationAbs", "_elevationRel", "_elevationCur", "_windageAbs", "_windageRel", "_windageCur", "_wind2", "_lead", "_clickSize", "_clickNumber", "_clickInterval"];
_elevationAbs = GVAR(elevationOutput) select GVAR(currentTarget);
+_elevationRel = 0;
+_elevationCur = 0;
_windageAbs = GVAR(windage1Output) select GVAR(currentTarget);
+_windageRel = 0;
+_windageCur = 0;
_wind2 = GVAR(windage2Output) select GVAR(currentTarget);
-_elevationCur = GVAR(workingMemory) select 10;
-_windageCur = GVAR(workingMemory) select 11;
+if (GVAR(showCoriolis)) then {
+ _elevationRel = GVAR(verticalCoriolisOutput) select GVAR(currentTarget);
+ _windageRel = GVAR(horizontalCoriolisOutput) select GVAR(currentTarget);
+
+ _windageCur = GVAR(spinDriftOutput) select GVAR(currentTarget);
+} else {
+ _elevationCur = GVAR(workingMemory) select 10;
+ _windageCur = GVAR(workingMemory) select 11;
-_elevationRel = _elevationAbs - _elevationCur;
-_windageRel = _windageAbs - _windageCur;
+ _elevationRel = _elevationAbs - _elevationCur;
+ _windageRel = _windageAbs - _windageCur;
+};
_lead = GVAR(leadOutput) select GVAR(currentTarget);
diff --git a/addons/atragmx/functions/fnc_update_truing_drop_data.sqf b/addons/atragmx/functions/fnc_update_truing_drop_data.sqf
new file mode 100644
index 0000000000..5d97780d49
--- /dev/null
+++ b/addons/atragmx/functions/fnc_update_truing_drop_data.sqf
@@ -0,0 +1,77 @@
+/*
+ * Author: Ruthberg
+ * Updates the truing drop data fields
+ *
+ * Arguments:
+ * Nothing
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_update_truing_drop_data
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+if (GVAR(currentUnit) == 2) then {
+ ctrlSetText [18011, Str(Round(GVAR(truingDropRangeData) select 0))];
+ ctrlSetText [18012, Str(Round(GVAR(truingDropRangeData) select 1))];
+} else {
+ ctrlSetText [18011, Str(Round((GVAR(truingDropRangeData) select 0) * 1.0936133))];
+ ctrlSetText [18012, Str(Round((GVAR(truingDropRangeData) select 1) * 1.0936133))];
+};
+
+if (GVAR(truingDropMode) == 0) then {
+ GVAR(truingDropDropData) set [0, GVAR(truingDropReferenceDropData) select 0];
+} else {
+ GVAR(truingDropDropData) set [0, GVAR(truingDropReferenceDropData) select 1];
+};
+
+private _dropUnit = GVAR(currentScopeUnit);
+if (_dropUnit == 3) then {
+ switch (GVAR(currentScopeClickUnit)) do {
+ case 0: { _dropUnit = 1; };
+ case 1: { _dropUnit = 2; };
+ case 2: { _dropUnit = 0; };
+ };
+};
+
+private _dropData = +GVAR(truingDropDropData);
+
+switch (_dropUnit) do {
+ case 0: {
+ _dropData set [0, (_dropData select 0) / 3.38];
+ _dropData set [1, (_dropData select 1) / 3.38];
+ _dropData set [2, (_dropData select 2) / 3.38];
+ };
+ case 2: {
+ _dropData set [0, (_dropData select 0) * 1.047];
+ _dropData set [1, (_dropData select 1) * 1.047];
+ _dropData set [2, (_dropData select 2) * 1.047];
+ };
+};
+
+ctrlSetText [18006, Str(Round((_dropData select 0) * 100) / 100)];
+ctrlSetText [18013, Str(Round((_dropData select 1) * 100) / 100)];
+ctrlSetText [18014, Str(Round((_dropData select 2) * 100) / 100)];
+
+if (GVAR(currentUnit) != 2) then {
+ ctrlSetText [18007, Str(Round((GVAR(workingMemory) select 1) * 3.2808399))];
+ ctrlSetText [18016, Str(Round((GVAR(workingMemory) select 1) * 3.2808399))];
+ if (GVAR(truingDropMuzzleVelocity) > 0) then {
+ ctrlSetText [18016, Str(Round(GVAR(truingDropMuzzleVelocity) * 3.2808399))];
+ };
+} else {
+ ctrlSetText [18007, Str(Round(GVAR(workingMemory) select 1))];
+ ctrlSetText [18016, Str(Round(GVAR(workingMemory) select 1))];
+ if (GVAR(truingDropMuzzleVelocity) > 0) then {
+ ctrlSetText [18016, Str(Round(GVAR(truingDropMuzzleVelocity)))];
+ };
+};
+ctrlSetText [18008, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
+ctrlSetText [18017, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
+if (GVAR(truingDropC1) > 0) then {
+ ctrlSetText [18017, Str(Round(GVAR(truingDropC1) * 1000) / 1000)];
+};
diff --git a/addons/atragmx/functions/fnc_update_truing_drop_selection.sqf b/addons/atragmx/functions/fnc_update_truing_drop_selection.sqf
new file mode 100644
index 0000000000..98f7483276
--- /dev/null
+++ b/addons/atragmx/functions/fnc_update_truing_drop_selection.sqf
@@ -0,0 +1,43 @@
+/*
+ * Author: Ruthberg
+ * Updates the truing drop input method
+ *
+ * Arguments:
+ * Nothing
+ *
+ * Return Value:
+ * Nothing
+ *
+ * Example:
+ * call ace_atragmx_fnc_update_truing_drop_selection
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+#define __dsp (uiNamespace getVariable "ATragMX_Display")
+
+(__dsp displayCtrl 18009) ctrlEnable true;
+(__dsp displayCtrl 18010) ctrlEnable true;
+
+if (GVAR(truingDropMode) == 0) then {
+ (__dsp displayCtrl 18009) ctrlEnable false;
+ {
+ (__dsp displayCtrl _x) ctrlEnable true;
+ } forEach [18011, 18013, 18016];
+ {
+ (__dsp displayCtrl _x) ctrlEnable false;
+ } forEach [18012, 18014, 18017];
+ ctrlSetFocus (__dsp displayCtrl 18011);
+} else {
+ (__dsp displayCtrl 18010) ctrlEnable false;
+ {
+ (__dsp displayCtrl _x) ctrlEnable true;
+ } forEach [18012, 18014, 18017];
+ {
+ (__dsp displayCtrl _x) ctrlEnable false;
+ } forEach [18011, 18013, 18016];
+ ctrlSetFocus (__dsp displayCtrl 18012);
+};
+
+[] call FUNC(update_truing_drop_data);
diff --git a/addons/atragmx/functions/fnc_update_zero_range.sqf b/addons/atragmx/functions/fnc_update_zero_range.sqf
index 299c321d33..3d56dc81eb 100644
--- a/addons/atragmx/functions/fnc_update_zero_range.sqf
+++ b/addons/atragmx/functions/fnc_update_zero_range.sqf
@@ -15,6 +15,8 @@
*/
#include "script_component.hpp"
+[] call FUNC(parse_input);
+
private ["_scopeBaseAngle"];
_scopeBaseAngle = (GVAR(workingMemory) select 3);
@@ -28,10 +30,7 @@ _dragModel = GVAR(workingMemory) select 16;
_atmosphereModel = GVAR(workingMemory) select 17;
private ["_zeroRange"];
-_zeroRange = Round(parseNumber(ctrlText 120060));
-if (GVAR(currentUnit) == 1) then {
- _zeroRange = _zeroRange / 1.0936133;
-};
+_zeroRange = GVAR(workingMemory) select 2;
if (_zeroRange < 10) exitWith {
GVAR(workingMemory) set [2, _zeroRange];
GVAR(workingMemory) set [3, 0];
@@ -42,9 +41,17 @@ _altitude = GVAR(altitude);
_temperature = GVAR(temperature);
_barometricPressure = GVAR(barometricPressure);
_relativeHumidity = GVAR(relativeHumidity);
+if (!GVAR(atmosphereModeTBH)) then {
+ _barometricPressure = 1013.25 * (1 - (0.0065 * _altitude) / (273.15 + _temperature + 0.0065 * _altitude)) ^ 5.255754495;
+ _relativeHumidity = 50;
+};
-private ["_result"];
-_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false, 1.5, 0, 0, 0] call FUNC(calculate_solution);
+{
+ private _result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false, 1.5, 0, 0, 0] call FUNC(calculate_solution);
+ private _offset = (_result select 0) / 60;
+ _scopeBaseAngle = _scopeBaseAngle + _offset;
+ if (_offset < 0.01) exitWith {};
+} forEach [1, 2, 3];
GVAR(workingMemory) set [2, _zeroRange];
-GVAR(workingMemory) set [3, _scopeBaseAngle + (_result select 0) / 60];
+GVAR(workingMemory) set [3, _scopeBaseAngle];
diff --git a/addons/atragmx/script_component.hpp b/addons/atragmx/script_component.hpp
index 0eae4ee5a0..054d95b9fe 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 1.7
+#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.9
diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp
index 0819f8aa4b..5fc2168b84 100644
--- a/addons/ballistics/CfgAmmo.hpp
+++ b/addons/ballistics/CfgAmmo.hpp
@@ -79,8 +79,8 @@ class CfgAmmo {
class ACE_B_556x45_Ball_Tracer_Dim: B_556x45_Ball_Tracer_Red {
nvgOnly = 1;
};
- class ACE_545x39_Ball_7N6M : B_556x45_Ball {
- airFriction=-0.00114744;
+ class B_545x39_Ball_F : BulletBase {
+ airFriction=-0.00116278;
caliber=0.6;
deflecting=18;
hit=7;
@@ -93,12 +93,14 @@ class CfgAmmo {
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=7;
- ACE_muzzleVelocities[]={780, 880, 920};
- ACE_barrelLengths[]={254.0, 414.02, 508.0};
+ ACE_muzzleVelocities[]={735, 883, 892};
+ ACE_barrelLengths[]={206.5, 414.02, 508.0};
+ };
+ class ACE_545x39_Ball_7N6M : B_545x39_Ball_F {
};
class B_556x45_Ball_Tracer_Green;
class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Green {
- airFriction=-0.00114744;
+ airFriction=-0.00116278;
caliber=0.6;
deflecting=18;
hit=7;
@@ -113,12 +115,26 @@ class CfgAmmo {
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=7;
- ACE_muzzleVelocities[]={785, 883, 925};
- ACE_barrelLengths[]={254.0, 414.02, 508.0};
+ ACE_muzzleVelocities[]={740, 886, 897};
+ ACE_barrelLengths[]={206.5, 414.02, 508.0};
};
class B_56x15_dual: BulletBase {
tracerScale = 0.5;
};
+ class B_580x42_Ball_F: BulletBase {
+ airFriction=-0.00117956;
+ typicalSpeed=930;
+ ACE_caliber=5.9944;
+ ACE_bulletLength=24.2;
+ ACE_bulletMass=4.15;
+ 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.156};
+ ACE_velocityBoundaries[]={};
+ ACE_standardAtmosphere="ICAO";
+ ACE_dragModel=7;
+ ACE_muzzleVelocities[]={790, 930, 950};
+ ACE_barrelLengths[]={369.0, 463.0, 600.0};
+ };
class B_65x39_Caseless : BulletBase {
airFriction=-0.00075308;
typicalSpeed=800;
@@ -439,7 +455,7 @@ class CfgAmmo {
ACE_muzzleVelocities[]={620, 655, 675};
ACE_barrelLengths[]={228.6, 406.4, 508.0};
};
- class ACE_762x39_Ball : B_762x51_Ball {
+ class B_762x39_Ball_F : BulletBase {
airFriction=-0.00151621;
hit=12;
caliber=1.5;
@@ -455,6 +471,8 @@ class CfgAmmo {
ACE_muzzleVelocities[]={650, 716, 750};
ACE_barrelLengths[]={254.0, 414.02, 508.0};
};
+ class ACE_762x39_Ball : B_762x39_Ball_F {
+ };
class ACE_762x39_Ball_57N231P : B_762x54_Tracer_Green {
airFriction=-0.00151621;
hit=12;
@@ -474,7 +492,7 @@ class CfgAmmo {
ACE_barrelLengths[]={254.0, 414.02, 508.0};
};
class B_9x21_Ball : BulletBase {
- airFriction=-0.00226847;
+ airFriction=-0.00208292;
typicalSpeed=390;
tracerScale = 0.5;
hit=6;
@@ -486,8 +504,8 @@ class CfgAmmo {
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=1;
- ACE_muzzleVelocities[]={440, 460, 480};
- ACE_barrelLengths[]={101.6, 127.0, 228.6};
+ ACE_muzzleVelocities[]={380, 390, 420, 435};
+ ACE_barrelLengths[]={93.5, 101.6, 127.0, 228.6};
};
class B_9x21_Ball_Tracer_Green: B_9x21_Ball {
tracerScale = 0.5;
@@ -508,7 +526,7 @@ class CfgAmmo {
ACE_barrelLengths[]={96.52, 127.0, 228.6};
};
class ACE_9x19_Ball : B_9x21_Ball {
- airFriction=-0.0018577;
+ airFriction=-0.0019835;
typicalSpeed=370;
hit=6;
ACE_caliber=9.017;
@@ -649,7 +667,7 @@ class CfgAmmo {
ACE_bulletLength=43.18;
ACE_bulletMass=19.44;
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_ballisticCoefficients[]={0.368};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=7;
@@ -665,12 +683,12 @@ class CfgAmmo {
ACE_bulletLength=38.989;
ACE_bulletMass=16.3941242;
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.560};
+ ACE_ballisticCoefficients[]={0.290};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
- ACE_dragModel=1;
- ACE_muzzleVelocities[]={880, 915, 925};
- ACE_barrelLengths[]={508.0, 660.4, 711.2};
+ ACE_dragModel=7;
+ ACE_muzzleVelocities[]={880, 895, 900};
+ ACE_barrelLengths[]={508.0, 685.8, 711.2};
};
class B_127x33_Ball: BulletBase {
tracerScale = 1.3; //1.2;
@@ -771,6 +789,20 @@ class CfgAmmo {
ACE_muzzleVelocities[]={230, 250, 285};
ACE_barrelLengths[]={101.6, 127.0, 228.6};
};
+ class B_50BW_Ball_F : BulletBase {
+ airFriction=-0.00202645;
+ typicalSpeed=550;
+ ACE_caliber=12.7;
+ ACE_bulletLength=24.13;
+ ACE_bulletMass=21.7076;
+ 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.21};
+ ACE_velocityBoundaries[]={};
+ ACE_standardAtmosphere="ASM";
+ ACE_dragModel=1;
+ ACE_muzzleVelocities[]={510, 550, 596};
+ ACE_barrelLengths[]={304.8, 406.4, 609.6};
+ };
class B_19mm_HE: BulletBase {
tracerScale = 1;
};
diff --git a/addons/ballistics/CfgMagazines.hpp b/addons/ballistics/CfgMagazines.hpp
index 931a6c2309..ef690b41aa 100644
--- a/addons/ballistics/CfgMagazines.hpp
+++ b/addons/ballistics/CfgMagazines.hpp
@@ -2,6 +2,15 @@
class CfgMagazines {
class CA_Magazine;
+ class 30Rnd_580x42_Mag_F: CA_Magazine {
+ initSpeed = 930;
+ };
+ class 100Rnd_580x42_Mag_F: 30Rnd_580x42_Mag_F {
+ initSpeed = 930;
+ };
+ class 20Rnd_650x39_Cased_Mag_F: CA_Magazine {
+ initSpeed = 760;
+ };
class 30Rnd_65x39_caseless_mag: CA_Magazine {
initSpeed = 760;
};
@@ -47,6 +56,10 @@ class CfgMagazines {
descriptionShort = CSTRING(30Rnd_65x39_caseless_green_mag_Tracer_DimDescription);
};
+ class 30Rnd_545x39_Mag_F: CA_Magazine {
+ initSpeed = 735;
+ };
+
class 30Rnd_556x45_Stanag: CA_Magazine {
};
class ACE_30Rnd_556x45_Stanag_M995_AP_mag: 30Rnd_556x45_Stanag {
@@ -84,6 +97,14 @@ class CfgMagazines {
picture = "\A3\weapons_f\data\ui\m_20stanag_red_ca.paa";
};
+ class 200Rnd_556x45_Box_F: CA_Magazine {
+ initSpeed = 872;
+ };
+
+ class 30Rnd_762x39_Mag_F: CA_Magazine {
+ initSpeed = 715;
+ };
+
class 20Rnd_762x51_Mag: CA_Magazine {
initSpeed = 833;
};
@@ -219,17 +240,35 @@ class CfgMagazines {
class ACE_30Rnd_65x47_Scenar_mag: 30Rnd_65x39_caseless_mag {
author = ECSTRING(common,ACETeam);
ammo = "ACE_65x47_Ball_Scenar";
+ initSpeed = 761;
displayName = CSTRING(30Rnd_65x47_Scenar_mag_Name);
displayNameShort = CSTRING(30Rnd_65x47_Scenar_mag_NameShort);
descriptionShort = CSTRING(30Rnd_65x47_Scenar_mag_Description);
};
+ class ACE_20Rnd_65x47_Scenar_mag: 20Rnd_650x39_Cased_Mag_F {
+ author = ECSTRING(common,ACETeam);
+ ammo = "ACE_65x47_Ball_Scenar";
+ initSpeed = 779;
+ displayName = CSTRING(20Rnd_65x47_Scenar_mag_Name);
+ displayNameShort = CSTRING(20Rnd_65x47_Scenar_mag_NameShort);
+ descriptionShort = CSTRING(20Rnd_65x47_Scenar_mag_Description);
+ };
class ACE_30Rnd_65_Creedmor_mag: 30Rnd_65x39_caseless_mag {
author = ECSTRING(common,ACETeam);
ammo = "ACE_65_Creedmor_Ball";
+ initSpeed = 815;
displayName = CSTRING(30Rnd_65_Creedmor_mag_Name);
displayNameShort = CSTRING(30Rnd_65_Creedmor_mag_NameShort);
descriptionShort = CSTRING(30Rnd_65_Creedmor_mag_Description);
};
+ class ACE_20Rnd_65_Creedmor_mag: 20Rnd_650x39_Cased_Mag_F {
+ author = ECSTRING(common,ACETeam);
+ ammo = "ACE_65_Creedmor_Ball";
+ initSpeed = 808;
+ displayName = CSTRING(20Rnd_65_Creedmor_mag_Name);
+ displayNameShort = CSTRING(20Rnd_65_Creedmor_mag_NameShort);
+ descriptionShort = CSTRING(20Rnd_65_Creedmor_mag_Description);
+ };
class 10Rnd_338_Mag;
class ACE_10Rnd_338_300gr_HPBT_Mag: 10Rnd_338_Mag {
author = ECSTRING(common,ACETeam);
@@ -276,7 +315,7 @@ class CfgMagazines {
class 30Rnd_9x21_Mag: CA_Magazine {
- initSpeed = 450;
+ initSpeed = 390;
};
class ACE_30Rnd_9x19_mag: 30Rnd_9x21_Mag {
author = ECSTRING(common,ACETeam);
@@ -287,6 +326,10 @@ class CfgMagazines {
initSpeed = 370;
};
+ class 10Rnd_50BW_Mag_F: CA_Magazine {
+ initSpeed = 552;
+ };
+
class 11Rnd_45ACP_Mag: CA_Magazine {
initSpeed = 250;
};
@@ -308,7 +351,10 @@ class CfgMagazines {
};
class 16Rnd_9x21_Mag: 30Rnd_9x21_Mag {
- initSpeed = 450;
+ initSpeed = 390;
+ };
+ class 10Rnd_9x21_Mag: 16Rnd_9x21_Mag {
+ initSpeed = 390;
};
class ACE_16Rnd_9x19_mag: 16Rnd_9x21_Mag {
author = ECSTRING(common,ACETeam);
diff --git a/addons/ballistics/CfgWeapons.hpp b/addons/ballistics/CfgWeapons.hpp
index 2446aeb3b3..3cbf8de544 100644
--- a/addons/ballistics/CfgWeapons.hpp
+++ b/addons/ballistics/CfgWeapons.hpp
@@ -27,6 +27,17 @@ class CfgWeapons {
};
};
+ class DMR_07_base_F: Rifle_Long_Base_F {
+ initSpeed = -1.06051;
+ ACE_barrelTwist = 228.6;
+ ACE_barrelLength = 640.0;
+ magazines[] = {
+ "20Rnd_650x39_Cased_Mag_F",
+ "ACE_20Rnd_65x47_Scenar_mag",
+ "ACE_20Rnd_65_Creedmor_mag"
+ };
+ };
+
class DMR_06_base_F: Rifle_Long_Base_F {
class Single: Mode_SemiAuto {
dispersion = 0.00029; // radians. Equal to 1.00 MOA.
@@ -112,7 +123,7 @@ class CfgWeapons {
"ACE_30Rnd_65x47_Scenar_mag",
"ACE_30Rnd_65_Creedmor_mag"
};
- initSpeed = -1.018;
+ initSpeed = -1.01842;
ACE_barrelTwist=228.6;
ACE_barrelLength=457.2;
class Single: Single {
@@ -142,6 +153,14 @@ class CfgWeapons {
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
+ initSpeed = -0.859238;
+ ACE_barrelTwist=177.8;
+ ACE_barrelLength=264.0;
+ };
+ class arifle_SPAR_02_base_F: Rifle_Base_F {
+ initSpeed = -0.934282;
+ ACE_barrelTwist=177.8;
+ ACE_barrelLength=368.0;
};
class arifle_SPAR_03_base_F: Rifle_Base_F {
magazines[] = {
@@ -154,6 +173,9 @@ class CfgWeapons {
"ACE_20Rnd_762x51_M993_AP_Mag",
"ACE_20Rnd_762x51_Mag_SD"
};
+ initSpeed = -0.984394;
+ ACE_barrelTwist=279.4;
+ ACE_barrelLength=508.0;
};
/* Other */
@@ -163,21 +185,26 @@ class CfgWeapons {
"200Rnd_65x39_cased_Box_Tracer",
"ACE_200Rnd_65x39_cased_Box_Tracer_Dim"
};
- initSpeed = -0.9763;
+ initSpeed = -0.976974;
ACE_barrelTwist=177.8;
ACE_barrelLength=317.5;
};
class LMG_Zafir_F: Rifle_Long_Base_F {
- initSpeed = -1.0;
+ initSpeed = -1.00333;
ACE_barrelTwist=304.8;
ACE_barrelLength=459.74;
};
+ class LMG_03_base_F: Rifle_Long_Base_F {
+ initSpeed = -1.02002;
+ ACE_barrelTwist=177.8;
+ ACE_barrelLength=414.02;
+ };
class Tavor_base_F: Rifle_Base_F {};
class mk20_base_F: Rifle_Base_F {};
/* SMGs */
class SDAR_base_F: Rifle_Base_F {
- initSpeed = -0.989;
+ initSpeed = -1.211;
class Single: Mode_SemiAuto {
dispersion = 0.0008727; // radians. Equal to 3 MOA.
};
@@ -190,9 +217,6 @@ class CfgWeapons {
dispersion = 0.0008727; // radians. Equal to 3 MOA.
};
};
- class pdw2000_base_F: Rifle_Short_Base_F {};
- class SMG_01_Base: Rifle_Short_Base_F {};
- class SMG_02_base_F: Rifle_Base_F {};
/* Pistols */
@@ -200,13 +224,13 @@ class CfgWeapons {
class Pistol_Base_F: Pistol {};
class hgun_P07_F: Pistol_Base_F {
- initSpeed = -0.9778;
+ initSpeed = -1.0;
ACE_barrelTwist=254.0;
ACE_barrelLength=101.6;
};
class hgun_Rook40_F: Pistol_Base_F {
- initSpeed = -1.0;
+ initSpeed = -1.03077;
ACE_barrelTwist=254.0;
ACE_barrelLength=111.76;
};
@@ -228,18 +252,57 @@ class CfgWeapons {
ACE_barrelTwist=406.4;
ACE_barrelLength=76.2;
};
- class hgun_PDW2000_F: pdw2000_base_F {
- initSpeed = -1.157;
+
+ class hgun_Pistol_01_F: Pistol_Base_F {
+ initSpeed = -0.974359;
+ ACE_barrelTwist=254.0;
+ ACE_barrelLength=93.5;
+ };
+
+ class pdw2000_base_F: Rifle_Short_Base_F {
+ initSpeed = -1.09615;
ACE_barrelTwist=228.6;
ACE_barrelLength=177.8;
};
+
+ /* Rifles */
+ class arifle_AKS_base_F: Rifle_Base_F {
+ initSpeed = -1.0;
+ ACE_barrelTwist=160.02;
+ ACE_barrelLength=206.5;
+ };
+ class arifle_AKM_base_F: Rifle_Base_F {
+ initSpeed = -1.0014;
+ ACE_barrelTwist = 199.898;
+ ACE_barrelLength = 414.02;
+ };
+ class arifle_AK12_base_F: Rifle_Base_F {
+ initSpeed = -1.0014;
+ ACE_barrelTwist = 199.898;
+ ACE_barrelLength = 414.02;
+ };
+ class arifle_CTAR_base_F: Rifle_Base_F {
+ initSpeed = -1.0;
+ ACE_barrelTwist = 244.0;
+ ACE_barrelLength = 463.0;
+ };
+ class arifle_CTARS_base_F: Rifle_Base_F {
+ initSpeed = -1.04301;
+ ACE_barrelTwist = 244.0;
+ ACE_barrelLength = 600.0;
+ };
+ class arifle_ARX_base_F: Rifle_Base_F {
+ initSpeed = -1.02052;
+ ACE_barrelTwist = 228.6;
+ ACE_barrelLength = 463.0;
+ };
class arifle_Katiba_F: arifle_katiba_Base_F {
magazines[] = {
"30Rnd_65x39_caseless_green",
"30Rnd_65x39_caseless_green_mag_Tracer",
"ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim"
};
- initSpeed = -1.08;
+ initSpeed = -1.08355;
ACE_barrelTwist=203.2;
ACE_barrelLength=728.98;
};
@@ -249,7 +312,7 @@ class CfgWeapons {
"30Rnd_65x39_caseless_green_mag_Tracer",
"ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim"
};
- initSpeed = -1.07;
+ initSpeed = -1.07105;
ACE_barrelTwist=203.2;
ACE_barrelLength=680.72;
};
@@ -259,7 +322,7 @@ class CfgWeapons {
"30Rnd_65x39_caseless_green_mag_Tracer",
"ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim"
};
- initSpeed = -1.08;
+ initSpeed = -1.08355;
ACE_barrelTwist=203.2;
ACE_barrelLength=728.98;
};
@@ -269,7 +332,7 @@ class CfgWeapons {
"30Rnd_65x39_caseless_mag_Tracer",
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
};
- initSpeed = -0.99;
+ initSpeed = -0.990132;
ACE_barrelTwist=228.6;
ACE_barrelLength=368.3;
};
@@ -295,7 +358,7 @@ class CfgWeapons {
"30Rnd_65x39_caseless_mag_Tracer",
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
};
- initSpeed = -0.965;
+ initSpeed = -0.963816;
ACE_barrelTwist=203.2;
ACE_barrelLength=266.7;
};
@@ -323,11 +386,16 @@ class CfgWeapons {
ACE_barrelTwist=285.75;
ACE_barrelLength=457.2;
};
- class SMG_02_F: SMG_02_base_F {
- initSpeed = -1.054;
+ class SMG_02_base_F: Rifle_Base_F {
+ initSpeed = -1.10288;
ACE_barrelTwist=254.0;
ACE_barrelLength=195.58;
};
+ class SMG_05_base_F: Rifle_Short_Base_F {
+ initSpeed = -1.04058;
+ ACE_barrelTwist=254.0;
+ ACE_barrelLength=115.0;
+ };
class arifle_TRG20_F: Tavor_base_F {
magazines[] = {
"30Rnd_556x45_Stanag",
@@ -358,7 +426,7 @@ class CfgWeapons {
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
- initSpeed = -0.989;
+ initSpeed = -0.988043;
ACE_barrelTwist=177.8;
ACE_barrelLength=459.74;
};
@@ -375,7 +443,7 @@ class CfgWeapons {
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
- initSpeed = -0.989;
+ initSpeed = -0.988043;
ACE_barrelTwist=177.8;
ACE_barrelLength=459.74;
};
@@ -398,7 +466,7 @@ class CfgWeapons {
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
- initSpeed = -0.98;
+ initSpeed = -0.980978;
ACE_barrelTwist=177.8;
ACE_barrelLength=441.96;
};
@@ -415,7 +483,7 @@ class CfgWeapons {
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
- initSpeed = -0.956;
+ initSpeed = -0.962648;
ACE_barrelTwist=177.8;
ACE_barrelLength=406.4;
};
@@ -432,12 +500,12 @@ class CfgWeapons {
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
- initSpeed = -0.956;
+ initSpeed = -0.962648;
ACE_barrelTwist=177.8;
ACE_barrelLength=406.4;
};
- class SMG_01_F: SMG_01_Base {
- initSpeed = -1.016;
+ class SMG_01_Base: Rifle_Short_Base_F {
+ initSpeed = -1.0175;
ACE_barrelTwist=406.4;
ACE_barrelLength=139.7;
};
@@ -461,7 +529,7 @@ class CfgWeapons {
"ACE_20Rnd_762x51_M993_AP_Mag",
"ACE_20Rnd_762x51_Mag_SD"
};
- initSpeed = -0.9724;
+ initSpeed = -0.972389;
ACE_barrelTwist=304.8;
ACE_barrelLength=457.2;
};
@@ -498,7 +566,7 @@ class CfgWeapons {
"ACE_20Rnd_762x67_Mk248_Mod_1_Mag",
"ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag"
};
- initSpeed = -0.962;
+ initSpeed = -0.961749;
ACE_barrelTwist=254.0;
ACE_barrelLength=508.0;
};
@@ -513,7 +581,7 @@ class CfgWeapons {
"ACE_20Rnd_762x51_M993_AP_Mag",
"ACE_20Rnd_762x51_Mag_SD"
};
- initSpeed = -0.9843;
+ initSpeed = -0.984394;
ACE_barrelTwist=254.0;
ACE_barrelLength=508.0;
};
@@ -538,12 +606,12 @@ class CfgWeapons {
"ACE_20Rnd_762x51_M993_AP_Mag",
"ACE_20Rnd_762x51_Mag_SD"
};
- initSpeed = -0.9916;
+ initSpeed = -0.992197;
ACE_barrelTwist=304.8;
ACE_barrelLength=558.8;
};
class MMG_01_hex_F: MMG_01_base_F {
- initSpeed = -1.0;
+ initSpeed = -0.997073;
ACE_barrelTwist=359.918;
ACE_barrelLength=549.91;
};
diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml
index d7a4ea65b9..08325cad96 100644
--- a/addons/ballistics/stringtable.xml
+++ b/addons/ballistics/stringtable.xml
@@ -1,6 +1,85 @@
+
+
+ 6.5x47mm 20Rnd Mag (HPBT Scenar)
+ Ch. 6.5x47mm 20Cps (HPBT Scenar)
+ Cargador de 20 balas de 6.5x47mm (HPBT Scenar)
+ Magazynek 6,5x47mm 20rd (HPBT Scenar)
+ Магазин из 20-ти 6,5x47 мм (экспансивные Scenar)
+ 6,5x47mm 20-Patronen-Magazin (HPBT Scenar)
+ 6.5x47mm 20Rnd Mag (HPBT Scenar)
+ 6.5x47mm 20náb. Zásobník (HPBT Scenar)
+ Carregador 6.5x47mm com 20 cartuchos (HPBT Scenar)
+ 6,5x47mm 20-lövedékes tár (HPBT Scenar)
+ 6.5x47mm 20発入り 弾倉 (HPBT Scenar)
+
+
+ 6.5mm Lapua
+ 6.5mm Lapua
+ 6.5mm Lapua
+ 6,5mm Lapua
+ 6,5 мм Lapua
+ 6,5mm Lapua
+ 6.5mm Lapua
+ 6.5mm Lapua
+ 6.5mm Lapua
+ 6,5mm Lapua
+ 6.5mm Lapua
+
+
+ Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 20<br />Used in: QBU-88
+ Calibre: 6.5x47mm (HPBT Scenar)<br />Cartouches: 20
+ Calibre: 6.5x47mm (HPBT Scenar)<br />Balas: 20<br />Se usa en: QBU-88
+ Kaliber: 6,5x47mm (HPBT Scenar)<br />Pociski: 20
+ Калибр: 6,5x47 мм (экспансивные Scenar)<br />Патронов: 20<br />Используются с: QBU-88
+ Kaliber: 6,5x47mm (HPBT Scenar)<br />Patronen: 20<br />Eingesetzt von: QBU-88
+ Calibro: 6.5x47mm (HPBT Scenar)<br />Munizioni: 20<br />In uso su: QBU-88
+ Ráže: 6.5x47mm (HPBT Scenar)<br />Nábojů: 20<br />Použití u: QBU-88
+ Calibre: 6.5x47mm (HPBT Scenar)<br/>Cartuchos: 20<br/>Usado em: QBU-88
+ Kaliber: 6,5x47mm (HPBT Scenar)<br />Lövedékek: 20<br />Használható: QBU-88
+ 口径: 6.5x47mm (HPBT Scenar)<br />装填数: 20<br />次で使用: QBU-88
+
+
+ 6.5mm Creedmor 20Rnd Mag
+ Magazynek 6,5mm Creedmor 20rd
+ 6.5mm Creedmor 20Rnd Mag
+ Магазин из 20-ти 6,5 мм Creedmor
+ 6,5mm Creedmor 20-Patronen-Magazin
+ Cargador de 20 balas Creedmor de 6.5mm
+ Ch. 6.5mm Creedmor 20Cps
+ 6.5mm Creedmor 20náb. Zásobník
+ Carregador 6.5mm com 20 cartuchos Creedmor
+ 6,5mm Creedmor 20-lövedékes tár
+ 6.5mm Creedmor 20発入り 弾倉
+
+
+ 6.5mm CM
+ 6.5mm CM
+ 6.5mm CM
+ 6,5mm CM
+ 6,5 мм CM
+ 6,5mm CM
+ 6.5mm CM
+ 6.5mm CM
+ 6.5mm CM
+ 6,5mm CM
+ 6.5mm CM
+
+
+ Caliber: 6.5x47mm Creedmor<br />Rounds: 20<br />Used in: QBU-88
+ Kaliber: 6,5x47mm Creedmor<br />Pociski: 20<br />Używany w: QBU-88
+ Kaliber: 6,5x47mm Creedmor<br />Patronen: 20<br />Eingesetzt von: QBU-88
+ Calibre: 6.5x47mm Creedmor <br />Cartouches: 20<br />Utilisé avec: QBU-88
+ Calibro: 6.5mm Creedmor<br />Munizioni: 20<br />In uso su: QBU-88
+ Calibre: 6.5mm Creedmor<br />Balas: 20<br />Se usa en: QBU-88
+ Калибр: 6,5x47мм Creedmor<br />Патронов: 20<br />Используются c: QBU-88
+ Ráže: 6.5x47mm Creedmor<br />Nábojů: 20<br />Použití u: QBU-88
+ Calibre: 6.5x47mm Creedmor<br/>Cartuchos: 20<br/>Usado em: QBU-88
+ Kaliber: 6,5x47mm Creedmor<br />Lövedékek: 20<br />Használható: QBU-88
+ 口径: 6.5x47mm Creedmor<br />装填数: 20<br />次で使用: QBU-88
+
6.5mm 30Rnd Tracer IR-DIM Mag
diff --git a/addons/chemlights/stringtable.xml b/addons/chemlights/stringtable.xml
index 72ac033d3e..c66bb425b9 100644
--- a/addons/chemlights/stringtable.xml
+++ b/addons/chemlights/stringtable.xml
@@ -5,16 +5,19 @@
Chemlights
ケミライト
Świetliki
+ Knicklichter
Prepare %1
%1 をつかう
Przygotuj %1
+ %1 vorbereiten
%1<br/>Prepared
%1<br/> をつかった
%1<br/>Przygotowany
+ %1<br/>vorbereitet
No inventory space
@@ -33,180 +36,216 @@
[ACE] Chemlights
[ACE] ケミライト
[ACE] Świetliki
+ [ACE] Knicklichter
Chemlight (Orange)
ケミライト (オレンジ)
Świetlik (pomarańczowy)
+ Knicklicht (orange)
Orange Light
オレンジ色
Pomarańczowe światło
+ Oranges Knicklicht
Type: Light - Orange<br />Rounds: 1<br />Used in: Hand
種類: 照明 - オレンジ<br />装填数: 1<br />次で使用: 携帯
Typ: Światło - pomarańczowe<br/>Pociski: 1<br/>Używany w: ręce
+ Typ: Licht - orange<br />Anzahl: 1<br />Benutzt in: Hand
Chemlight (White)
ケミライト (白)
Świetlik (biały)
+ Knicklicht (weiß)
White Light
白色
Białe światło
+ Weißes Knicklicht
Type: Light - White<br />Rounds: 1<br />Used in: Hand
種類: 照明 - 白<br />装填数: 1<br />次で使用: 携帯
Typ: Światło - białe<br/>Pociski: 1<br/>Używany w: ręce
+ Typ: Licht - weiß<br />Anzahl: 1<br />Benutzt in: Hand
Chemlight (Hi Red)
ケミライト (高輝度 赤)
Świetlik (jaskrawy czerwony)
+ Knicklicht (rot, hell)
Red Hi Light
高輝度の赤色
Jaskrawe czerwone światło
+ Helles, rotes Knicklicht
Type: Light - Red Hi (5 minute)<br />Rounds: 1<br />Used in: Hand
種類: 照明 - 高輝度 赤 (5分間)<br />装填数: 1<br />次で使用: 携帯
Typ: Światło - jaskrawe czerwone (5 minut)<br/>Pociski: 1<br/>Używany w: ręce
+ Typ: Licht - rot, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand
Chemlight (Hi Yellow)
ケミライト (高輝度 黄)
Świetlik (jaskrawy żółty)
+ Knicklicht (gelb, hell)
Yellow Hi Light
高輝度の黄色
Jaskrawe żółte światło
+ Helles, gelbes Knicklicht
Type: Light - Yellow Hi (5 minute)<br />Rounds: 1<br />Used in: Hand
種類: 照明 - 高輝度 黄 (5分間)<br />装填数: 1<br />次で使用: 携帯
Typ: Światło - jaskrawe żółte (5 minut)<br/>Pociski: 1<br/>Używany w: ręce
+ Typ: Licht - gelb, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand
Chemlight (Hi Orange)
ケミライト (高輝度 オレンジ)
Świetlik (jaskrawy pomarańczowy)
+ Knicklicht (orange, hell)
Orange Hi Light
高輝度のオレンジ
Jaskrawe pomarańczowe światło
+ Helles, oranges Knicklicht
Type: Light - Orange Hi (5 minute)<br />Rounds: 1<br />Used in: Hand
種類: 照明 - 高輝度 オレンジ (5分間)<br />装填数: 1<br />次で使用: 携帯
Typ: Światło - jaskrawe pomarańczowe (5 minut)<br/>Pociski: 1<br/>Używany w: ręce
+ Typ: Licht - orange, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand
Chemlight (Hi White)
ケミライト (高輝度 白)
Świetlik (jaskrawy biały)
+ Knicklicht (weiß, hell)
White Hi Light
高輝度の白色
Jaskrawe białe światło
+ Helles, weißes Knicklicht
Type: Light - White Hi (5 minute)<br />Rounds: 1<br />Used in: Hand
種類: 照明 - 高輝度 白 (5分間)<br />装填数: 1<br />次で使用: 携帯
Typ: Światło - jaskrawe białe (5 minut)<br/>Pociski: 1<br/>Używany w: ręce
+ Typ: Licht - weiß, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand
Chemlight (IR)
ケミライト (IR)
Świetlik (podczerwony)
+ Knicklicht (IR)
IR Light
赤外線光
Światło podczerwone
+ IR-Knicklicht
Type: Light - Infrared<br />Rounds: 1<br />Used in: Hand
種類: 照明 - 赤外線<br />装填数: 1<br />次で使用: 携帯
Typ: Światło - podczerwone<br/>Pociski: 1<br/>Używany w: ręce
+ Typ: Licht - infrarot<br />Anzahl: 1<br />Benutzt in: Hand
Chemlight Shield (Empty)
ケミライト シールド (空)
Osłona na świetlik (pusta)
+ Knicklicht-Abschirmung (leer)
Shield for chemlights. Combine with chemlight to prepare reading light.
ケミライトを入れられます。シールドとケミライトを組み合わせることで、照明にもなりえます。
Osłona na świetliki. Połącz ją ze świetlikiem by stworzyć lampkę do czytania.
+ Abschirmung für Knicklichter. Mit Knicklicht kombinieren, um Leselicht zu erhalten.
Chemlight Shield (Green)
ケミライト シールド (緑)
Osłona na świetlik (zielona)
+ Knicklicht-Abschirmung (grün)
Green reading light.
緑色の照明。
Zielona lampka.
+ Grünes Leselicht.
Chemlight Shield (Red)
ケミライト シールド (赤)
Osłona na świetlik (czerwona)
+ Knicklicht-Abschirmung (rot)
Red reading light.
赤色の照明。
Czerwona lampka.
+ Rotes Leselicht.
Chemlight Shield (Blue)
ケミライト シールド (青)
Osłona na świetlik (niebieska)
+ Knicklicht-Abschirmung (blau)
Blue reading light.
青色の照明。
Niebieska lampka.
+ Blaues Leselicht.
Chemlight Shield (Yellow)
ケミライト シールド (黄)
Osłona na świetlik (żółta)
+ Knicklicht-Abschirmung (gelb)
Yellow reading light.
黄色の照明。
Żółta lampka.
+ Gelbes Leselicht.
Chemlight Shield (Orange)
ケミライト シールド (オレンジ)
Osłona na świetlik (pomarańczowa)
+ Knicklicht-Abschirmung (orange)
Orange reading light.
オレンジの照明。
Pomarańczowa lampka.
+ Oranges Leselicht.
Chemlight Shield (White)
ケミライト シールド (白)
Osłona na świetlik (biała)
+ Knicklicht-Abschirmung (weiß)
White reading light.
白の照明。
+ Weißes Leselicht.
-
+
\ No newline at end of file
diff --git a/addons/cookoff/stringtable.xml b/addons/cookoff/stringtable.xml
index 8b08b1e3ff..2e221ce7fc 100644
--- a/addons/cookoff/stringtable.xml
+++ b/addons/cookoff/stringtable.xml
@@ -1,9 +1,9 @@
-
+
Enable cook off
- Cook-off ermöglichen
+ Selbstzündung ermöglichen
Povolit explozi munice
Включить воспламенение
誘爆を有効化
@@ -11,7 +11,7 @@
Enables cook off and related vehicle destruction effects.
- Ermöglicht Cook-off und zugehörige Fahrzeug-Zerstörungseffekte.
+ Ermöglicht Selbstzündung und zugehörige Fahrzeug-Zerstörungseffekte.
Povolí explozi munice a její následné ničivé efekty.
Включает воспламенение и сопутствующие эффекты повреждения техники.
誘爆を有効化し、車両が誘爆によって破壊されていきます。
@@ -34,18 +34,22 @@
Enable ammo box cook off
弾薬箱に誘爆を有効化
+ Selbstzündung für Munitionskisten ermöglichen
Enables cooking off of ammo boxes.
弾薬箱が誘爆するようになります。
+ Ermöglicht Selbstzündung von Munitionskisten.
Enable Ammunition cook off
弾薬の誘爆を有効化
+ Selbstzündung für Munition ermöglichen
Enables Ammunition cook off. Fires ammunition projectiles while vehicle is on fire and has ammunition.
弾薬が誘爆します。車両が燃えると、搭載している弾薬が激しく燃え上がりす。
+ Ermöglicht Selbstzündung von Munition. Feuert Projektile der Munition ab, solange das Fahrzeug brennt und Munition besitzt.
-
+
\ No newline at end of file
diff --git a/addons/dogtags/stringtable.xml b/addons/dogtags/stringtable.xml
index 7f57e75026..0987dca59f 100644
--- a/addons/dogtags/stringtable.xml
+++ b/addons/dogtags/stringtable.xml
@@ -7,6 +7,7 @@
Жетон
Identifikační známka
ドッグ タグ
+ Hundemarke
Check Dog Tag
@@ -14,6 +15,7 @@
Проверить жетон
Zkontrolovat známku
ドッグ タグを見る
+ Hundemarke prüfen
Check
@@ -21,6 +23,7 @@
Проверить
Zkontroluj
見る
+ Prüfen
Take
@@ -28,6 +31,7 @@
Взять
Vezmi
取る
+ Nehmen
Dogtag taken from %1...
@@ -35,6 +39,7 @@
Жетон снят с %1...
Sebral jsem známku od %1...
%1からドッグ タグを取っている・・・
+ Hundemarke von %1 genommen ...
Somebody else has already taken the dogtag...
@@ -42,6 +47,7 @@
Кто-то уже забрал жетон...
Někdo jiný už vzal identifikační známku...
すでに誰かがドッグ タグを取っているようだ・・・
+ Jemand anderes hat bereits die Hundemarke genommen ...
\ No newline at end of file
diff --git a/addons/explosives/functions/fnc_spawnFlare.sqf b/addons/explosives/functions/fnc_spawnFlare.sqf
index acd5dc2a99..79f105b67b 100644
--- a/addons/explosives/functions/fnc_spawnFlare.sqf
+++ b/addons/explosives/functions/fnc_spawnFlare.sqf
@@ -21,3 +21,5 @@ TRACE_3("Params",_posX,_posY,_posZ);
private _flare = "ACE_TripFlare_FlareEffect" createVehicle [_posX,_posY,_posZ];
TRACE_1("",_flare);
+
+nil
diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml
index ecc97a4d7e..51a3051614 100644
--- a/addons/explosives/stringtable.xml
+++ b/addons/explosives/stringtable.xml
@@ -820,12 +820,14 @@
Сигнальная растяжка
仕掛け型照明地雷
Flara na linkę
+ Stolperdraht-Leuchtrakete
Type: Tripwire flare - Ignites a non-lethal flare when triggered.<br />Rounds: 1<br />Used on: Ground
Тип: Сигнальная растяжка - При срабатывании выпускает несмертельную сгнальную вспышку.<br />Зарядов: 1<br />Используется на: Земле
種類: 仕掛け型照明地雷 - 発動したとき、非致死性の照明を発炎します。<br />装填数: 1<br />次で使用: 地表
Typ: Flara na linkę - Wystrzeliwuje nieszkodliwą flarę przy nadepnięciu linki.<br/>Pociski: 1<br/>Używane na: ziemia
+ Typ: Stolperdraht-Leuchtrakete - Schießt bei Auslösung eine nicht-tödliche Leuchtrakete ab.<br />Ladungen: 1<br />Benutzt auf: Boden
-
+
\ No newline at end of file
diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml
index fa31607242..eec413b69c 100644
--- a/addons/goggles/stringtable.xml
+++ b/addons/goggles/stringtable.xml
@@ -32,18 +32,21 @@
Эффект очков
ゴーグルによる効果
Efekty gogli
+ Brilleneffekt
Tint
Тонировка
色彩のみ
Winieta
+ Tönung
Tint + Effects
Тонировка + эффекты
色彩 + 効果
Winieta + Efekty
+ Tönung + Effekte
-
+
\ No newline at end of file
diff --git a/addons/kestrel4500/functions/fnc_generateOutputData.sqf b/addons/kestrel4500/functions/fnc_generateOutputData.sqf
index c3bce5efa2..ccc2ab57e3 100644
--- a/addons/kestrel4500/functions/fnc_generateOutputData.sqf
+++ b/addons/kestrel4500/functions/fnc_generateOutputData.sqf
@@ -107,7 +107,7 @@ if (GVAR(referenceHeadingMenu) == 0) then {
};
case 2: { // Wind SPD
if (!GVAR(MinAvgMax)) then {
- _textCenterBig = Str(round(abs(_windSpeed) * 10) / 10);
+ _textCenterBig = Str(round(_windSpeed * 10) / 10);
} else {
_textCenterLine1Left = "Max";
_textCenterLine2Left = "Avg";
@@ -134,7 +134,7 @@ if (GVAR(referenceHeadingMenu) == 0) then {
if (!GVAR(MinAvgMax)) then {
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
_textCenterBig = Str(round(abs(sin(GVAR(RefHeading) - _playerDir) * _windSpeed) * 10) / 10);
- _textInfoLine1 = format["%1 m/s @ %2", round((abs(cos(_playerDir - _windDir)) * _windSpeed) * 10) / 10, round(_playerDir)];
+ _textInfoLine1 = format["%1 m/s @ %2", round(_windSpeed * 10) / 10, round(_playerDir)];
} else {
_textCenterBig = Str(round(abs(sin(GVAR(RefHeading)) * _windSpeed) * 10) / 10);
_textInfoLine1 = format["%1 m/s @ %2", round(_windSpeed * 10) / 10, round(_windDir)];
@@ -166,7 +166,7 @@ if (GVAR(referenceHeadingMenu) == 0) then {
if (!GVAR(MinAvgMax)) then {
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
_textCenterBig = Str(round(cos(GVAR(RefHeading) - _playerDir) * _windSpeed * 10) / 10);
- _textInfoLine1 = format["%1 m/s @ %2", round((abs(cos(_playerDir - _windDir)) * _windSpeed) * 10) / 10, round(_playerDir)];
+ _textInfoLine1 = format["%1 m/s @ %2", round(_windSpeed * 10) / 10, round(_playerDir)];
} else {
_textCenterBig = Str(round(cos(GVAR(RefHeading)) * _windSpeed * 10) / 10);
_textInfoLine1 = format["%1 m/s @ %2", round(_windSpeed * 10) / 10, round(_windDir)];
diff --git a/addons/laser/stringtable.xml b/addons/laser/stringtable.xml
index 5fd9f21ae7..00d40257f4 100644
--- a/addons/laser/stringtable.xml
+++ b/addons/laser/stringtable.xml
@@ -4,6 +4,7 @@
Laser Dispersion Simulation Count
レーザーの分散シミュレート数
+ Laserstreuung-Simulationszähler
Laser Code
@@ -45,4 +46,4 @@
レーザ - コードの数値を減らす
-
+
\ No newline at end of file
diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml
index 18b3a91aaf..fbb3ff49c7 100644
--- a/addons/maptools/stringtable.xml
+++ b/addons/maptools/stringtable.xml
@@ -150,6 +150,7 @@
Клавиша поворота инструментов карты
マップ ツールの回転キー
Klawisz obrotu narzędzi nawigacyjnych
+ Taste zum Drehen des Kartenwerkzeugs
Modifier key to allow rotating map tools
@@ -157,14 +158,17 @@
Клавиша-модификатор, позволяющая поворачивать инструменты карты
マップ ツールを回転させるキーを編集できます。
Modyfikator pozwalający na obracanie narzędzi nawigacyjnych
+ Steuerungstaste, um Drehung des Kartenwerkzeugs zu ermöglichen.
Draw straight lines with maptools
マップ ツールを使って直線を書く
+ Zeichne gerade Linien mit dem Kartenwerkzeug
Draw on the edge of maptools to draw straight lines. Note: Must hover at midpoint to delete.
マップ ツールの端から直線を書きます。メモ:線の中央ホバーすると削除します。
+ Zeichne gerade Linien am Rand des Kartenwerkzeugs. Hinweis: zum Löschen über den Mittelpunkt der Linie fahren
-
+
\ No newline at end of file
diff --git a/addons/medical/CfgEden.hpp b/addons/medical/CfgEden.hpp
index e4d034a413..9579f29c61 100644
--- a/addons/medical/CfgEden.hpp
+++ b/addons/medical/CfgEden.hpp
@@ -10,7 +10,7 @@ class Cfg3DEN {
};
class GVAR(isMedicControl): Title {
attributeLoad = "(_this controlsGroupCtrl 100) lbsetcursel (((_value + 1) min 3) max 0);";
- attributeSave = "(missionnamespace getvariable ['ace_isMeidc_temp',0]) - 1;";
+ attributeSave = "(missionnamespace getvariable ['ace_isMedic_temp',0]) - 1;";
class Controls: Controls {
class Title: Title{};
class Value: ctrlToolbox {
@@ -22,7 +22,7 @@ class Cfg3DEN {
rows = 1;
columns = 4;
strings[] = {"$STR_3DEN_Attributes_Lock_Default_text", CSTRING(AssignMedicRoles_role_none), CSTRING(AssignMedicRoles_role_medic), CSTRING(AssignMedicRoles_role_doctorShort)};
- onToolboxSelChanged = "missionnamespace setvariable ['ace_isMeidc_temp',_this select 1];";
+ onToolboxSelChanged = "missionnamespace setvariable ['ace_isMedic_temp',_this select 1];";
};
};
};
diff --git a/addons/medical_ai/functions/fnc_playTreatmentAnim.sqf b/addons/medical_ai/functions/fnc_playTreatmentAnim.sqf
index 86043a1dd6..e2eb733b2c 100644
--- a/addons/medical_ai/functions/fnc_playTreatmentAnim.sqf
+++ b/addons/medical_ai/functions/fnc_playTreatmentAnim.sqf
@@ -32,7 +32,12 @@ if (stance _unit == "PRONE") then {
};
private _anim = getText (_animConfig >> _configProperty);
-private _wpn = ["non", "rfl", "pst"] select (1 + ([primaryWeapon _unit, handgunWeapon _unit] find (currentWeapon _unit)));
+private _wpn = switch (true) do {
+ case ((currentWeapon _unit) == ""): {"non"};
+ case ((currentWeapon _unit) == (primaryWeapon _unit)): {"rfl"};
+ case ((currentWeapon _unit) == (handgunWeapon _unit)): {"pst"};
+ default {"non"};
+};
_anim = [_anim, "[wpn]", _wpn] call CBA_fnc_replace;
[_unit, _anim] call EFUNC(common,doAnimation);
diff --git a/addons/medical_blood/stringtable.xml b/addons/medical_blood/stringtable.xml
index 6eb21c3aca..d32227d780 100644
--- a/addons/medical_blood/stringtable.xml
+++ b/addons/medical_blood/stringtable.xml
@@ -4,14 +4,17 @@
Only Players
プレイヤーのみ
+ Nur Spieler
Enable Blood Drops
血の滴下を有効化
+ Aktiviere Blutspritzer
Enable or disable Blood Drops created on bleeding and taking damage
ダメージを受けたり、出血していると血が滴る様子の有効か無効化
+ Aktiviere oder deaktiviere Blutspritzer, die durch Blutungen oder bei Schadensnahme entstehen.
-
+
\ No newline at end of file
diff --git a/addons/minedetector/stringtable.xml b/addons/minedetector/stringtable.xml
index ff67757cb3..ed879dfd6b 100644
--- a/addons/minedetector/stringtable.xml
+++ b/addons/minedetector/stringtable.xml
@@ -8,6 +8,7 @@
Detektor kovů
地雷探知機
Wykrywacz metali
+ Metalldetektor
Metal detector
@@ -16,6 +17,7 @@
Detektor kovů
地雷探知機
Wykrywacz metali
+ Metalldetektor
Activate
@@ -24,6 +26,7 @@
Aktivovat
起動
Aktywuj
+ Aktivieren
Deactivate
@@ -32,6 +35,7 @@
Deaktivovat
停止
Deaktywuj
+ Deaktivieren
Connect Headphones
@@ -39,6 +43,7 @@
Připojit sluchátka
ヘッドホンへつなぐ
Podłącz słuchawki
+ Kopfhörer verbinden
Disconnect Headphones
@@ -46,6 +51,7 @@
Odpojit sluchátka
ヘッドホンからはずす
Odłącz słuchawki
+ Kopfhörer trennen
Headphones Connected
@@ -53,6 +59,7 @@
Sluchátka připojena
ヘッドホンへ接続された
Słuchawki podpięte
+ Kopfhörer verbunden
Headphones Disconnected
@@ -60,6 +67,7 @@
Sluchátka odpojena
ヘッドホンから外された
Słuchawki odpięte
+ Kopfhörer getrennt
-
+
\ No newline at end of file
diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml
index cd5559282b..5ef227bc42 100644
--- a/addons/overheating/stringtable.xml
+++ b/addons/overheating/stringtable.xml
@@ -239,7 +239,7 @@
Swapping barrel...
- Lauf wird gewechselt...
+ Lauf wird gewechselt ...
Cambiando el cañón...
Wymienianie lufy...
Měním hlaveň...
@@ -291,7 +291,7 @@
Checking temperature...
- Prüfe Temperatur...
+ Prüfe Temperatur ...
Verificando temperatura...
Sprawdzanie temperatury...
Vérification de la température...
@@ -310,6 +310,7 @@
Zkontrolovat teplotu náhradní hlavně
予備銃身の温度を測る
Sprawdź temperaturę zapasowych luf
+ Temperatur der Wechselläufe prüfen
Checking spare barrels temperatures...
@@ -319,6 +320,7 @@
Kontroluji teplotu náhradní hlavně...
予備銃身の温度を測っている・・・
Sprawdzanie temperatury zapasowych luf...
+ Prüfe Temperatur der Wechselläufe ...
Temperature
@@ -341,6 +343,7 @@
Studená náhrandí hlaveň
予備銃身は冷たい
Zimne zapasowe lufy
+ Kalte Wechselläufe
Warm Spare Barrel/s
@@ -350,6 +353,7 @@
Teplá náhrandí hlaveň
予備銃身は温かい
Ciepłe zapasowe lufy
+ Warme Wechselläufe
Hot Spare Barrel/s
@@ -359,6 +363,7 @@
Horká náhrandí hlaveň
予備銃身は熱い
Gorące zapasowe lufy
+ Heiße Wechselläufe
Very Hot Spare Barrel/s
@@ -368,6 +373,7 @@
Velmi horká náhrandí hlaveň
予備銃身はとても熱い
Bardzo gorące zapasowe lufy
+ Sehr heiße Wechselläufe
Extremely Hot Spare Barrel/s
@@ -377,10 +383,11 @@
Extrémně horká náhrandí hlaveň
予備銃身は極めて熱い
Ekstremalnie gorące zapasowe lufy
+ Extrem heiße Wechselläufe
Overheating Enabled
- Überhitzen Aktiviert
+ Überhitzung aktiviert
Activada Sobrecalentamiento
Superaquecimento ativado
Surchauffe activée
@@ -396,6 +403,7 @@
Главный включатель для модуля перегрева/заклинивания
過熱と弾詰まりモジュールを全て有効化します
Główny włącznik modułu przegrzewania/zacinania się broni
+ Hauptschalter, um die Überhitzung-/Ladehemmung-Module zu aktivieren
-
+
\ No newline at end of file
diff --git a/addons/realisticnames/CfgWeapons.hpp b/addons/realisticnames/CfgWeapons.hpp
index 2654dc0df7..3bc97b14ab 100644
--- a/addons/realisticnames/CfgWeapons.hpp
+++ b/addons/realisticnames/CfgWeapons.hpp
@@ -586,14 +586,33 @@ class CfgWeapons {
class arifle_CTAR_blk_F: arifle_CTAR_base_F {
displayName = CSTRING(arifle_CTAR_blk);
};
+ class arifle_CTAR_ghex_F: arifle_CTAR_base_F {
+ displayName = CSTRING(arifle_CTAR_ghex);
+ };
+ class arifle_CTAR_hex_F: arifle_CTAR_base_F {
+ displayName = CSTRING(arifle_CTAR_hex);
+ };
class arifle_CTAR_GL_base_F;
class arifle_CTAR_GL_blk_F: arifle_CTAR_GL_base_F {
displayName = CSTRING(arifle_CTAR_GL_blk);
};
+ class arifle_CTAR_GL_ghex_F: arifle_CTAR_GL_base_F {
+ displayName = CSTRING(arifle_CTAR_GL_ghex);
+ };
+ class arifle_CTAR_GL_hex_F: arifle_CTAR_GL_base_F {
+ displayName = CSTRING(arifle_CTAR_GL_hex);
+ };
+
class arifle_CTARS_base_F;
class arifle_CTARS_blk_F: arifle_CTARS_base_F {
displayName = CSTRING(arifle_CTARS_blk);
};
+ class arifle_CTARS_ghex_F: arifle_CTARS_base_F {
+ displayName = CSTRING(arifle_CTARS_ghex);
+ };
+ class arifle_CTARS_hex_F: arifle_CTARS_base_F {
+ displayName = CSTRING(arifle_CTARS_hex);
+ };
// QBU-88
class DMR_07_base_F;
diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml
index 7517e7b937..9821346a5a 100644
--- a/addons/realisticnames/stringtable.xml
+++ b/addons/realisticnames/stringtable.xml
@@ -2223,6 +2223,32 @@
QBZ-95-1 (Preto)
QBZ-95-1 (黒)
+
+ QBZ-95-1 (Green Hex)
+ QBZ-95-1 (Hex Grün)
+ QBZ-95-1 (Hex Verde)
+ QBZ-95-1 (zielony hex)
+ QBZ-95-1 (Zelený Hex)
+ QBZ-95-1 (Hex Verte)
+ QBZ-95-1 (Зелёный Hex)
+ QBZ-95-1 (Verde Hex)
+ QBZ-95-1 (Zöld Hex)
+ QBZ-95-1 (Hex Verde)
+ QBZ-95-1 (緑蜂巣)
+
+
+ QBZ-95-1 (Hex)
+ QBZ-95-1 (Hex)
+ QBZ-95-1 (Hex)
+ QBZ-95-1 (hex)
+ QBZ-95-1 (Hex)
+ QBZ-95-1 (Hex)
+ QBZ-95-1 (Hex)
+ QBZ-95-1 (Hex)
+ QBZ-95-1 (Hex)
+ QBZ-95-1 (Hex)
+ QBZ-95-1 (蜂巣)
+
QBZ-95-1 GL (Black)
QBZ-95-1 GL (Černá)
@@ -2236,6 +2262,32 @@
QBZ-95-1 GL (Preto)
QBZ-95-1 GL (黒)
+
+ QBZ-95-1 GL (Green Hex)
+ QBZ-95-1 GL (Hex Grün)
+ QBZ-95-1 GL (Hex Verde)
+ QBZ-95-1 GL (zielony hex)
+ QBZ-95-1 GL (Zelený Hex)
+ QBZ-95-1 GL (Hex Verte)
+ QBZ-95-1 GL (Зелёный Hex)
+ QBZ-95-1 GL (Verde Hex)
+ QBZ-95-1 GL (Zöld Hex)
+ QBZ-95-1 GL (Hex Verde)
+ QBZ-95-1 GL (緑蜂巣)
+
+
+ QBZ-95-1 GL (Hex)
+ QBZ-95-1 GL (Hex)
+ QBZ-95-1 GL (Hex)
+ QBZ-95-1 GL (hex)
+ QBZ-95-1 GL (Hex)
+ QBZ-95-1 GL (Hex)
+ QBZ-95-1 GL (Hex)
+ QBZ-95-1 GL (Hex)
+ QBZ-95-1 GL (Hex)
+ QBZ-95-1 GL (Hex)
+ QBZ-95-1 GL (蜂巣)
+
QBZ-95-1 LSW (Black)
QBZ-95-1 LSW (Černá)
@@ -2249,6 +2301,32 @@
QBZ-95-1 LSW (Preto)
QBZ-95-1 LSW (黒)
+
+ QBZ-95-1 LSW (Green Hex)
+ QBZ-95-1 LSW (Hex Grün)
+ QBZ-95-1 LSW (Hex Verde)
+ QBZ-95-1 LSW (zielony hex)
+ QBZ-95-1 LSW (Zelený Hex)
+ QBZ-95-1 LSW (Hex Verte)
+ QBZ-95-1 LSW (Зелёный Hex)
+ QBZ-95-1 LSW (Verde Hex)
+ QBZ-95-1 LSW (Zöld Hex)
+ QBZ-95-1 LSW (Hex Verde)
+ QBZ-95-1 LSW (緑蜂巣)
+
+
+ QBZ-95-1 LSW (Hex)
+ QBZ-95-1 LSW (Hex)
+ QBZ-95-1 LSW (Hex)
+ QBZ-95-1 LSW (hex)
+ QBZ-95-1 LSW (Hex)
+ QBZ-95-1 LSW (Hex)
+ QBZ-95-1 LSW (Hex)
+ QBZ-95-1 LSW (Hex)
+ QBZ-95-1 LSW (Hex)
+ QBZ-95-1 LSW (Hex)
+ QBZ-95-1 LSW (蜂巣)
+
QBU-88 (Black)
QBU-88 (Černá)
diff --git a/addons/repair/ACE_Repair.hpp b/addons/repair/ACE_Repair.hpp
index 6e5eac4fa8..3cea9ed7ca 100644
--- a/addons/repair/ACE_Repair.hpp
+++ b/addons/repair/ACE_Repair.hpp
@@ -72,7 +72,7 @@ class ACE_Repair {
requiredEngineer = QGVAR(engineerSetting_fullRepair);
repairLocations[] = {QGVAR(fullRepairLocation)};
repairingTime = 30;
- condition = "damage _target > 0";
+ condition = "0 < ({_x>0} count (getAllHitPointsDamage _target param [2,[]]))";
callbackSuccess = QUOTE(call FUNC(doFullRepair));
itemConsumed = QGVAR(consumeItem_ToolKit);
};
diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml
index bbcaead48d..b813fb66a2 100644
--- a/addons/tagging/stringtable.xml
+++ b/addons/tagging/stringtable.xml
@@ -6,42 +6,49 @@
Маркировка
タグ付け
Tagowanie
+ Markierungssystem
Configure how the tagging system will operate by default.
Настройка работы системы спрей-маркеров по-умолчанию.
標準で開くタグ付けシステムの設定を行います。
Skonfiguruj zachowanie systemu tagowania.
+ Konfiguriert, wie das Markierungssystem standardmäßig funktioniert.
Quick Tag
Быстрый маркер
クイック タグ
Szybkie tagowanie
+ Schnelle Markierung
Action performed on main tag interaction point.
Действие, выполняемое при выборе главного пункта меню маркировки.
インタラクション ポインにむけてタグ付けをします。
Akcja wykonywana na głównym punkcie interakcji tagu.
+ Aktion, die am Haupt-Interaktionspunkt ausgeführt werden soll.
Last Used
Повторить последний
最後の使用
Ostatnio użyte
+ Zuletzt benutzt
Random X
Случайный Х
無作為な X印
Losowy X
+ Zufällig X
Random
Случайный
無作為
Losowy
+ Zufällig
Tag
@@ -164,4 +171,4 @@
スプレー缶は壁にタグ付できます。
-
+
\ No newline at end of file
diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml
index a56d56640b..1bb0928c2f 100644
--- a/addons/trenches/stringtable.xml
+++ b/addons/trenches/stringtable.xml
@@ -152,6 +152,7 @@
Продолжить копание окопа
Pokračovat v kopání
塹壕を掘りつづける
+ Graben fortsetzen
Remove Trench
@@ -161,6 +162,7 @@
Убрать окоп
Odstranit zákop
塹壕を消す
+ Schützengraben entfernen
Removing Trench
@@ -170,6 +172,7 @@
Убирание окопа
Odstraňuji zákop
塹壕を消している
+ Entferne Schützengraben
\ No newline at end of file
diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml
index f039bfd7e7..a06a695e63 100644
--- a/addons/ui/stringtable.xml
+++ b/addons/ui/stringtable.xml
@@ -9,6 +9,7 @@
Интерфейс
ユーザ インタフェイス
Interfejs użytkownika
+ Benutzeroberfläche
User Interface
@@ -18,6 +19,7 @@
Пользовательский интерфейс
ユーザ インタフェイス
Interfejs użytkownika
+ Benutzeroberfläche
This module allows toggling visible user interface parts.
@@ -26,6 +28,7 @@
Этот модуль позволяет переключать видимость элементов пользовательского интерфейса.
モジュールではユーザ インタフェイスの一部をトグル表示できます。
Moduł ten pozwala zmienić stan widoczności poszczególnych elementów UI.
+ Dieses Modul erlaubt es, Teile der Benutzeroberfläche (UI) an- oder auszuschalten.
Allow Selective UI
@@ -35,6 +38,7 @@
Включить настраиваемый интерфейс
選択できるユーザ インタフェイスを有効化します
Zezwól na selektywne UI
+ Erlaube selektives UI
Allow client to modify their UI.
@@ -44,6 +48,7 @@
Позволить клиентам изменять их пользовательский интерфейс.
クライアントがユーザ インタフェイスを編集できるようにします。
Zezwól klientowi na modyfikację UI.
+ Erlaube Clients, ihr UI zu modifizieren.
Soldier/Vehicle/Weapon Information
@@ -53,6 +58,7 @@
Информация о Солдате/Технике/Оружии
兵士/車両/武器の情報
Informacje o żołnierzu/pojeździe/broni
+ Soldat/Fahrzeug/Waffe Information
Vehicle Radar
@@ -62,6 +68,7 @@
Радар в технике
車両のレーダ
Radar w pojeździe
+ Fahrzeugradar
Vehicle Compass
@@ -71,6 +78,7 @@
Компас в технике
車両のレーダ
Kompas w pojeździe
+ Fahrzeugkompass
Command Menu
@@ -80,6 +88,7 @@
Командное меню
指揮メニュー
Menu dowodzenia
+ Kommandomenü
Group Bar
@@ -89,6 +98,7 @@
Панель командира
指揮メニュー
Pasek grupy
+ Gruppenleiste
Weapon Name
@@ -98,6 +108,7 @@
Название оружия
武器名
Nazwa broni
+ Waffenname
Weapon Name Background
@@ -107,6 +118,7 @@
Фон названия оружия
武器名の背景表示
Tło nazwy broni
+ Waffenname Hintergrund
Firing Mode
@@ -116,6 +128,7 @@
Режим стрельбы
射撃モード
Tryb ognia
+ Feuermodus
Ammo Type
@@ -125,6 +138,7 @@
Тип боеприпасов
弾種
Typ amunicji
+ Munitionstyp
Ammo Count
@@ -134,6 +148,7 @@
Количество боеприпасов
弾薬数
Ilość amunicji
+ Munitionsanzahl
Magazine Count
@@ -143,6 +158,7 @@
Количество магазинов
弾倉装填数
Ilość magazynków
+ Magazinanzahl
Throwable Type
@@ -152,6 +168,7 @@
Тип гранаты
投げる種類
Typ granatu
+ Wurfobjekt-Typ
Throwable Count
@@ -161,6 +178,7 @@
Количество гранат
投げられる数
Ilość granatów
+ Wurfobjekt-Anzahl
Zeroing
@@ -170,6 +188,7 @@
Дальность стрельбы
ゼロイン
Wyzerowanie broni
+ Nullung
Weapon Lower Info Background
@@ -178,6 +197,7 @@
Фон ниформации об оружии снизу
武器名の背景表示 (下側)
Tło dolnej części informacji o broni
+ Hintergrund der unteren Waffen-Info-Leiste
Stance
@@ -187,6 +207,7 @@
Стойка
姿勢
Postura
+ Haltung
Stamina Bar
@@ -196,6 +217,7 @@
Полоса выносливости
体力バー
Pasek staminy
+ Ausdaueranzeige
Gunner Weapon Name
@@ -204,6 +226,7 @@
Название орудия наводчика
射手用の武器名
Nazwa broni strzelca
+ Richtschütze Waffenname
Gunner Weapon Name Background
@@ -212,6 +235,7 @@
Фон названия орудия наводчика
射手用の武器名の背景表示
Tło nazwy broni strzelca
+ Richtschütze Waffenname Hintergrund
Gunner Firing Mode
@@ -220,6 +244,7 @@
Режим стрельбы наводчика
射手用の発射モード
Tryb ognia strzelca
+ Richtschütze Feuermodus
Gunner Ammo Type
@@ -228,6 +253,7 @@
Тип боеприпасов наводчика
射手用の弾種
Typ amunicji strzelca
+ Richtschütze Munitionstyp
Gunner Ammo Count
@@ -236,6 +262,7 @@
Количество боеприпасов наводчика
射手用の弾数
Ilość amunicji strzelca
+ Richtschütze Munitionsanzahl
Gunner Magazine Count
@@ -244,6 +271,7 @@
Количество магазинов наводчика
射手用の弾倉数
Ilość magazynków strzelca
+ Richtschütze Magazinanzahl
Gunner Launchable Type
@@ -252,6 +280,7 @@
Тип пусковой установки наводчика
射手用のランチャーの種類
Typ rakiet strzelca
+ Richtschütze Raketentyp
Gunner Launchable Count
@@ -260,6 +289,7 @@
Количество снарядов пусковой установки наводчика
射手用のランチャー弾薬数
Ilość rakiet strzelca
+ Richtschütze Raketenanzahl
Gunner Zeroing
@@ -268,6 +298,7 @@
Дальность стрельбы наводчика
射手用ゼロイン
Wyzerowanie broni strzelca
+ Richtschütze Nullung
Gunner Weapon Lower Info Background
@@ -276,6 +307,7 @@
Фон ниформации об орудии наводчика снизу
射手用の武器名の背景表示 (下側)
Tło dolnej części informacji o broni strzelca
+ Hintergrund der unteren Waffen-Info-Leiste (Richtschütze)
Vehicle Name
@@ -285,6 +317,7 @@
Название техники
車両名
Nazwa pojazdu
+ Fahrzeugname
Vehicle Name Background
@@ -294,6 +327,7 @@
Фон названия техники
車両名の背景
Tło nazwy pojazdu
+ Fahrzeugname Hintergrund
Vehicle Fuel Bar
@@ -303,6 +337,7 @@
Полоса топлива
車両の給油計
Pasek paliwa
+ Fahrzeug-Treibstoffleiste
Vehicle Speed
@@ -312,6 +347,7 @@
Скорость техники
車両の速度計
Prędkościomierz
+ Fahrzeuggeschwindigkeit
Vehicle Altitude
@@ -321,6 +357,7 @@
Высота полета
車両の高度計
Wysokościomierz radarowy
+ Fahrzeughöhe
Vehicle Damage
@@ -330,6 +367,7 @@
Повреждение техники
車両の損傷表示
Uszkodzenia pojazdu
+ Fahrzeugschaden
Vehicle Info Background
@@ -339,6 +377,7 @@
Фон информации о технике
車両状態の背景
Tło informacji o pojeździe
+ Fahrzeug Info Hintergrund
Requires Soldier/Vehicle/Weapon Information.
@@ -348,6 +387,7 @@
Требуется Информация о Солдате/Технике/Оружии.
兵士/車両/武器の情報を必要とします。
Wymaga informacji o żołnierzu/pojeździe/broni.
+ Benötigt Soldat/Fahrzeug/Waffe Information.
Modifying User Interface is disabled.
@@ -357,6 +397,7 @@
Изменение пользовательского интерфейса запрещено.
変更されたユーザ インタフェイスを無効化します。
Modyfikacja interfejsu użytkownika jest wyłączona.
+ Die Modifizierung des UI ist deaktiviert.
Cannot modify a forced User Interface element.
@@ -365,6 +406,7 @@
Невозможно изменить зафиксированный элемент пользовательского интерфейса.
ユーザー インタフェイス要素は変更できません。
Nie można modyfikować wymuszonego elementu interfejsu użytkownika.
+ Gesperrte UI-Elemente können nicht modifiziert werden.
-
+
\ No newline at end of file
diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml
index 6a6f75a450..317f423b4e 100644
--- a/addons/zeus/stringtable.xml
+++ b/addons/zeus/stringtable.xml
@@ -203,6 +203,7 @@
Bránit oblast
防衛範囲
Osłaniaj obszar
+ Verteidige Gebiet
Global AI Skill
@@ -211,6 +212,7 @@
Globální zkušenosti AI
総合的な AI スキル
Globalne umiejętności AI
+ Globale KI-Fähigkeit
General Skill
@@ -219,6 +221,7 @@
Primární zkušenosti
総合スキル
Ogólne umiejętności
+ Allgemeine Fähigkeit
Changes: general, commanding, courage
@@ -227,6 +230,7 @@
Upravuje: general, commanding, courage
変更:general, commanding, courage
Zmienia: ogólne, dowodzenie, odwaga
+ Ändert: general, commanding, courage
Accuracy
@@ -235,6 +239,7 @@
Přesnost
精度
Precyzja
+ Genauigkeit
Changes: aimingAccuracy
@@ -243,6 +248,7 @@
Upravuje: aimingAccuracy
変更:aimingAccuracy
Zmienia: precyzję celowania
+ Ändert: aimingAccuracy
Weapon Handling
@@ -251,6 +257,7 @@
Zacházení se zbraní
武器の扱い
Obsługa broni
+ Waffenhandhabung
Changes: aimingShake, aimingSpeed, reloadSpeed
@@ -259,6 +266,7 @@
Upravuje: aimingShake, aimingSpeed, reloadSpeed
変更:aimingShake, aimingSpeed, reloadSpeed
Zmienia: drżenie broni, szybkość celowania, szybkość przeładowania
+ Ändert: aimingShake, aimingSpeed, reloadSpeed
Spotting
@@ -267,6 +275,7 @@
Vnímavost
索敵
Rozpoznanie
+ Aufklärung
Changes: spotDistance, spotTime
@@ -275,6 +284,7 @@
Upravuje: spotDistance, spotTime
変更:spotDistance, spotTime
Zmienia: zasięg rozpoznawania, czas rozpoznawania
+ Ändert: spotDistance, spotTime
Seek Cover
@@ -283,6 +293,7 @@
Vyhledávat krytí
遮蔽
Szukaj osłon
+ Deckungssuche
Should AI seek cover
@@ -291,6 +302,7 @@
AI se bude snažit vyhledávat krytí
AI は遮蔽を取るようになります
Czy AI powinno szukać osłon
+ Soll KI nach Deckung suchen
Auto Combat
@@ -299,6 +311,7 @@
Automatický režim boje
自動戦闘
Auto walka
+ Automatischer Kampfmodus
Should AI automatically switch to combat mode
@@ -307,6 +320,7 @@
AI se automaticky přepne do bojového režimu
AI は自動的に戦闘状態へ切り替えます
Czy AI powinno automatycznie przechodzić w tryb walki
+ Soll KI automatisch in Kampfmodus umschalten
Group Side
@@ -315,6 +329,7 @@
Strana skupiny
グループ側
Strona grupy
+ Gruppenseite
Patrol Area
@@ -323,6 +338,7 @@
Oblast hlídkování
哨戒範囲
Patrol obszaru
+ Patrouillengebiet
Toggle Surrender
@@ -344,6 +360,7 @@
Teleportovat hráče
プレイヤーを移動
Teleportuj graczy
+ Spieler teleportieren
Player
@@ -352,6 +369,7 @@
Hráč
プレイヤー
Gracz
+ Spieler
Teleport selected player to module position
@@ -360,6 +378,7 @@
Teleportuje vybraného hráče na pozici modulu
選択したプレイヤーをプレイヤーをモジュール位置へ移動します
Teleportuje wybranego gracza na pozycję modułu
+ Teleportiert ausgewählten Spieler zur Position des Moduls
Teleport Group
@@ -368,6 +387,7 @@
Teleportovat skupinu
グループを移動
Teleport grupy
+ Gruppe teleportieren
Teleports all units in group
@@ -376,6 +396,7 @@
Teleportuje všechny jednotky ve skupině
グループ内の全ユニットを移動させます
Teleportuje wszystkie jednostki w grupie
+ Teleportiert alle Einheiten der Gruppe
Toggle Unconscious
@@ -397,6 +418,7 @@
Prohledat oblast
捜索範囲
Przeszukaj teren
+ Durchsuche Gebiet
Search Nearby Building
@@ -405,6 +427,7 @@
Prohledat nejbližší budovu
近くの建物を創作します
Przeszukaj najbliższy budynek
+ Durchsuche nahegelegenes Gebäude
Assign Medic
@@ -560,6 +583,7 @@
Jednotka musí patřit k příslušné straně
ユニットを適切な陣営にします
Jednostka musi należeć do odpowiedniej strony
+ Einheit muss einer passenden Seite angehören
Nearest building is too far away
@@ -568,6 +592,7 @@
Nejbližší budova je příliš daleko
近くに建物がありません。
Najbliższy budynek jest zbyt daleko
+ Nächstgelegenes Gebäude ist zu weit entfernt
Place on a unit
@@ -626,6 +651,7 @@
Náklad:
カーゴ:
Ładunek:
+ Ladung:
Task Position
@@ -634,6 +660,7 @@
Pozice úkolu
タスクの位置
Pozycja zadania
+ Position der Aufgabe
Select a position to perform the task at
@@ -641,6 +668,7 @@
Выбрать местоположение для выполнения задания
次の選択位置をタスクとして実行
Wybierz pozycję na której wykonać zadanie
+ Wähle eine Position, an der die Aufgabe ausgeführt werden soll
Task Radius
@@ -648,6 +676,7 @@
Радиус задания
タスク範囲
Obszar zadania
+ Radius der Aufgabe
Radius to perform the task within
@@ -655,6 +684,7 @@
Радиус выполнения задания
次の範囲をタスクとして実行
Obszar na którym zadanie powinno zostać wykonane
+ Radius, in dem die Aufgabe ausgeführt werden soll
Invalid radius entered
@@ -663,6 +693,7 @@
Vložen neplatný parametr
無効な半径が入力されました
Wpisano nieprawidłowy promień
+ Ungültiger Radius eingegeben
-
+
\ No newline at end of file
diff --git a/docs/Dockerfile b/docs/Dockerfile
index aecfb1aa33..033cd89d67 100644
--- a/docs/Dockerfile
+++ b/docs/Dockerfile
@@ -2,7 +2,10 @@
# docker build -t ace3mod/jekyll .
#
# Run:
-# docker run -p 4000:4000 -it ace3mod/jekyll
+# docker run -it -p 4000:4000 -v $(pwd):/usr/src/app ace3mod/jekyll
+#
+# Run with --incremental flag:
+# docker run -it -p 4000:4000 -v $(pwd):/usr/src/app ace3mod/jekyll --incremental
FROM starefossen/github-pages:latest
MAINTAINER bux
@@ -11,4 +14,4 @@ COPY . /usr/src/app
VOLUME "/usr/src/app"
-CMD ["jekyll", "serve", "--future", "--incremental", "--config", "_config_dev.yml", "-H", "0.0.0.0", "-P", "4000"]
+ENTRYPOINT ["jekyll", "serve", "--future", "--config", "_config_dev.yml", "-H", "0.0.0.0", "-P", "4000"]
diff --git a/docs/_posts/2016-11-04-ace3-version381.md b/docs/_posts/2016-11-04-ace3-version381.md
new file mode 100644
index 0000000000..8b9a448db3
--- /dev/null
+++ b/docs/_posts/2016-11-04-ace3-version381.md
@@ -0,0 +1,60 @@
+---
+title: ACEREP #00007
+description: Status report on ACE3 version 3.8.1
+parent: posts
+image: /img/news/161104_blood.jpg
+author: bux
+layout: post
+---
+
+Just about two month ago we've released 3.7.0. A version that had most of the bugs fixed even before the official release. For the first time we were actively supplying users interested in helping us with pre release versions of the mod - so called release candidates. Quite a lot of communities tested the several release candidates and provided us with very valuable feedback. Especially on bugs and quirks that are near impossible to test alone.
+
+
+
+A big shoutout to those who helped testing! Thank you.
+
+We've used this approach for 3.8.0 as well and hope that again most of the bugs have been fixed already and that you can enjoy ACE3 without annoying interruptions.
+
+We will keep this approach for the future and invite you to join to test the release candidates. All information will be posted in our public chat to which you're invited too. You can access it here: [http://slackin.ace3mod.com](http://slackin.ace3mod.com){:target="_blank"}
+
+So, why didn't we release any minor releases for 3.7.0 (e.g. 3.7.1)? In short: We didn't feel that it was necessary. During and directly after the release we had already added new and awesome features so that we had to do a major release.
+
+Two new features have made it into 3.8.0 which are "blood splatters" and "ammo box cook off".
+Wounded units will now leave more visible trails of blood on the ground which could make for interesting missions like escaping as a wounded soldier who is being tracked down by enemy combatants.
+When ammo boxes are destroyed the contained ammunition now will cook off in a multitude of small explosions and the boxes won't just sink into the ground.
+
+
+
+
+
+
+
+With 3.8.0 the map tools will allow you to draw straight lines again. A feature that sadly is missing in vanilla Arma 3.
+
+## The Future things
+
+### Medical rewrite
+
+If you're following ACE3 development on GitHub closely you might already have spotted it: The medical system gets a huge rewrite. That's true, we're completely redoing the medical system. Until now the medical system has been a merge of the AGM and CSE medical systems. The AGM one kind of became what you know as the "basic system" and CSE's respectively the "advanced system". Being two separate systems it was always hard for us to improve one or the other without reworking the other one too. Not an ideal situation. Another issue we will address with this rewrite is the amount of influence a medical condition has on gameplay. An issue we've often heard from different communities as well. There's an [interesting discussion going on GitHub with a lot of different ideas and feature requests](https://github.com/acemod/ACE3/issues/3134){:target="_blank"}. Worth a read.
+
+With the state machine system that has been introduced in CBA we are now able to strictly define various health states of players such as unconsciousness or cardiac arrest and what can happen in those states. This allows us to massively declutter the code which will not only reduce the possibility of bugs, but also enable us to add more features and gameplay elements to the medical system - with no performance loss at all.
+
+We're really looking forward to the result and how you will like it.
+
+### Night Vision Googles Improvements
+
+If you've [watched dslyecxi's recent YouTube videos](https://www.youtube.com/user/Dslyecxi){:target="_blank"} or if you're [following us on twitter](https://twitter.com/intent/follow?screen_name=ace3mod&tw_p=followbutton){:target="_blank"} you might already have seen that dslyecxi has put together a mod vastly improving night vision googles and the resulting very limiting view. Check out his video with the explanation why vanilla Arma 3 NVGs are a bad representation of real life NVGs and what he has done to improve that.
+
+
+
+
+dslyecxi has donated his mod to ACE3 and we're looking into integrating it for a future release.
+
+## The End Things
+
+The full changelog for ACE3 v3.8.1 can be found here: [https://github.com/acemod/ACE3/releases/v3.8.1](https://github.com/acemod/ACE3/releases/v3.8.1){:target="_blank"}
+
+We are still in need for translations for some languages within the ACE3 project. Please have a look at [this GitHub issue to track the progress and what languages lack translations](https://github.com/acemod/ACE3/issues/367){:target="_blank"}. Any and all help with this is very appreciated.
+
+Make sure to [follow us on twitter](https://twitter.com/intent/follow?screen_name=ace3mod&tw_p=followbutton){:target="_blank"} and to [like our facebook page](https://www.facebook.com/ACE3Mod/){:target="_blank"}.
+
diff --git a/docs/img/news/161104_blood.jpg b/docs/img/news/161104_blood.jpg
new file mode 100644
index 0000000000..80af0fdd04
Binary files /dev/null and b/docs/img/news/161104_blood.jpg differ
diff --git a/docs/wiki/development/setting-up-the-development-environment.md b/docs/wiki/development/setting-up-the-development-environment.md
index c0333ac590..5efb993dbe 100644
--- a/docs/wiki/development/setting-up-the-development-environment.md
+++ b/docs/wiki/development/setting-up-the-development-environment.md
@@ -72,21 +72,24 @@ To start the game using this build, you can use the following modline:
## 4.3 Creating a Release Build
To create a complete build of ACE3 that you can use without the source files you will need to:
+
- Ensure `.hpp` is **NOT** in pboProject's "Exclude From Pbo" list
When the requirements are met:
-- Execute `make.py version increment_build force check_external release` in the `tools` folder, replacing `` with the part of version you want to increment (options described below)
+
+- Execute `make.py version increment_build force checkexternal release` in the `tools` folder, replacing `` with the part of version you want to increment (options described below)
This will populate the `release` folder with binarized PBOs, compiled extensions, copied extras, bisigns and a bikey. Additionally, an archive file will also be created in the folder. The folder and archive handle like those of any other mod.
Different `make.py` command line options include:
+
- `version` - update version number in all files and leave them in working directory (leaving this out will still update the version in all files present in the `release` folder, but they will be reverted to not disturb the working directory)
- `increment_build` - increments _build_ version number
- `increment_patch` - increments _patch_ version number (ignored with `increment_minor` or `increment_major`)
- `increment_minor` - increments _minor_ version number and resets _patch_ version number to `0` (ignored with `increment_major`)
- `increment_major` - increments _major_ version number and resets _minor_ and _patch_ version numbers to `0`
- `force` - force rebuild all PBOs, even those already present in the `release` directory (combined with `compile` it will also rebuild all extensions)
-- `check_external` - check external references (incompatible only with ` ` and `force `)
+- `checkexternal` - check external references (incompatible only with ` ` and `force `)
- `release` - create release packages/archives
- ` ` - build only specified component(s) (incompatible with `release`)
- `force ` - force rebuild specified component(s) (incompatible with `release`)
diff --git a/extras/airFrictionAnalysis.txt b/extras/airFrictionAnalysis.txt
index 722077578b..0f825e55d5 100644
--- a/extras/airFrictionAnalysis.txt
+++ b/extras/airFrictionAnalysis.txt
@@ -31,13 +31,21 @@ Max. drop difference (cm): 1.25
Max. tof difference (ms): 7.0
Optimal airFriction: 0.00123272
##########################################
-Ammo Class: ACE_545x39_Ball_7N6M
+Ammo Class: B_545x39_Ball_F
MaxRanges (m): [400, 500]
-MuzzleVelocities (m/s): [780, 880, 920]
-Max. velocity difference (m/s): 19.71
-Max. drop difference (cm): 2.04
+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
+##########################################
+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.00114744
+Optimal airFriction: 0.00117956
##########################################
Ammo Class: B_65x39_Caseless
MaxRanges (m): [400, 800, 800]
@@ -247,6 +255,14 @@ Max. drop difference (cm): 14.52
Max. tof difference (ms): 29.0
Optimal airFriction: 0.00069611
##########################################
+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
+##########################################
Ammo Class: B_127x99_Ball
MaxRanges (m): [1300, 1300]
MuzzleVelocities (m/s): [895, 905]
@@ -280,12 +296,12 @@ Max. tof difference (ms): 9.0
Optimal airFriction: 0.00049899
##########################################
Ammo Class: B_9x21_Ball
-MaxRanges (m): [200, 300, 300]
-MuzzleVelocities (m/s): [440, 460, 480]
-Max. velocity difference (m/s): 37.94
-Max. drop difference (cm): 5.27
+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.00226847
+Optimal airFriction: 0.00208292
##########################################
Ammo Class: ACE_9x18_Ball_57N181S
MaxRanges (m): [100, 200, 200]
@@ -298,10 +314,10 @@ Optimal airFriction: 0.00190333
Ammo Class: ACE_9x19_Ball
MaxRanges (m): [100, 200, 200]
MuzzleVelocities (m/s): [340, 370, 400]
-Max. velocity difference (m/s): 17.59
-Max. drop difference (cm): 6.56
-Max. tof difference (ms): 10.0
-Optimal airFriction: 0.0018577
+Max. velocity difference (m/s): 23.95
+Max. drop difference (cm): 3.75
+Max. tof difference (ms): 17.0
+Optimal airFriction: 0.0019835
##########################################
Ammo Class: ACE_10x25_Ball
MaxRanges (m): [200, 300, 300]
diff --git a/tools/cba/addons/main/script_macros_common.hpp b/tools/cba/addons/main/script_macros_common.hpp
index 6ec4906fff..a847909490 100644
--- a/tools/cba/addons/main/script_macros_common.hpp
+++ b/tools/cba/addons/main/script_macros_common.hpp
@@ -142,7 +142,7 @@ Author:
#define LOG_SYS(LEVEL,MESSAGE) LOG_SYS_FORMAT(LEVEL,MESSAGE) call CBA_fnc_log
#endif
-#define LOG_SYS_FILELINENUMBERS(LEVEL,MESSAGE) LOG_SYS(LEVEL,format [ARR_4('%1 File: %2 Line: %3',MESSAGE,__FILE__,__LINE__ + 1)])
+#define LOG_SYS_FILELINENUMBERS(LEVEL,MESSAGE) LOG_SYS(LEVEL,format [ARR_4('%1 %2:%3',MESSAGE,__FILE__,__LINE__ + 1)])
/* -------------------------------------------
Macro: LOG()
@@ -270,7 +270,7 @@ Example:
Author:
Spooner
------------------------------------------- */
-#define ERROR(MESSAGE) ['PREFIX', 'COMPONENT', MESSAGE, nil, __FILE__, __LINE__ + 1] call CBA_fnc_error
+#define ERROR(MESSAGE) LOG_SYS_FILELINENUMBERS('ERROR',MESSAGE)
#define ERROR_1(MESSAGE,ARG1) ERROR(FORMAT_1(MESSAGE,ARG1))
#define ERROR_2(MESSAGE,ARG1,ARG2) ERROR(FORMAT_2(MESSAGE,ARG1,ARG2))
#define ERROR_3(MESSAGE,ARG1,ARG2,ARG3) ERROR(FORMAT_3(MESSAGE,ARG1,ARG2,ARG3))
@@ -280,6 +280,33 @@ Author:
#define ERROR_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) ERROR(FORMAT_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7))
#define ERROR_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8) ERROR(FORMAT_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8))
+/* -------------------------------------------
+Macro: ERROR_MSG()
+ Record a critical error in the RPT log and display on screen error message.
+
+ Newlines (\n) in the MESSAGE will be put on separate lines.
+
+Parameters:
+ MESSAGE - Message to record
+
+Example:
+ (begin example)
+ ERROR_MSG("value of frog not found in config ...yada...yada...");
+ (end)
+
+Author:
+ commy2
+------------------------------------------- */
+#define ERROR_MSG(MESSAGE) ['PREFIX', 'COMPONENT', nil, MESSAGE, __FILE__, __LINE__ + 1] call CBA_fnc_error
+#define ERROR_MSG_1(MESSAGE,ARG1) ERROR_MSG(FORMAT_1(MESSAGE,ARG1))
+#define ERROR_MSG_2(MESSAGE,ARG1,ARG2) ERROR_MSG(FORMAT_2(MESSAGE,ARG1,ARG2))
+#define ERROR_MSG_3(MESSAGE,ARG1,ARG2,ARG3) ERROR_MSG(FORMAT_3(MESSAGE,ARG1,ARG2,ARG3))
+#define ERROR_MSG_4(MESSAGE,ARG1,ARG2,ARG3,ARG4) ERROR_MSG(FORMAT_4(MESSAGE,ARG1,ARG2,ARG3,ARG4))
+#define ERROR_MSG_5(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5) ERROR_MSG(FORMAT_5(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5))
+#define ERROR_MSG_6(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) ERROR_MSG(FORMAT_6(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6))
+#define ERROR_MSG_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) ERROR_MSG(FORMAT_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7))
+#define ERROR_MSG_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8) ERROR_MSG(FORMAT_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8))
+
/* -------------------------------------------
Macro: ERROR_WITH_TITLE()
Record a critical error in the RPT log.
@@ -287,8 +314,6 @@ Macro: ERROR_WITH_TITLE()
The title can be specified (in the heading is always just "ERROR")
Newlines (\n) in the MESSAGE will be put on separate lines.
- TODO: Popup an error dialog & throw an exception.
-
Parameters:
TITLE - Title of error message
MESSAGE - Body of error message
@@ -302,6 +327,14 @@ Author:
Spooner
------------------------------------------- */
#define ERROR_WITH_TITLE(TITLE,MESSAGE) ['PREFIX', 'COMPONENT', TITLE, MESSAGE, __FILE__, __LINE__ + 1] call CBA_fnc_error
+#define ERROR_WITH_TITLE_1(TITLE,MESSAGE,ARG1) ERROR_WITH_TITLE(TITLE,FORMAT_1(MESSAGE,ARG1))
+#define ERROR_WITH_TITLE_2(TITLE,MESSAGE,ARG1,ARG2) ERROR_WITH_TITLE(TITLE,FORMAT_2(MESSAGE,ARG1,ARG2))
+#define ERROR_WITH_TITLE_3(TITLE,MESSAGE,ARG1,ARG2,ARG3) ERROR_WITH_TITLE(TITLE,FORMAT_3(MESSAGE,ARG1,ARG2,ARG3))
+#define ERROR_WITH_TITLE_4(TITLE,MESSAGE,ARG1,ARG2,ARG3,ARG4) ERROR_WITH_TITLE(TITLE,FORMAT_4(MESSAGE,ARG1,ARG2,ARG3,ARG4))
+#define ERROR_WITH_TITLE_5(TITLE,MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5) ERROR_WITH_TITLE(TITLE,FORMAT_5(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5))
+#define ERROR_WITH_TITLE_6(TITLE,MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) ERROR_WITH_TITLE(TITLE,FORMAT_6(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6))
+#define ERROR_WITH_TITLE_7(TITLE,MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) ERROR_WITH_TITLE(TITLE,FORMAT_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7))
+#define ERROR_WITH_TITLE_8(TITLE,MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8) ERROR_WITH_TITLE(TITLE,FORMAT_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8))
/* -------------------------------------------
Macro: MESSAGE_WITH_TITLE()