diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
new file mode 100644
index 0000000..cea4d3f
--- /dev/null
+++ b/.vscode/c_cpp_properties.json
@@ -0,0 +1,18 @@
+{
+ "configurations": [
+ {
+ "name": "windows-gcc-x64",
+ "includePath": [
+ "${workspaceFolder}/**"
+ ],
+ "compilerPath": "gcc",
+ "cStandard": "${default}",
+ "cppStandard": "${default}",
+ "intelliSenseMode": "windows-gcc-x64",
+ "compilerArgs": [
+ ""
+ ]
+ }
+ ],
+ "version": 4
+}
\ No newline at end of file
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..f12cf3e
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,24 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "C/C++ Runner: Debug Session",
+ "type": "cppdbg",
+ "request": "launch",
+ "args": [],
+ "stopAtEntry": false,
+ "externalConsole": true,
+ "cwd": "e:/Arma/braf/braf_air2",
+ "program": "e:/Arma/braf/braf_air2/build/Debug/outDebug",
+ "MIMode": "gdb",
+ "miDebuggerPath": "gdb",
+ "setupCommands": [
+ {
+ "description": "Enable pretty-printing for gdb",
+ "text": "-enable-pretty-printing",
+ "ignoreFailures": true
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..c9e66f1
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,59 @@
+{
+ "C_Cpp_Runner.cCompilerPath": "gcc",
+ "C_Cpp_Runner.cppCompilerPath": "g++",
+ "C_Cpp_Runner.debuggerPath": "gdb",
+ "C_Cpp_Runner.cStandard": "",
+ "C_Cpp_Runner.cppStandard": "",
+ "C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvarsall.bat",
+ "C_Cpp_Runner.useMsvc": false,
+ "C_Cpp_Runner.warnings": [
+ "-Wall",
+ "-Wextra",
+ "-Wpedantic",
+ "-Wshadow",
+ "-Wformat=2",
+ "-Wcast-align",
+ "-Wconversion",
+ "-Wsign-conversion",
+ "-Wnull-dereference"
+ ],
+ "C_Cpp_Runner.msvcWarnings": [
+ "/W4",
+ "/permissive-",
+ "/w14242",
+ "/w14287",
+ "/w14296",
+ "/w14311",
+ "/w14826",
+ "/w44062",
+ "/w44242",
+ "/w14905",
+ "/w14906",
+ "/w14263",
+ "/w44265",
+ "/w14928"
+ ],
+ "C_Cpp_Runner.enableWarnings": true,
+ "C_Cpp_Runner.warningsAsError": false,
+ "C_Cpp_Runner.compilerArgs": [],
+ "C_Cpp_Runner.linkerArgs": [],
+ "C_Cpp_Runner.includePaths": [],
+ "C_Cpp_Runner.includeSearch": [
+ "*",
+ "**/*"
+ ],
+ "C_Cpp_Runner.excludeSearch": [
+ "**/build",
+ "**/build/**",
+ "**/.*",
+ "**/.*/**",
+ "**/.vscode",
+ "**/.vscode/**"
+ ],
+ "C_Cpp_Runner.useAddressSanitizer": false,
+ "C_Cpp_Runner.useUndefinedSanitizer": false,
+ "C_Cpp_Runner.useLeakSanitizer": false,
+ "C_Cpp_Runner.showCompilationTime": false,
+ "C_Cpp_Runner.useLinkTimeOptimization": false,
+ "C_Cpp_Runner.msvcSecureNoWarnings": false
+}
\ No newline at end of file
diff --git a/braf_air2/.vscode/c_cpp_properties.json b/braf_air2/.vscode/c_cpp_properties.json
new file mode 100644
index 0000000..cea4d3f
--- /dev/null
+++ b/braf_air2/.vscode/c_cpp_properties.json
@@ -0,0 +1,18 @@
+{
+ "configurations": [
+ {
+ "name": "windows-gcc-x64",
+ "includePath": [
+ "${workspaceFolder}/**"
+ ],
+ "compilerPath": "gcc",
+ "cStandard": "${default}",
+ "cppStandard": "${default}",
+ "intelliSenseMode": "windows-gcc-x64",
+ "compilerArgs": [
+ ""
+ ]
+ }
+ ],
+ "version": 4
+}
\ No newline at end of file
diff --git a/braf_air2/.vscode/launch.json b/braf_air2/.vscode/launch.json
new file mode 100644
index 0000000..3913034
--- /dev/null
+++ b/braf_air2/.vscode/launch.json
@@ -0,0 +1,24 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "C/C++ Runner: Debug Session",
+ "type": "cppdbg",
+ "request": "launch",
+ "args": [],
+ "stopAtEntry": false,
+ "externalConsole": true,
+ "cwd": "p:/braf/braf_air2",
+ "program": "p:/braf/braf_air2/build/Debug/outDebug",
+ "MIMode": "gdb",
+ "miDebuggerPath": "gdb",
+ "setupCommands": [
+ {
+ "description": "Enable pretty-printing for gdb",
+ "text": "-enable-pretty-printing",
+ "ignoreFailures": true
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/braf_air2/.vscode/settings.json b/braf_air2/.vscode/settings.json
new file mode 100644
index 0000000..c9e66f1
--- /dev/null
+++ b/braf_air2/.vscode/settings.json
@@ -0,0 +1,59 @@
+{
+ "C_Cpp_Runner.cCompilerPath": "gcc",
+ "C_Cpp_Runner.cppCompilerPath": "g++",
+ "C_Cpp_Runner.debuggerPath": "gdb",
+ "C_Cpp_Runner.cStandard": "",
+ "C_Cpp_Runner.cppStandard": "",
+ "C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvarsall.bat",
+ "C_Cpp_Runner.useMsvc": false,
+ "C_Cpp_Runner.warnings": [
+ "-Wall",
+ "-Wextra",
+ "-Wpedantic",
+ "-Wshadow",
+ "-Wformat=2",
+ "-Wcast-align",
+ "-Wconversion",
+ "-Wsign-conversion",
+ "-Wnull-dereference"
+ ],
+ "C_Cpp_Runner.msvcWarnings": [
+ "/W4",
+ "/permissive-",
+ "/w14242",
+ "/w14287",
+ "/w14296",
+ "/w14311",
+ "/w14826",
+ "/w44062",
+ "/w44242",
+ "/w14905",
+ "/w14906",
+ "/w14263",
+ "/w44265",
+ "/w14928"
+ ],
+ "C_Cpp_Runner.enableWarnings": true,
+ "C_Cpp_Runner.warningsAsError": false,
+ "C_Cpp_Runner.compilerArgs": [],
+ "C_Cpp_Runner.linkerArgs": [],
+ "C_Cpp_Runner.includePaths": [],
+ "C_Cpp_Runner.includeSearch": [
+ "*",
+ "**/*"
+ ],
+ "C_Cpp_Runner.excludeSearch": [
+ "**/build",
+ "**/build/**",
+ "**/.*",
+ "**/.*/**",
+ "**/.vscode",
+ "**/.vscode/**"
+ ],
+ "C_Cpp_Runner.useAddressSanitizer": false,
+ "C_Cpp_Runner.useUndefinedSanitizer": false,
+ "C_Cpp_Runner.useLeakSanitizer": false,
+ "C_Cpp_Runner.showCompilationTime": false,
+ "C_Cpp_Runner.useLinkTimeOptimization": false,
+ "C_Cpp_Runner.msvcSecureNoWarnings": false
+}
\ No newline at end of file
diff --git a/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_m.p3d b/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_m.p3d
index ee852f7..2402697 100644
--- a/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_m.p3d
+++ b/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_m.p3d
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:41fbc1b8a69582ea22e3fb9bea6f68c619c77dc061f1d563c1f778180be60cbc
-size 8579
+oid sha256:7271c58365c9d7a7fedba246804c947628c3a72ac69b673e19940de5d2e3dc88
+size 2879
diff --git a/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_n.p3d b/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_n.p3d
index 00bc220..2f844fc 100644
--- a/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_n.p3d
+++ b/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_n.p3d
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e02fbc1203feebef4c4464b7647bfd12256080598a3cee4b3d16dd3b39002880
-size 8579
+oid sha256:a27fc05cc694c93e2200a1cb679f0e25be3816ca72a017439446bc0624e8cf3b
+size 2879
diff --git a/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_w.p3d b/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_w.p3d
index d9a209a..ea4cc14 100644
--- a/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_w.p3d
+++ b/braf_air2/BRAF_Optics_Air2/A29/braf_a29_gunner_w.p3d
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a88bb5be0d1a62588f1ed28b0ee4342cc56f14c1a59ad4cda6126c67593fe556
-size 8483
+oid sha256:24d642e908da49902f2546d5bd6fcba82214254651a40ccf1e5be5f972906427
+size 2879
diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_m_white_ca.paa b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_m_white_ca.paa
index 48beef9..1dd40aa 100644
--- a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_m_white_ca.paa
+++ b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_m_white_ca.paa
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bbae1de1f28d2c392b6a778d1d85d2e6fedb3aa9180230c60162113d051fdba8
-size 48052
+oid sha256:12cf8777f266e4e08488d3a9b43a7c09f60b957ec681d7c63f1595976aad56a4
+size 40541
diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_m_white_ca.png b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_m_white_ca.png
new file mode 100644
index 0000000..6090ca6
--- /dev/null
+++ b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_m_white_ca.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ecfa454a18886f6c75ebb139d9039ac2abc86aa25afc43d7b1d3580e7092ca80
+size 18460
diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_n_white_ca.paa b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_n_white_ca.paa
index 0030c4b..b2eebab 100644
--- a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_n_white_ca.paa
+++ b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_n_white_ca.paa
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3414013f4bbeedbd1c8c4dc27a2f7c3e27d86c269a99a6ccadab72517bb66bc7
-size 49044
+oid sha256:265bcb0566edf4fba248ae6e09670db617adfe5b2d1d62c2f4d51d619f6cd0ae
+size 41337
diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_n_white_ca.png b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_n_white_ca.png
new file mode 100644
index 0000000..93804d6
--- /dev/null
+++ b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_n_white_ca.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0bf83102858c7de3588424436272490c8aacbeaf6b9aa965c400c8045a10a27c
+size 18634
diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_w_white_ca.paa b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_w_white_ca.paa
index c585b7d..a522395 100644
--- a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_w_white_ca.paa
+++ b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_w_white_ca.paa
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0fbfadabd4844edbdcaecb70bc74d51a929ae66f5d3b48cd57cd415e8a601d08
-size 47684
+oid sha256:65f28f9fd8ffacbd67a6555bec414094cb38baeb5386160d8185b1854855ff3b
+size 40001
diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_w_white_ca.png b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_w_white_ca.png
new file mode 100644
index 0000000..a53b318
--- /dev/null
+++ b/braf_air2/BRAF_Optics_Air2/A29/data/BRAF_A29_reticulo_w_white_ca.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3bdff952278fd32fb2f4d81bb56dd1c94013d0ec440928b0036efa8ea445df5
+size 18238
diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_hor_ca.paa b/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_hor_ca.paa
new file mode 100644
index 0000000..376c3c4
--- /dev/null
+++ b/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_hor_ca.paa
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1e79b9d65ca3e8932669efcc2b75cdc2fdec22d47767d243194aee4f02ce10d7
+size 24979
diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_north_ca.paa b/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_north_ca.paa
new file mode 100644
index 0000000..981bd22
--- /dev/null
+++ b/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_north_ca.paa
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2f161192d030e93f0bab84ffa43cb9a74627315211695f1c48a4e26d7d514dd8
+size 31656
diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_north_ca.png b/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_north_ca.png
new file mode 100644
index 0000000..d56c3e9
--- /dev/null
+++ b/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_north_ca.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:28319e61200c556c9fccf402abfd336b6eb06331e7cbdd0bd012489c74f50944
+size 5587
diff --git a/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_vert_ca.paa b/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_vert_ca.paa
new file mode 100644
index 0000000..34d55b7
--- /dev/null
+++ b/braf_air2/BRAF_Optics_Air2/A29/data/braf_arrow_vert_ca.paa
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:60bd305866228b30c3d99af290028a7dc933a9800d1dec9b554cbe227842d13e
+size 24934
diff --git a/braf_air2/BRAF_Optics_Air2/A29/model.cfg b/braf_air2/BRAF_Optics_Air2/A29/model.cfg
index d12382d..e2b2002 100644
--- a/braf_air2/BRAF_Optics_Air2/A29/model.cfg
+++ b/braf_air2/BRAF_Optics_Air2/A29/model.cfg
@@ -23,21 +23,6 @@ class CfgModels
class Animations
{
};
- };
- class braf_a29_gunner_n
- {
- htMin=0;
- htMax=0;
- afMax=0;
- mfMax=0;
- mFact=0;
- tBody=0;
- skeletonName="braf_A29_Flir";
- sectionsInherit="";
- sections[]={};
- class Animations
- {
- };
};
class braf_a29_gunner_m
{
diff --git a/braf_air2/BRAF_Optics_Air2/BRAF_AirOptics.hpp b/braf_air2/BRAF_Optics_Air2/BRAF_AirOptics.hpp
index a05b7d5..16b5482 100644
--- a/braf_air2/BRAF_Optics_Air2/BRAF_AirOptics.hpp
+++ b/braf_air2/BRAF_Optics_Air2/BRAF_AirOptics.hpp
@@ -1,48 +1,76 @@
+/*
+ Author: Brazilian Armed Forces
+ File: BRAF_AirOptics.hpp
+ Purpose:
+ Define a UI (InGame Optics) do A-29 com elementos vanilla + elementos custom (IDCs 9901..9905)
+ e instala um EventHandler para atualizar os controles em tempo real enquanto a optics estiver ativa.
+
+ Correções lógicas aplicadas (padrão Arma 3):
+ 1) onLoad usa _this (minúsculo), não _This
+ 2) EH 'Draw' entrega CONTROL; chamamos a função passando DISPLAY via ctrlParent
+ 3) onUnload remove o EH, evitando acumular handlers após abrir/fechar optics
+ 4) Caminhos usam barra simples '\' (padrão Arma 3), sem inventar '\\'
+
+ =======================================================================
+ BRAF A-29 STARSAPHIRE - DICIONÁRIO DE IDCs (REFERÊNCIA)
+ =======================================================================
+
+ IDDs
+ 300 - Display do optics A-29 (BRAF_RscOptics_A29)
+
+ Grupos (ControlsGroup)
+ 170 - CA_IGUI_elements_group (grupo principal do optics)
+
+ CUSTOM (BRAF)
+ 9901 - Seta: indicador de elevação (trilho vertical)
+ 9902 - Texto: valor numérico da elevação (ex: -12.3°)
+ 9903 - Seta: indicador de direção (trilho horizontal)
+ 9904 - Texto: valor numérico da direção (ex: -45°)
+ 9905 - Seta: bússola (norte geográfico relativo ao apontamento)
+*/
+
class ScrollBar;
class RscUnitInfo;
-class RscControlsGroup
-{
- class VScrollbar;
- class HScrollbar;
- class Controls;
-};
+class RscControlsGroup;
class RscControlsGroupNoScrollbars;
+class CA_HUDRscControlsGroup;
class RscText;
+class RangeText: RscText{};
class RscPicture;
+class RscOpticsText;
+class RscOpticsValue;
+class RscIGProgress;
+
class RscInGameUI
{
- class RscOptics_MBT_01_gunner;
- class BRAF_RscOptics_A29: RscUnitInfo
- {
- idd=300;
- controls[]=
- {
- "CA_IGUI_elements_group"
- };
- class CA_IGUI_elements_group: RscControlsGroup
- {
- idc=170;
- class VScrollbar: VScrollbar
- {
- width=0;
- };
- class HScrollbar: HScrollbar
- {
- height=0;
- };
- x="0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
- y="0 * (0.025 * SafezoneH) + (SafezoneY)";
- w="70";
- h="40 * (0.025 * SafezoneH)";
- class controls
- {
- class ValueDistance: RscText
+ class BRAF_RscOptics_A29: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_VehicleToggles"};
+ class VScrollbar;
+ class HScrollbar;
+ onLoad = "[""onLoad"",_this,""RscUnitInfo"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay'); _this call BRAF_fnc_initRSC;";
+ onUnload = "[""onUnload"",_this,""RscUnitInfo"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')";
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar { width = 0; };
+ class HScrollbar: HScrollbar { height = 0; };
+
+ x = "-4 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH)/2))";
+ y = "000 * (0.02500 * SafezoneH) + (SafezoneY)";
+ w = "100 * (0.01875 * SafezoneH)";
+ h = "080 * (0.02500 * SafezoneH)";
+
+ class controls
+ {
+ class ValueDistance: RscText
{
style=1;
sizeEx="0.038*SafezoneH";
shadow=0;
font="EtelkaMonospacePro";
- idc=198; //idc=183;
+ idc=198;
text="245678";
colorText[] = {0,0,0,1};
colorBackground[] = {0,0,0,0};
@@ -66,7 +94,7 @@ class RscInGameUI
x="10 * (0.01875 * SafezoneH)";
y="34 * (0.025 * SafezoneH)";
};
- class Textweapon: ValueGrid
+ class TextGrid: ValueGrid
{
style=0;
idc=1801;
@@ -144,6 +172,22 @@ class RscInGameUI
y="35.75 * (0.025 * SafezoneH)";
w="6.5 * (0.01875 * SafezoneH)";
};
+
+ class braf_fov_mode: RscText
+ {
+ idc = 154;
+ text = "WFOV";
+ sizeEx="0.03*SafezoneH";
+ style=0;
+ shadow=0;
+ font="EtelkaMonospacePro";
+ x = "0 * (0.01875 * SafezoneH)";
+ y="3 * (0.025 * SafezoneH)";
+ w="5 * (0.01875 * SafezoneH)";
+ h="1.2 * (0.025 * SafezoneH)";
+ colorText[] = {0,0,0,1};
+ };
+
class CA_VisionMode: RscText
{
idc=152;
@@ -151,18 +195,19 @@ class RscInGameUI
style=0;
shadow=0;
font="EtelkaMonospacePro";
- text="DAY";
- x="1 * (0.01875 * SafezoneH)";
+ text="DTV";
+ x="4.5 * (0.01875 * SafezoneH)";
y="3 * (0.025 * SafezoneH)";
w="5 * (0.01875 * SafezoneH)";
h="1.2 * (0.025 * SafezoneH)";
colorText[] = {0,0,0,1};
};
+
class CA_FlirMode: CA_VisionMode
{
idc=153;
text="BHOT";
- x="5 * (0.01875 * SafezoneH)";
+ x="7 * (0.01875 * SafezoneH)";
};
class CA_Laser: RscText
{
@@ -173,73 +218,251 @@ class RscInGameUI
shadow=0;
font="EtelkaMonospacePro";
text="\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa";
- x="31.1 * (0.01875 * SafezoneH)";
- y="12.85 * (0.025 * SafezoneH)";
+ x="33 * (0.01875 * SafezoneH)";
+ y="8 * (0.025 * SafezoneH)";
w="3.5 * (0.01875 * SafezoneH)";
h="1.5 * (0.025 * SafezoneH)";
};
- //class braf_tri_vert: RscPicture
- //{
- // idc = 1806;
- // text = "rhsusf\addons\rhsusf_optics\data\tex\tri_vert.paa";
- // x = "12.9 * (0.01875 * SafezoneH)";
- // y = "14.65 * (0.025 * SafezoneH)";
- // w = "0.7 * (0.01875 * SafezoneH)";
- // h = "1.1 * (0.025 * SafezoneH)";
- //};
- //class braf_tri_horiz: braf_tri_vert
- //{
- // idc = 1807;
- // text = "rhsusf\addons\rhsusf_optics\data\tex\tri_hor.paa";
- // x = "26.1 * (0.01875 * SafezoneH)";
- // y = "26.8 * (0.025 * SafezoneH)";
- // w = "1.1 * (0.01875 * SafezoneH)";
- // h = "0.7 * (0.025 * SafezoneH)";
- //};
- };
- };
+
+ class braf_arrow_vert: RscPicture
+ {
+ idc = 1901;
+ text = "\braf\braf_air2\braf_optics_air2\A29\data\braf_arrow_vert_ca.paa";
+ shadow = 0;
+ sizeEx = "0.03*SafezoneH";
+ x = "-0.5 * (0.01875 * SafezoneH)";
+ y = "16.6 * (0.025 * SafezoneH)";
+ w = "2.1 * (0.01875 * SafezoneH)";
+ h = "2.1 * (0.025 * SafezoneH)";
+ color[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0};
+ };
+ class braf_elev_value: RscText
+ {
+ idc = 1902;
+ style = 0;
+ shadow = 0;
+ sizeEx = "0.03*SafezoneH";
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0};
+ x = "1 * (0.01875 * SafezoneH)";
+ y = "16.6 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "2.1 * (0.025 * SafezoneH)";
+ text = "-120";
+ };
+
+ class braf_arrow_horiz: braf_arrow_vert
+ {
+ idc = 1903;
+ text = "\braf\braf_air2\braf_optics_air2\A29\data\braf_arrow_hor_ca.paa";
+ x = "-12 * (0.01875 * SafezoneH)";
+ y = "30 * (0.025 * SafezoneH)";
+ };
+ class braf_dir_value: braf_elev_value
+ {
+ idc = 1904;
+ style = 2;
+ x = "-12.95 * (0.01875 * SafezoneH)";
+ y = "20 * (0.025 * SafezoneH)";
+ w = "4.0 * (0.01875 * SafezoneH)";
+ h = "2.1 * (0.025 * SafezoneH)";
+ text = "-180";
+ };
+
+ class braf_compass_arrow: RscPicture
+ {
+ idc = 1905;
+ style = 144;
+ shadow = 0;
+ text = "\braf\braf_air2\braf_optics_air2\A29\data\braf_arrow_north_ca.paa";
+ x = "57.5 * (0.01875 * SafezoneH)";
+ y = "25.5 * (0.02500 * SafezoneH)";
+ w = "10 * (0.01875 * SafezoneH)";
+ h = "10 * (0.02500 * SafezoneH)";
+ };
+ class braf_compass_n: braf_elev_value
+ {
+ idc = -1;
+ style = 2;
+ sizeEx = "0.03*SafezoneH";
+ x = "60 * (0.01875 * SafezoneH)";
+ y = "28 * (0.02500 * SafezoneH)";
+ w = "05 * (0.01875 * SafezoneH)";
+ h = "05 * (0.02500 * SafezoneH)";
+ text = "N";
+ };
+
+ class BRAF_AirData_Label_HDG: RscText
+ {
+ idc = 1906;
+ style = 2;
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.02*SafezoneH";
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0};
+ text = "HDG:";
+ x="60 * (0.01875 * SafezoneH)";
+ y = "4.4 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+
+ class BRAF_AirData_Value_HDG: BRAF_AirData_Label_HDG
+ {
+ idc = 1907;
+ style = 1;
+ text = "000";
+ x = "60 * (0.01875 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ };
+
+ class BRAF_AirData_Label_IAS: BRAF_AirData_Label_HDG
+ {
+ idc = 1908;
+ text = "IAS:";
+ y = "5 * (0.025 * SafezoneH)";
+ };
+
+ class BRAF_AirData_Value_IAS: BRAF_AirData_Value_HDG
+ {
+ idc = 1909;
+ text = "000";
+ y = "5 * (0.025 * SafezoneH)";
+ };
+
+ class BRAF_AirData_Label_GS: BRAF_AirData_Label_HDG
+ {
+ idc = 1910;
+ text = "GS:";
+ y = "5.6 * (0.025 * SafezoneH)";
+ };
+
+ class BRAF_AirData_Value_GS: BRAF_AirData_Value_HDG
+ {
+ idc = 1911;
+ text = "000";
+ y = "5.6 * (0.025 * SafezoneH)";
+ };
+
+ class BRAF_AirData_Label_RALT: BRAF_AirData_Label_HDG
+ {
+ idc = 1912;
+ text = "RALT:";
+ y = "6.2 * (0.025 * SafezoneH)";
+ };
+
+ class BRAF_AirData_Value_RALT: BRAF_AirData_Value_HDG
+ {
+ idc = 1913;
+ text = "0000";
+ y = "6.2 * (0.025 * SafezoneH)";
+ };
+
+ class BRAF_AirData_Label_BARO: BRAF_AirData_Label_HDG
+ {
+ idc = 1914;
+ text = "BARO:";
+ y = "6.8 * (0.025 * SafezoneH)";
+ };
+
+ class BRAF_AirData_Value_BARO: BRAF_AirData_Value_HDG
+ {
+ idc = 1915;
+ text = "0000";
+ y = "6.8 * (0.025 * SafezoneH)";
+ };
+
+ class BRAF_AirData_Label_ROLL: BRAF_AirData_Label_HDG
+ {
+ idc = 1916;
+ text = "ROLL:";
+ y = "7.4 * (0.025 * SafezoneH)";
+ };
+
+ class BRAF_AirData_Value_ROLL: BRAF_AirData_Value_HDG
+ {
+ idc = 1917;
+ text = "0";
+ y = "7.4 * (0.025 * SafezoneH)";
+ };
+
+ class BRAF_AirData_Label_PTCH: BRAF_AirData_Label_HDG
+ {
+ idc = 1918;
+ text = "PTCH:";
+ y = "8 * (0.025 * SafezoneH)";
+ };
+
+ class BRAF_AirData_Value_PTCH: BRAF_AirData_Value_HDG
+ {
+ idc = 1919;
+ text = "0";
+ y = "8 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class BRAF_RscOptics_Fennec: BRAF_RscOptics_A29
+ {
};
-};
+};
class BRAF_A29_Gunner_Optics: Optics_Armored
{
- class Wide: RCWSOptics
+ class Wide: RCWSOptics
+ {
+ initFov = 0.5236;
+ minFov = 0.5236;
+ maxFov = 0.5236;
+ opticsDisplayName = "WFOV";
+ visionMode[] = { "Normal", "TI" };
+ thermalMode[] = { 0, 1 };
+ thermalNoise[] = { 0.5, 1.25, 2.5, 0.75, 1, 0, 0, 0.95 };
+
+ gunnerOpticsModel = "\braf\braf_air2\braf_optics_air2\A29\braf_a29_gunner_w.p3d";
+ gunnerOpticsEffect[] = {};
+
+ directionStabilized = 1;
+ };
+
+ class Medium: Wide
+ {
+ opticsDisplayName = "MFOV";
+ gunnerOpticsModel = "\braf\braf_air2\braf_optics_air2\A29\braf_a29_gunner_m.p3d";
+ initFov = 0.0593;
+ minFov = 0.0593;
+ maxFov = 0.0593;
+ };
+
+ class Narrow: Wide
+ {
+ opticsDisplayName = "NFOV";
+ gunnerOpticsModel = "\braf\braf_air2\braf_optics_air2\A29\braf_a29_gunner_n.p3d";
+ initFov = 0.0140;
+ minFov = 0.0140;
+ maxFov = 0.0140;
+ };
+ class Narrower: Narrow
{
- initFov=0.4;
- minFov=0.4;
- maxFov=0.4;
- visionMode[]=
- {
- "Normal",
- "TI"
- };
- thermalMode[]={0,1};
- thermalNoise[]=
- {
- 0.5, //intensity,
- 1.25, //sharpness,
- 2.5, //grainSize,
- 0.75, //intensityX0,
- 1, //intensityX1,
- 0, //monochromatic,
- 0, //static,
- 0.95 //blurCoef
- };
- gunnerOpticsModel="\braf\braf_air2\BRAF_Optics_Air2\A29\braf_a29_gunner_w.p3d";
- gunnerOpticsEffect[]={};
- directionStabilized=1;
+ opticsDisplayName = "NFOV 2X";
+ initFov = 0.0070;
+ minFov = 0.0070;
+ maxFov = 0.0070;
};
- class Medium: Wide
+ class UltraNarrow: Narrow
{
- gunnerOpticsModel="\braf\braf_air2\BRAF_Optics_Air2\A29\braf_a29_gunner_m.p3d";
- initFov=0.07;
- minFov=0.07;
- maxFov=0.07;
+ opticsDisplayName = "NFOV 4X";
+ initFov = 0.0035;
+ minFov = 0.0035;
+ maxFov = 0.0035;
};
- class Narrow: Wide
- {
- gunnerOpticsModel="\braf\braf_air2\BRAF_Optics_Air2\A29\braf_a29_gunner_n.p3d";
- initFov=0.014;
- minFov=0.014;
- maxFov=0.014;
- };
-};
\ No newline at end of file
+};
+class BRAF_Fennec_Gunner_Optics: BRAF_A29_Gunner_Optics
+{
+ class Wide;
+ class Medium;
+ class Narrow;
+ class Narrower;
+ class UltraNarrow;
+};
diff --git a/braf_air2/BRAF_Optics_Air2/BRAF_AirOptics_bk.hpp b/braf_air2/BRAF_Optics_Air2/BRAF_AirOptics_bk.hpp
new file mode 100644
index 0000000..f88a5e9
--- /dev/null
+++ b/braf_air2/BRAF_Optics_Air2/BRAF_AirOptics_bk.hpp
@@ -0,0 +1,315 @@
+/*
+ Author: Brazilian Armed Forces
+ File: BRAF_AirOptics.hpp
+ Purpose:
+ Define a UI (InGame Optics) do A-29 com elementos vanilla + elementos custom (IDCs 9901..9905)
+ e instala um EventHandler para atualizar os controles em tempo real enquanto a optics estiver ativa.
+
+ Correções lógicas aplicadas (padrão Arma 3):
+ 1) onLoad usa _this (minúsculo), não _This
+ 2) EH 'Draw' entrega CONTROL; chamamos a função passando DISPLAY via ctrlParent
+ 3) onUnload remove o EH, evitando acumular handlers após abrir/fechar optics
+ 4) Caminhos usam barra simples '\' (padrão Arma 3), sem inventar '\\'
+
+ =======================================================================
+ BRAF A-29 STARSAPHIRE - DICIONÁRIO DE IDCs (REFERÊNCIA)
+ =======================================================================
+
+ IDDs
+ 300 - Display do optics A-29 (BRAF_RscOptics_A29)
+
+ Grupos (ControlsGroup)
+ 170 - CA_IGUI_elements_group (grupo principal do optics)
+
+ CUSTOM (BRAF)
+ 9901 - Seta: indicador de elevação (trilho vertical)
+ 9902 - Texto: valor numérico da elevação (ex: -12.3°)
+ 9903 - Seta: indicador de direção (trilho horizontal)
+ 9904 - Texto: valor numérico da direção (ex: -45°)
+ 9905 - Seta: bússola (norte geográfico relativo ao apontamento)
+*/
+
+class ScrollBar;
+class RscUnitInfo;
+class RscControlsGroup;
+class RscControlsGroupNoScrollbars;
+class CA_HUDRscControlsGroup;
+class RscText;
+class RangeText: RscText{};
+class RscPicture;
+class RscOpticsText;
+class RscOpticsValue;
+class RscIGProgress;
+
+class RscInGameUI
+{
+ class BRAF_RscOptics_A29: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_VehicleToggles"};
+ class VScrollbar;
+ class HScrollbar;
+ onLoad = "[""onLoad"",_this,""RscUnitInfo"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay'); _this call BRAF_fnc_initRSC;";
+ onUnload = "[""onUnload"",_this,""RscUnitInfo"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')";
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar { width = 0; };
+ class HScrollbar: HScrollbar { height = 0; };
+
+ x = "000 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH)/2))";
+ y = "000 * (0.02500 * SafezoneH) + (SafezoneY)";
+ w = "100 * (0.01875 * SafezoneH)";
+ h = "080 * (0.02500 * SafezoneH)";
+
+ class controls
+ {
+ class ValueDistance: RscText
+ {
+ style=1;
+ sizeEx="0.038*SafezoneH";
+ shadow=0;
+ font="EtelkaMonospacePro";
+ idc=198; //idc=183;
+ text="245678";
+ colorText[] = {0,0,0,1};
+ colorBackground[] = {0,0,0,0};
+ x="45.5 * (0.01875 * SafezoneH)";
+ y="35.75 * (0.025 * SafezoneH)";
+ w="8 * (0.01875 * SafezoneH)";
+ h="1.2 * (0.025 * SafezoneH)";
+ };
+ class TextDistance: ValueDistance
+ {
+ style=0;
+ idc=1800;
+ text="Laser dist:";
+ x="42 * (0.01875 * SafezoneH)";
+ y="35.75 * (0.025 * SafezoneH)";
+ };
+ class ValueGrid: ValueDistance
+ {
+ idc=171;
+ text="245678";
+ x="10 * (0.01875 * SafezoneH)";
+ y="34 * (0.025 * SafezoneH)";
+ };
+ class Textweapon: ValueGrid
+ {
+ style=0;
+ idc=1801;
+ text="GPS grid:";
+ x="4.45 * (0.01875 * SafezoneH)";
+ y="34 * (0.025 * SafezoneH)";
+ };
+ class ValueWeapon: ValueDistance
+ {
+ idc=172;
+ text="245678";
+ x="10 * (0.01875 * SafezoneH)";
+ y="35.75 * (0.025 * SafezoneH)";
+ };
+ class TextTarget: ValueGrid
+ {
+ style=0;
+ idc=1802;
+ text="Target grid:";
+ x="4.45 * (0.01875 * SafezoneH)";
+ y="35.75 * (0.025 * SafezoneH)";
+ };
+ class TextElev: ValueGrid
+ {
+ style=0;
+ idc=1803;
+ text="Elev:";
+ x="32 * (0.01875 * SafezoneH)";
+ y="35.75 * (0.025 * SafezoneH)";
+ };
+ class ValueElev: ValueDistance
+ {
+ idc=175;
+ text="245";
+ x="32 * (0.01875 * SafezoneH)";
+ y="35.75 * (0.025 * SafezoneH)";
+ };
+ class TextAz: ValueGrid
+ {
+ style=0;
+ idc=1804;
+ text="Az:";
+ x="24.5 * (0.01875 * SafezoneH)";
+ y="35.75 * (0.025 * SafezoneH)";
+ };
+ class ValueAz: ValueDistance
+ {
+ idc=156;
+ text="245";
+ x="23 * (0.01875 * SafezoneH)";
+ y="35.75 * (0.025 * SafezoneH)";
+ };
+ class TextAlt: ValueGrid
+ {
+ style=0;
+ idc=1805;
+ text="Alt:";
+ x="24.5 * (0.01875 * SafezoneH)";
+ y="34 * (0.025 * SafezoneH)";
+ };
+ class ValueAlt: ValueDistance
+ {
+ idc=189;
+ text="245678";
+ x="24 * (0.01875 * SafezoneH)";
+ y="34 * (0.025 * SafezoneH)";
+ };
+ class CA_Time: ValueGrid
+ {
+ idc=190;
+ style=0;
+ shadow=0;
+ text="XX:XX:xx";
+ x="54 * (0.01875 * SafezoneH)";
+ y="35.75 * (0.025 * SafezoneH)";
+ w="6.5 * (0.01875 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc=152;
+ sizeEx="0.03*SafezoneH";
+ style=0;
+ shadow=0;
+ font="EtelkaMonospacePro";
+ text="DTV";
+ x="1 * (0.01875 * SafezoneH)";
+ y="3 * (0.025 * SafezoneH)";
+ w="5 * (0.01875 * SafezoneH)";
+ h="1.2 * (0.025 * SafezoneH)";
+ colorText[] = {0,0,0,1};
+ };
+ class CA_FlirMode: CA_VisionMode
+ {
+ idc=153;
+ text="BHOT";
+ x="5 * (0.01875 * SafezoneH)";
+ };
+ class CA_Laser: RscText
+ {
+ idc=158;
+ style="0x30 + 0x800";
+ sizeEx="0.038*SafezoneH";
+ colorText[]={0.70599997,0.074500002,0.0196,1};
+ shadow=0;
+ font="EtelkaMonospacePro";
+ text="\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa";
+ x="33 * (0.01875 * SafezoneH)";
+ y="8 * (0.025 * SafezoneH)";
+ w="3.5 * (0.01875 * SafezoneH)";
+ h="1.5 * (0.025 * SafezoneH)";
+ };
+
+ class braf_arrow_vert: RscPicture
+ {
+ idc = 1901;
+ text = "\braf\braf_air2\braf_optics_air2\A29\data\braf_arrow_vert_ca.paa";
+ shadow = 2;
+ sizeEx = "0.06*SafezoneH";
+ x = "0 * (0.01875 * SafezoneH)";
+ y = "16.6 * (0.025 * SafezoneH)";
+ w = "4.2 * (0.01875 * SafezoneH)";
+ h = "4.2 * (0.025 * SafezoneH)";
+ color[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0};
+ };
+ class braf_arrow_horiz: braf_arrow_vert
+ {
+ idc = 1903;
+ text = "\braf\braf_air2\braf_optics_air2\A29\data\braf_arrow_hor_ca.paa";
+ x = "24.45 * (0.01875 * SafezoneH)";
+ y = "29 * (0.025 * SafezoneH)";
+ w = "4.2 * (0.01875 * SafezoneH)";
+ };
+
+ class braf_compass_arrow: RscPicture
+ {
+ idc = 1905;
+ style = 144;
+ text = "\braf\braf_air2\braf_optics_air2\A29\data\braf_arrow_north_ca.paa";
+ x = "56 * (0.01875 * SafezoneH)";
+ y = "28 * (0.02500 * SafezoneH)";
+ w = "05 * (0.01875 * SafezoneH)";
+ h = "05 * (0.02500 * SafezoneH)";
+ };
+
+ class braf_elev_value: RscText
+ {
+ idc = 1902;
+ style = 2;
+ shadow = 2;
+ sizeEx = "0.06*SafezoneH";
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0};
+ x = "0 * (0.01875 * SafezoneH)";
+ y = "16.6 * (0.025 * SafezoneH)";
+ w = "4.2 * (0.01875 * SafezoneH)";
+ h = "1.5 * (0.025 * SafezoneH)";
+ text = "-120";
+ };
+
+ class braf_dir_value: braf_elev_value
+ {
+ idc = 1904;
+ x = "24.15 * (0.01875 * SafezoneH)";
+ y = "28.45 * (0.025 * SafezoneH)";
+ w = "4.2 * (0.01875 * SafezoneH)";
+ h = "1.5 * (0.025 * SafezoneH)";
+ text = "-180";
+ };
+ class braf_compass_n: braf_elev_value
+ {
+ idc = -1;
+ style = 1;
+ x = "56 * (0.01875 * SafezoneH)";
+ y = "29.5 * (0.02500 * SafezoneH)";
+ w = "05 * (0.01875 * SafezoneH)";
+ h = "2 * (0.02500 * SafezoneH)";
+ text = "N";
+ };
+ };
+ };
+ };
+};
+
+class BRAF_A29_Gunner_Optics: Optics_Armored
+{
+ class Wide: RCWSOptics
+ {
+ initFov = 0.4;
+ minFov = 0.4;
+ maxFov = 0.4;
+
+ visionMode[] = { "Normal", "TI" };
+ thermalMode[] = { 0, 1 };
+ thermalNoise[] = { 0.5, 1.25, 2.5, 0.75, 1, 0, 0, 0.95 };
+
+ gunnerOpticsModel = "\braf\braf_air2\braf_optics_air2\A29\braf_a29_gunner_w.p3d";
+ gunnerOpticsEffect[] = {};
+
+ directionStabilized = 1;
+ };
+
+ class Medium: Wide
+ {
+ gunnerOpticsModel = "\braf\braf_air2\braf_optics_air2\A29\braf_a29_gunner_m.p3d";
+ initFov = 0.07;
+ minFov = 0.07;
+ maxFov = 0.07;
+ };
+
+ class Narrow: Wide
+ {
+ gunnerOpticsModel = "\braf\braf_air2\braf_optics_air2\A29\braf_a29_gunner_n.p3d";
+ initFov = 0.014;
+ minFov = 0.014;
+ maxFov = 0.014;
+ };
+};
diff --git a/braf_air2/braf_Air_Weap2/braf_blg252.p3d b/braf_air2/braf_Air_Weap2/braf_blg252.p3d
index a1df791..3efae7c 100644
--- a/braf_air2/braf_Air_Weap2/braf_blg252.p3d
+++ b/braf_air2/braf_Air_Weap2/braf_blg252.p3d
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5caef510f7b2ce187248f1d3014704c7c511d355e8b5a330ea85b0050accd2a1
-size 765560
+oid sha256:20185c54abbc2fe2cabc5633aae1d083954d33d1562aad8dd99fce35e5908737
+size 787808
diff --git a/braf_air2/braf_Air_Weap2/data/m2_single_1.ogg b/braf_air2/braf_Air_Weap2/data/m2_single_1.ogg
index c524880..05676bb 100644
--- a/braf_air2/braf_Air_Weap2/data/m2_single_1.ogg
+++ b/braf_air2/braf_Air_Weap2/data/m2_single_1.ogg
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5286473ee30518da225e0da709f6ae7a3acdbf3d3140b0666d3784658e9aca68
+oid sha256:ba5aef6f04503f9cc33ea5e38f46bb0aaf6ee786d3aa1aaf1fec10187cf7b596
size 31272
diff --git a/braf_air2/braf_Air_Weap2/data/m2_single_2.ogg b/braf_air2/braf_Air_Weap2/data/m2_single_2.ogg
index d8be745..3251af1 100644
--- a/braf_air2/braf_Air_Weap2/data/m2_single_2.ogg
+++ b/braf_air2/braf_Air_Weap2/data/m2_single_2.ogg
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3b068ce0adc33be4d60dfedf8e781b777fd45ae4ab9d2bc5ed506fcbf3fed683
+oid sha256:e2a1e248ddc2bd2b8f8af476b38364317a357423b69021b64d4bfcc432253072
size 32405
diff --git a/braf_air2/braf_Air_Weap2/data/m2hb.ogg b/braf_air2/braf_Air_Weap2/data/m2hb.ogg
index c8e5941..5bae4ee 100644
--- a/braf_air2/braf_Air_Weap2/data/m2hb.ogg
+++ b/braf_air2/braf_Air_Weap2/data/m2hb.ogg
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ebac7e9b8adc748cca815c806c075cd698301368eee2dba553d3d585d15833c7
+oid sha256:793c14bca23ecccf72d07a27e33110cb5b6e0e9a24bf46b09c61b5459f775750
size 22235
diff --git a/braf_air2/braf_air_anim/braf_ejection_chute.zip b/braf_air2/braf_air_anim/braf_ejection_chute.zip
new file mode 100644
index 0000000..50acaed
--- /dev/null
+++ b/braf_air2/braf_air_anim/braf_ejection_chute.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d94084bb025374c074054b12803701a098f102f54a376d4bcd0417cb10e507fa
+size 78675
diff --git a/braf_air2/braf_air_anim/braf_landing_anim.rtm b/braf_air2/braf_air_anim/braf_landing_anim.rtm
new file mode 100644
index 0000000..f09b31b
--- /dev/null
+++ b/braf_air2/braf_air_anim/braf_landing_anim.rtm
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:44647211fc649b5012eae2443b2791e0ddf36217906550f7f8d83d39177e173e
+size 34356
diff --git a/braf_air2/braf_air_anim/cfgMovesBasic.hpp b/braf_air2/braf_air_anim/cfgMovesBasic.hpp
index 3329713..8bc13ee 100644
--- a/braf_air2/braf_air_anim/cfgMovesBasic.hpp
+++ b/braf_air2/braf_air_anim/cfgMovesBasic.hpp
@@ -5,8 +5,10 @@ class CfgMovesBasic
{
A29_Pilot="A29_Pilot";
A29_Pilot_Dead="A29_Pilot_Dead";
- //A29_Copilot="A29_Copilot";
- //A29_Copilot_Dead="A29_Copilot_Dead";
+ /*
+ braf_ejection_chute_Pilot = "braf_ejection_chute_Pilot";
+ braf_ejection_chute_KIA = "braf_ejection_chute_KIA";
+ */
};
};
@@ -19,8 +21,8 @@ class CfgMovesMaleSdr : CfgMovesBasic
{
actions="DeadActions";
speed=0.5;
- looped="false";
- terminal=true;
+ looped= 0;
+ terminal= 1;
file="braf\braf_air2\Braf_air_anim\a29_pilot_kia.rtm";
connectTo[]={"DeadState", 0.1};
};
@@ -30,19 +32,29 @@ class CfgMovesMaleSdr : CfgMovesBasic
interpolateTo[]={"A29_Pilot_Dead", 1};
};
/*
- class A29_Copilot_Dead: DefaultDie
+ class braf_ejection_chute_KIA: DefaultDie
{
- actions="DeadActions";
- speed=0.5;
- looped="false";
- terminal=true;
- file="braf\braf_air2\Braf_air_anim\a29_copilot_kia.rtm";
+ actions = "DeadActions";
+ file = "\braf\braf_air2\braf_air_anim\braf_ejection_chute_KIA.rtm";
+ speed = 0.5;
+ terminal = 1;
+ soundEnabled = 0;
+ looped = 0;
connectTo[]={"DeadState", 0.1};
};
- class A29_Copilot: Crew
+ class braf_ejection_chute_Pilot: Crew
{
- file="braf\braf_air2\Braf_air_anim\a29_copilot_alive.rtm";
- interpolateTo[]={"A29_Copilot_Dead", 1};
+ file = "\braf\braf_air2\braf_air_anim\braf_ejection_chute_init.rtm";
+ interpolateTo[]={"braf_ejection_chute_KIA", 1};
+ interpolationSpeed = 1;
+ speed = -4;
+ hideWeaponsDriver = 1;
+ hideWeaponsGunner = 1;
+ hideWeaponsCargo = 1;
+ looped = 0;
+ useIdles = 0;
+ leftHandIKCurve[] = {1};
+ rightHandIKCurve[] = {1};
};
*/
};
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_high_in.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_high_in.ogg
new file mode 100644
index 0000000..31d2d09
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_high_in.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:224edc4cf5d9de0a705196697c9ace99f27b847d1aba31522921435d18d53da5
+size 30103
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_high_out.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_high_out.ogg
new file mode 100644
index 0000000..5ce9647
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_high_out.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ff295570b5fc1412dd1df669c456796834700c82709cf52f29cd77487c3b36f0
+size 34421
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_low_in.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_low_in.ogg
new file mode 100644
index 0000000..ea05ba6
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_low_in.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:adaa89a19f518129b5ed5b505574fae7f7c396571ec8c081c8da7766b69e6a1a
+size 29273
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_low_out.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_low_out.ogg
new file mode 100644
index 0000000..22c083e
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_low_out.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:568e0255fd67e6dccdc3cc8b18ab7282a5b3499196705fd4ad0cab9af4b85662
+size 36671
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_shutdown.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_shutdown.ogg
new file mode 100644
index 0000000..5be6084
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_shutdown.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4fe3cb20556e4264816ce2bc704324c3b417552b22316c0a6170da6923e96c0f
+size 85053
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_start.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_start.ogg
new file mode 100644
index 0000000..4a15f58
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/engine_start.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f1d2a0ed3b042f9c056210990139034cfd49fd45b67bd0a403ea0c3a2bac10d2
+size 97570
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/flaps.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/flaps.ogg
new file mode 100644
index 0000000..8d8c09f
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/flaps.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f0c61ab8eada919686b12fc6a65c6aafd0c78bbbea1334703d04b740854b664b
+size 32525
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/forsage_ext.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/forsage_ext.ogg
new file mode 100644
index 0000000..cb1df53
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/forsage_ext.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7996bd4f27847f725cf0c499196b6d5478b8889a6cae29c45e3590dddf0d3e61
+size 34529
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/gear_down.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/gear_down.ogg
new file mode 100644
index 0000000..6489543
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/gear_down.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:682317f458782408c6b0f7ee8ec3a3d74b730d520f2d5fafed6c900a60fbb8f5
+size 113520
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/gear_up.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/gear_up.ogg
new file mode 100644
index 0000000..e23c330
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/gear_up.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8159b9a978e724d8252519d17254e5471a4ed61725fa1945a1392e74e4c1b5f2
+size 150380
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/stall_horn.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/stall_horn.ogg
new file mode 100644
index 0000000..a2e06d6
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/stall_horn.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ede76b54466c60061f7bf097687abf5603320356c2b9a03e1d2aa7e546fdefda
+size 27958
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/wind_int.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/wind_int.ogg
new file mode 100644
index 0000000..2858f93
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/wind_int.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d6f6e81ff7c01276bbe8a31b183039927491ba8348fa63b64c0c2bd521b0f13f
+size 37667
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/wind_out.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/wind_out.ogg
new file mode 100644
index 0000000..7004177
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/wind_out.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a380626061d37a9d9866bd16c0f1ce5762ae531da1ed481b91b3fb963b50089b
+size 37951
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/xcarfltn2strt.ogg b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/xcarfltn2strt.ogg
new file mode 100644
index 0000000..5712bbe
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/Sounds/xcarfltn2strt.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e53ffb6884b0c6e6793904b524a1708502b34e90b643dd436893385c79fe5ae3
+size 43333
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/destruct.rvmat b/braf_air2/braf_airplanes/braf_super_tucano/Data/destruct.rvmat
index 3425d12..4035484 100644
--- a/braf_air2/braf_airplanes/braf_super_tucano/Data/destruct.rvmat
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/destruct.rvmat
@@ -84,7 +84,7 @@ class Stage6
};
class Stage7
{
- texture = "a3\data\env_land_co.paa";
+ texture = "a3\data_f\env_land_co.paa";
useWorldEnvMap="true";
uvSource="tex";
class uvTransform
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute.rvmat b/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute.rvmat
new file mode 100644
index 0000000..4532af5
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute.rvmat
@@ -0,0 +1,84 @@
+#define _ARMA_
+
+ambient[] = {1,1,1,1};
+diffuse[] = {1,1,1,1};
+forcedDiffuse[] = {0,0,0,0};
+emmisive[] = {0,0,0,1};
+specular[] = {0.2,0.4,0.3,1};
+specularPower = 8;
+PixelShaderID = "Super";
+VertexShaderID = "Super";
+class Stage1
+{
+ texture = "braf\braf_air2\braf_airplanes\braf_super_tucano\data\ejection_chute_nohq.paa";
+ uvSource = "tex";
+ class uvTransform
+ {
+ aside[] = {1,0,0};
+ up[] = {0,1,0};
+ dir[] = {0,0,0};
+ pos[] = {0,0,0};
+ };
+};
+class Stage2
+{
+ texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
+ uvSource = "tex";
+ class uvTransform
+ {
+ aside[] = {80,0,0};
+ up[] = {0,40,0};
+ dir[] = {0,0,0};
+ pos[] = {0,0,0};
+ };
+};
+class Stage3
+{
+ texture = "#(argb,8,8,3)color(0,0,0,0,MC)";
+ uvSource = "tex";
+ class uvTransform
+ {
+ aside[] = {1,0,0};
+ up[] = {0,1,0};
+ dir[] = {0,0,0};
+ pos[] = {0,0,0};
+ };
+};
+class Stage4
+{
+ texture = "braf\braf_air2\braf_airplanes\braf_super_tucano\data\ejection_chute_as.paa";
+ uvSource = "tex";
+ class uvTransform
+ {
+ aside[] = {1,0,0};
+ up[] = {0,1,0};
+ dir[] = {0,0,0};
+ pos[] = {0,0,0};
+ };
+};
+class Stage5
+{
+ texture = "braf\braf_air2\braf_airplanes\braf_super_tucano\data\ejection_chute_smdi.paa";
+ uvSource = "tex";
+ class uvTransform
+ {
+ aside[] = {1,0,0};
+ up[] = {0,1,0};
+ dir[] = {0,0,0};
+ pos[] = {0,0,0};
+ };
+};
+class Stage6
+{
+ texture = "#(ai,128,128,1)fresnel(1.72,0.01)";
+ uvSource = "none";
+};
+class Stage7
+{
+ texture = "a3\data_f\env_land_co.paa";
+ uvSource = "none";
+};
+class StageTI
+{
+ texture = "a3\data_f\default_ti_ca.paa";
+};
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute_as.paa b/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute_as.paa
new file mode 100644
index 0000000..aff160a
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute_as.paa
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7baf54c637f038c3fd6a74a181e5e9ec6fb122ba6e4e235549b4dc628d65d7bf
+size 4148923
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute_co.paa b/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute_co.paa
new file mode 100644
index 0000000..9be2200
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute_co.paa
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8d90b4389935b6111d92d09c618ed89d3e9ea1003f77598e08e3d7f747a534b5
+size 3231976
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute_nohq.paa b/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute_nohq.paa
new file mode 100644
index 0000000..5b4161e
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute_nohq.paa
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a89c1514066bceaa88f664782a44d631e936a7ff1992aadb389e1d53240a1e83
+size 13803760
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute_smdi.paa b/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute_smdi.paa
new file mode 100644
index 0000000..0afb885
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/Data/ejection_chute_smdi.paa
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7d45ea27f113a71cccedf4a5a5f50a3b7eb1c4311fb27cf6d6f77a9edfd66ab5
+size 2307900
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/a29_base.hpp b/braf_air2/braf_airplanes/braf_super_tucano/a29_base.hpp
index a86eb88..40ad35e 100644
--- a/braf_air2/braf_airplanes/braf_super_tucano/a29_base.hpp
+++ b/braf_air2/braf_airplanes/braf_super_tucano/a29_base.hpp
@@ -285,7 +285,7 @@ class braf_A29_base: Plane_Fighter_03_base_F
armor=2;
explosionShielding=3;
passThrough=0.3;
- radius=0.2L;
+ radius=0.2;
minimalHit=0.05;
};
class HitLCElevator: HitHull
@@ -1014,7 +1014,7 @@ class braf_A29_base: Plane_Fighter_03_base_F
};
class Eventhandlers : Eventhandlers
{
- init="if (local (_this select 0)) then { [(_this select 0), """", [], false] call BIS_fnc_initVehicle; };";
+ init="if (local (_this select 0)) then { [(_this select 0), """", [], false] call BIS_fnc_initVehicle; (_this select 0) setVariable ['BRAF_InterceptionLight', 0]; };";
hit="_this call bis_fnc_planeAiEject";
};
hiddenSelections[]=
@@ -1534,18 +1534,24 @@ class braf_A29B: BRAF_A29_base
condition="this animationPhase 'BackFLIrMotion' > 0.5 and (player in this) and (driver this != player)";
statement="this animate ['BackEICASMotion',1] && this animate ['BackFLIrMotion',0]";
};
- class BRAF_A29B_Eject
+ class BRAF_A29B_Pilot_Eject
{
- priority=0.05;
- shortcut="Eject";
- displayName="Eject";
- condition="(player in this) && {speed this > 1}";
- statement="[this] spawn BRAF_fnc_EjectPilot; [this] call BRAF_fnc_EjectCopilot";
- position="pilotcontrol";
- radius=10;
- onlyforplayer=1;
- showWindow=0;
- hideOnUse=1;
+ priority=0.05;
+ shortcut="Eject";
+ displayName="Eject - Pilot";
+ condition="(driver this == player) && {speed this > 1}";
+ statement="[this] spawn BRAF_fnc_EjectPilot";
+ position="pilotcontrol";
+ radius=10;
+ onlyforplayer=1;
+ showWindow=0;
+ hideOnUse=1;
+ };
+ class BRAF_A29B_Gunner_Eject: BRAF_A29B_Pilot_Eject
+ {
+ displayName="Eject - Gunner";
+ condition="(gunner this == player) && {speed this > 1}";
+ statement="[this] spawn BRAF_fnc_EjectCopilot";
};
};
class NewTurret;
@@ -1627,6 +1633,12 @@ class braf_A29B: BRAF_A29_base
class Narrow: Narrow
{
};
+ class Narrower: Narrower
+ {
+ };
+ class UltraNarrow: UltraNarrow
+ {
+ };
};
class OpticsOut
{
@@ -2105,9 +2117,33 @@ class braf_A29B_90k: BRAF_A29B
"braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
"braf\braf_air2\braf_airplanes\braf_super_tucano\Data\Extras_Joker_co.paa"
};
+ class TextureSources
+ {
+ class FAB_90k
+ {
+ displayName="A-29B Super Tucano Brazilian Air Force Comemorative 90k hours Joker Fighter Squadron";
+ author="BRAF Team";
+ factions[]=
+ {
+ "BRAF_FAB"
+ };
+ textures[]=
+ {
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\camo1_90k_co.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\camo2_co.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\Extras_Joker_co.paa"
+ };
+ };
+ };
textureList[]=
{
- "FAB_100k",1
+ "FAB_90k",1
};
};
class braf_A29B_100k: BRAF_A29B
@@ -2122,7 +2158,7 @@ class braf_A29B_100k: BRAF_A29B
editorPreview="\braf\braf_insignia\editorpreview\air2\BRAF_A29B.jpg";
class Armory
{
- description="A-29B Super Tucano Brazilian Air Force Comemorative 1o0k hours Joker Fighter Squadron";
+ description="A-29B Super Tucano Brazilian Air Force Comemorative 100k hours Joker Fighter Squadron";
};
crew="braf_characters_aviation_air_force_fighter_pilot";
typicalcargo[]={""};
@@ -2138,9 +2174,33 @@ class braf_A29B_100k: BRAF_A29B
"braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
"braf\braf_air2\braf_airplanes\braf_super_tucano\Data\Extras_Joker_co.paa"
};
+ class TextureSources
+ {
+ class FAB_100k
+ {
+ displayName="A-29B Super Tucano Brazilian Air Force Comemorative 100k hours Joker Fighter Squadron";
+ author="BRAF Team";
+ factions[]=
+ {
+ "BRAF_FAB"
+ };
+ textures[]=
+ {
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\camo1_100k_co.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\camo2_co.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\Extras_Joker_co.paa"
+ };
+ };
+ };
textureList[]=
{
- "FAB_90k",1
+ "FAB_100k",1
};
};
class braf_A29B_Jambock: BRAF_A29B
@@ -2175,6 +2235,30 @@ class braf_A29B_Jambock: BRAF_A29B
"braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
"braf\braf_air2\braf_airplanes\braf_super_tucano\Data\Extras_Jambock_co.paa"
};
+ class TextureSources
+ {
+ class FAB_Jambock
+ {
+ displayName="A-29B Super Tucano Brazilian Air Force Comemorative WW2 Jambock Squadron";
+ author="BRAF Team";
+ factions[]=
+ {
+ "BRAF_FAB"
+ };
+ textures[]=
+ {
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\camo1_Jambock_co.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\camo2_co.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\glass_ca.paa",
+ "braf\braf_air2\braf_airplanes\braf_super_tucano\Data\Extras_Jambock_co.paa"
+ };
+ };
+ };
textureList[]=
{
"FAB_Jambock",1
@@ -2316,4 +2400,64 @@ class braf_ejection_seat_A29: braf_ejection_seat_base
count=3;
};
};
-};
\ No newline at end of file
+};
+/*
+class braf_ejection_chute_base: Steerable_Parachute_F
+{
+ driverAction = "braf_ejection_chute_Pilot";
+ Author = "BRAF TEAM";
+ scope = 0;
+ mapSize = 20;
+ animationdrop = "\braf\braf_air2\braf_air_anim\braf_ejection_chute_close.rtm";
+ animationopen = "\braf\braf_air2\braf_air_anim\braf_ejection_chute_open.rtm";
+ airinfluence = "1,0";
+ liftgravity = -14;
+ maxrotationx = 0.1;
+ minrotationx = -0.1;
+ maxrotationz = 0.1;
+ minrotationz = -0.1;
+ maxsensitivityhorizontal = 0.005;
+ maxsensitivityvertical = 0;
+ minliftduration = 4;
+ minliftthrust = -14;
+ maxliftthrust = -12;
+ mingravity = -2;
+ maxgravity = -4;
+ normalgravity = -4;
+ thrustaccel = 0.1;
+ thrustdeccel = 0.1;
+ thrustnormal = 0.1;
+ turnforcescale = 0.022;
+ textSingular = "$STR_A3_nameSound_veh_air_parachute_s";
+ textPlural = "$STR_A3_nameSound_veh_air_parachute_p";
+ radarType = 0;
+ openingTime = 5;
+ hideWeaponsDriver = 0;
+ class ViewPilot
+ {
+ minFov = 0.25;
+ initFov = 0.7;
+ maxFov = 1.1;
+ initAngleX = 0;
+ minAngleX = -65;
+ maxAngleX = 85;
+ initAngleY = 0;
+ minAngleY = -150;
+ maxAngleY = 150;
+ };
+};
+class braf_ejection_chute: braf_ejection_chute_base
+{
+ scope = 1;
+ displayName = "Ejection Seat Canopy";
+ model = "braf\braf_air2\braf_airplanes\braf_super_tucano\braf_ejection_chute.p3d";
+ hiddenSelections[] =
+ {
+ "camo"
+ };
+ hiddenSelectionsTextures[] =
+ {
+ "\braf\braf_air2\braf_airplanes\braf_super_tucano\Dataa\ejection_chute_co.paa"
+ };
+};
+*/
\ No newline at end of file
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/braf_ejection_chute.p3d b/braf_air2/braf_airplanes/braf_super_tucano/braf_ejection_chute.p3d
new file mode 100644
index 0000000..8d901b8
--- /dev/null
+++ b/braf_air2/braf_airplanes/braf_super_tucano/braf_ejection_chute.p3d
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e61649525767adb41e9bcb370f02dd746b19d36120b6fc89616749c3a5884e0b
+size 2369260
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/cfgFlightModel.hpp b/braf_air2/braf_airplanes/braf_super_tucano/cfgFlightModel.hpp
index 177f487..4339ae8 100644
--- a/braf_air2/braf_airplanes/braf_super_tucano/cfgFlightModel.hpp
+++ b/braf_air2/braf_airplanes/braf_super_tucano/cfgFlightModel.hpp
@@ -1,4 +1,3 @@
-// GENERAL
maxSpeed=800;
enginePower=1.193;
landingAOA=__EVAL(3*3.1415/180);
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/model.cfg b/braf_air2/braf_airplanes/braf_super_tucano/model.cfg
index d147def..7e2fda4 100644
--- a/braf_air2/braf_airplanes/braf_super_tucano/model.cfg
+++ b/braf_air2/braf_airplanes/braf_super_tucano/model.cfg
@@ -178,6 +178,12 @@ class CfgSkeletons
"canopy",""
};
};
+ class Skeleton
+ {
+ isDiscrete=0;
+ skeletonInherit="";
+ skeletonBones[]={"body", "", "striska", "", "fl", "", "bl", "", "fm", "", "mb", "", "fr", "", "rb", ""};
+ };
};
class CfgModels
{
@@ -1222,6 +1228,21 @@ class CfgModels
unHideValue=-1;
};
};
+ };
+ class braf_ejection_chute
+ {
+ htMin=0;
+ htMax=0;
+ afMax=0;
+ mfMax=0;
+ mFact=0;
+ tBody=0;
+ skeletonName="Skeleton";
+ sectionsInherit="";
+ sections[]={};
+ class Animations
+ {
+ };
};
class braf_ejection_seat_01: braf_a29_ejection_seat{};
class braf_A29_wreck: braf_A29{};
diff --git a/braf_air2/braf_fnc/braf_constants.h b/braf_air2/braf_fnc/braf_constants.h
new file mode 100644
index 0000000..76a866d
--- /dev/null
+++ b/braf_air2/braf_fnc/braf_constants.h
@@ -0,0 +1,28 @@
+#define IGUI_GROUP 170
+
+// IDCs (seus)
+#define BRAF_ELEV_ARROW 1901
+#define BRAF_ELEV_TXT 1902
+#define BRAF_AZ_ARROW 1903
+#define BRAF_AZ_TXT 1904
+#define BRAF_NORTH_ARROW 1905
+
+// RANGES da régua (fixos do seu pod)
+#define BRAF_MIN_TURN -180
+#define BRAF_MAX_TURN 180
+#define BRAF_MIN_ELEV -120
+#define BRAF_MAX_ELEV 30
+
+// ====== CONSTANTES DO TAPE (mesmo conceito do USAF) ======
+// Azimute (horizontal): X do ponto onde está -180 (início da régua)
+// e distância total até +180 (largura da régua)
+#define BRAF_AZ_BEG (0.035 * safeZoneW)
+#define BRAF_AZ_DIS (0.5375 * safeZoneW)
+#define BRAF_AZ_NUM_OFFSET (-0.009 * safeZoneW)
+#define BRAF_AZ_TXT_Y_OFFSET (-0.5 * 0.025 * safeZoneH)
+
+// Elevação (vertical): Y do ponto onde está +30 (topo) e distância total até -120 (base)
+// (no USAF eles mapeiam para Y)
+#define BRAF_EZ_BEG (0.196289 * safeZoneH)
+#define BRAF_EZ_DIS (0.684570 * safeZoneH)
+#define BRAF_EZ_NUM_OFFSET (0 * safeZoneH)
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/fnc/fn_copilot_eject.sqf b/braf_air2/braf_fnc/fn_copilot_eject.sqf
similarity index 100%
rename from braf_air2/braf_airplanes/braf_super_tucano/Data/fnc/fn_copilot_eject.sqf
rename to braf_air2/braf_fnc/fn_copilot_eject.sqf
diff --git a/braf_air2/braf_fnc/fn_flirControls.sqf b/braf_air2/braf_fnc/fn_flirControls.sqf
new file mode 100644
index 0000000..61ba05d
--- /dev/null
+++ b/braf_air2/braf_fnc/fn_flirControls.sqf
@@ -0,0 +1,290 @@
+/*
+ Author: Brazilian Armed Forces
+ File: fn_flirControls.sqf
+
+ Objetivo:
+ - Atualizar indicadores de AZ (direção) e EZ (elevação) do POD FLIR em relação ao corpo da aeronave
+ - Atualizar indicação de Norte geográfico relativa ao centro do apontamento (compasso)
+
+ Padrão adotado:
+ - Mesmo padrão (carrot/tape):
+ * ler ctrlPosition
+ * calcular posição com BEG/DIS/OFFSET
+ * ctrlSetPosition + ctrlCommit 0
+
+ Observação:
+ - Este script assume que:
+ * os controles estão acessíveis via _display displayCtrl
+ * existem constantes BEG/DIS/OFFSET para a régua horizontal (AZ) e vertical (EZ)
+*/
+
+#define IGUI_GROUP 170
+#define BRAF_ELEV_ARROW 1901
+#define BRAF_ELEV_TXT 1902
+#define BRAF_AZ_ARROW 1903
+#define BRAF_AZ_TXT 1904
+#define BRAF_NORTH_ARROW 1905
+
+#define BRAF_HDG_VALUE 1907
+#define BRAF_IAS_VALUE 1909
+#define BRAF_GS_VALUE 1911
+#define BRAF_RALT_VALUE 1913
+#define BRAF_BARO_VALUE 1915
+#define BRAF_ROLL_VALUE 1917
+#define BRAF_PTCH_VALUE 1919
+
+#define BRAF_MIN_TURN -180
+#define BRAF_MAX_TURN 180
+#define BRAF_MIN_ELEV -120
+#define BRAF_MAX_ELEV 30
+#define BRAF_AZ_BEG (0.04 * safeZoneW)
+#define BRAF_AZ_DIS (0.5375 * safeZoneW)
+#define BRAF_AZ_NUM_OFFSET (0.5 * safeZoneW)
+#define BRAF_AZ_TXT_Y_OFFSET (-1 * 0.025 * safeZoneH)
+#define BRAF_EZ_BEG (0.215 * safeZoneH)
+#define BRAF_EZ_DIS (0.52 * safeZoneH)
+#define BRAF_EZ_NUM_OFFSET (0 * safeZoneH)
+disableSerialization;
+
+params ["_display"];
+
+// Segurança: display inválido
+if (isNull _display) exitWith {};
+
+// Segurança: só atualiza quando estiver em optics
+if (cameraView != "GUNNER") exitWith {};
+
+// Veículo base (corpo)
+private _veh = vehicle player;
+if (isNull _veh) exitWith {};
+
+// CORREÇÃO: Validar que os controles customizados existem antes de acessá-los
+// Previne crashes se os IDCs não foram criados corretamente na config
+if (isNull (_display displayCtrl BRAF_ELEV_ARROW)) exitWith {
+ systemChat "[BRAF A-29] ERRO: Controle de seta de elevação (IDC 1901) não encontrado!";
+};
+if (isNull (_display displayCtrl BRAF_AZ_ARROW)) exitWith {
+ systemChat "[BRAF A-29] ERRO: Controle de seta de azimute (IDC 1903) não encontrado!";
+};
+if (isNull (_display displayCtrl BRAF_ELEV_TXT)) exitWith {
+ systemChat "[BRAF A-29] ERRO: Controle de texto de elevação (IDC 1902) não encontrado!";
+};
+if (isNull (_display displayCtrl BRAF_AZ_TXT)) exitWith {
+ systemChat "[BRAF A-29] ERRO: Controle de texto de azimute (IDC 1904) não encontrado!";
+};
+if (isNull (_display displayCtrl BRAF_NORTH_ARROW)) exitWith {
+ systemChat "[BRAF A-29] ERRO: Controle da bússola norte (IDC 1905) não encontrado!";
+};
+if (isNull (_display displayCtrl BRAF_HDG_VALUE)) exitWith {
+ systemChat "[BRAF A-29] ERRO: Controle HDG (IDC 1907) não encontrado!";
+};
+if (isNull (_display displayCtrl BRAF_IAS_VALUE)) exitWith {
+ systemChat "[BRAF A-29] ERRO: Controle IAS (IDC 1909) não encontrado!";
+};
+if (isNull (_display displayCtrl BRAF_GS_VALUE)) exitWith {
+ systemChat "[BRAF A-29] ERRO: Controle GS (IDC 1911) não encontrado!";
+};
+if (isNull (_display displayCtrl BRAF_RALT_VALUE)) exitWith {
+ systemChat "[BRAF A-29] ERRO: Controle RALT (IDC 1913) não encontrado!";
+};
+if (isNull (_display displayCtrl BRAF_BARO_VALUE)) exitWith {
+ systemChat "[BRAF A-29] ERRO: Controle BARO (IDC 1915) não encontrado!";
+};
+if (isNull (_display displayCtrl BRAF_ROLL_VALUE)) exitWith {
+ systemChat "[BRAF A-29] ERRO: Controle ROLL (IDC 1917) não encontrado!";
+};
+if (isNull (_display displayCtrl BRAF_PTCH_VALUE)) exitWith {
+ systemChat "[BRAF A-29] ERRO: Controle PTCH (IDC 1919) não encontrado!";
+};
+// ======================================================================
+// 1) Captura da direção REAL da câmera (mundo) e conversão para o corpo
+// ======================================================================
+
+// Vetor forward real da câmera ativa (mundo)
+private _p0 = positionCameraToWorld [0, 0, 0];
+private _p1 = positionCameraToWorld [0, 0, 1];
+private _vW = _p1 vectorDiff _p0;
+
+private _lenW = vectorMagnitude _vW;
+if (_lenW < 0.0001) exitWith {};
+_vW = _vW vectorMultiply (1/_lenW);
+
+// Direção absoluta (mundo) em RADIANOS para o compasso
+// atan2 retorna radianos: 0 = norte, π/2 = leste, π ou -π = sul, -π/2 = oeste
+private _absDir_rad = (_vW select 0) atan2 (_vW select 1);
+
+// Normalizar para [0, 2π) para ficar positivo
+ if (_absDir_rad < 0) then {
+ _absDir_rad = _absDir_rad + (2 * pi);
+ };
+
+ // Converte vetor para o referencial do veículo (corpo)
+ private _vM = _veh vectorWorldToModel _vW;
+
+ private _lenM = vectorMagnitude _vM;
+ if (_lenM < 0.0001) exitWith {};
+ _vM = _vM vectorMultiply (1/_lenM);
+
+ private _x = _vM select 0;
+ private _y = _vM select 1;
+ private _z = _vM select 2;
+
+ // AZIMUTH (yaw) relativo ao corpo: [-180..+180] em GRAUS
+ private _azimuth = (_x atan2 _y);
+ if (_azimuth > 180) then {
+ _azimuth = _azimuth - 360;
+ };
+ if (_azimuth < -180) then {
+ _azimuth = _azimuth + 360;
+ };
+
+ // ELEVATION (pitch) relativo ao corpo, permitindo < -90 em GRAUS
+ private _h = sqrt (_x*_x + _y*_y);
+ private _signY = if (_y < 0) then {
+ -1
+ } else {
+ 1
+ };
+ private _yPrime = _h * _signY;
+ private _elevation = (_z atan2 _yPrime);
+
+ // Clamp nos limites do POD
+ _azimuth = _azimuth max BRAF_MIN_TURN min BRAF_MAX_TURN; // -180..+180
+ _elevation = _elevation max BRAF_MIN_ELEV min BRAF_MAX_ELEV; // -120..+30
+
+ // ======================================================================
+ // 2) TURRET AZ (Azimute/Direção Horizontal)
+ // ======================================================================
+
+ private _turretAZcarrotCtrlPos = ctrlPosition (_display displayCtrl BRAF_AZ_ARROW);
+ private _turretAZtextCtrlPos = ctrlPosition (_display displayCtrl BRAF_AZ_TXT);
+
+ // X do carrot na régua de -180..+180
+ // CORREÇÃO: Referências de constantes alteradas para BRAF_AZ_BEG e BRAF_AZ_DIS
+ private _azPosX = BRAF_AZ_BEG + (((_azimuth + 180) / 360) * BRAF_AZ_DIS);
+
+ // Atualizar posição da seta horizontal (carrot) - IDC 1903
+ (_display displayCtrl BRAF_AZ_ARROW) ctrlSetPosition [
+ _azPosX,
+ _turretAZcarrotCtrlPos select 1,
+ _turretAZcarrotCtrlPos select 2,
+ _turretAZcarrotCtrlPos select 3
+ ];
+ (_display displayCtrl BRAF_AZ_ARROW) ctrlCommit 0;
+
+ // Atualizar valor numérico do azimute - IDC 1904
+ // O texto usa o mesmo centro X da seta e fica acima dela.
+ (_display displayCtrl BRAF_AZ_TXT) ctrlSetText str (round _azimuth);
+
+ private _azArrowW = _turretAZcarrotCtrlPos select 2;
+ private _azTextW = _turretAZtextCtrlPos select 2;
+
+ (_display displayCtrl BRAF_AZ_TXT) ctrlSetPosition [
+ _azPosX + ((_azArrowW - _azTextW) / 2),
+ (_turretAZcarrotCtrlPos select 1) + BRAF_AZ_TXT_Y_OFFSET,
+ _azTextW,
+ _turretAZtextCtrlPos select 3
+ ];
+ (_display displayCtrl BRAF_AZ_TXT) ctrlCommit 0;
+
+ // ======================================================================
+ // 3) TURRET EZ (Elevação/pitch Vertical)
+ // Régua: +30 (topo) -> -120 (base)
+ // ======================================================================
+
+ private _turretEZcarrotCtrlPos = ctrlPosition (_display displayCtrl BRAF_ELEV_ARROW);
+ private _turretEZtextCtrlPos = ctrlPosition (_display displayCtrl BRAF_ELEV_TXT);
+
+ // tEl: 0 no topo (+30), 1 na base (-120)
+ private _tEl = (BRAF_MAX_ELEV - _elevation) / (BRAF_MAX_ELEV - BRAF_MIN_ELEV);
+ if (_tEl < 0) then {
+ _tEl = 0;
+ };
+ if (_tEl > 1) then {
+ _tEl = 1;
+ };
+
+ // Y da régua
+ // CORREÇÃO: Referências de constantes alteradas para BRAF_EZ_BEG e BRAF_EZ_DIS
+ private _elevPos = BRAF_EZ_BEG + (_tEl * BRAF_EZ_DIS);
+
+ // Atualizar posição da seta vertical (carrot) - IDC 1901
+ (_display displayCtrl BRAF_ELEV_ARROW) ctrlSetPosition [
+ _turretEZcarrotCtrlPos select 0,
+ _elevPos,
+ _turretEZcarrotCtrlPos select 2,
+ _turretEZcarrotCtrlPos select 3
+ ];
+ (_display displayCtrl BRAF_ELEV_ARROW) ctrlCommit 0;
+
+ // Atualizar valor numérico da elevação - IDC 1902
+ (_display displayCtrl BRAF_ELEV_TXT) ctrlSetText str (round _elevation);
+ (_display displayCtrl BRAF_ELEV_TXT) ctrlSetPosition [
+ _turretEZtextCtrlPos select 0,
+ _elevPos + BRAF_EZ_NUM_OFFSET,
+ _turretEZtextCtrlPos select 2,
+ _turretEZtextCtrlPos select 3
+ ];
+ // CORREÇÃO: Referência de constante alterada para BRAF_EZ_NUM_OFFSET
+ (_display displayCtrl BRAF_ELEV_TXT) ctrlCommit 0;
+
+ // ======================================================================
+ // 4) AIRCRAFT DATA - HDG / IAS / GS / RALT / BARO / ROLL / PTCH
+ // ======================================================================
+
+ private _hdg = round (getDir _veh);
+ private _ias = round (speed _veh);
+ private _gs = round ((vectorMagnitude (velocity _veh)) * 3.6);
+ private _ralt = round ((getPosATL _veh) select 2);
+ private _baro = round ((getPosASL _veh) select 2);
+
+ private _pitchBank = _veh call BIS_fnc_getPitchBank;
+ private _ptch = round (_pitchBank select 0);
+ private _roll = round (_pitchBank select 1);
+
+ private _ctrlHDG = _display displayCtrl BRAF_HDG_VALUE;
+ private _ctrlIAS = _display displayCtrl BRAF_IAS_VALUE;
+ private _ctrlGS = _display displayCtrl BRAF_GS_VALUE;
+ private _ctrlRALT = _display displayCtrl BRAF_RALT_VALUE;
+ private _ctrlBARO = _display displayCtrl BRAF_BARO_VALUE;
+ private _ctrlROLL = _display displayCtrl BRAF_ROLL_VALUE;
+ private _ctrlPTCH = _display displayCtrl BRAF_PTCH_VALUE;
+
+ if (!isNull _ctrlHDG) then {
+ _ctrlHDG ctrlSetText format ["%1", _hdg];
+ };
+ if (!isNull _ctrlIAS) then {
+ _ctrlIAS ctrlSetText format ["%1", _ias];
+ };
+ if (!isNull _ctrlGS) then {
+ _ctrlGS ctrlSetText format ["%1", _gs];
+ };
+ if (!isNull _ctrlRALT) then {
+ _ctrlRALT ctrlSetText format ["%1", _ralt];
+ };
+ if (!isNull _ctrlBARO) then {
+ _ctrlBARO ctrlSetText format ["%1", _baro];
+ };
+ if (!isNull _ctrlROLL) then {
+ _ctrlROLL ctrlSetText format ["%1", _roll];
+ };
+ if (!isNull _ctrlPTCH) then {
+ _ctrlPTCH ctrlSetText format ["%1", _ptch];
+ };
+
+ // ======================================================================
+ // 5) COMPASS N (Bússola Norte Geográfico)
+ // ======================================================================
+
+ // CORREÇÃO: Referência de IDC alterada:
+ // COMPASS_N_ARROW → BRAF_NORTH_ARROW (IDC 1905)
+ // Motivo: Alinhar com nomenclatura definida em braf_constants.h
+ //
+ // A fórmula: rotação_seta = -_absDir_rad
+ // Isso faz a seta apontar para o NORTE true em relação ao que a câmera vê:
+ // - Se câmera aponta NORTE: -0° → seta aponta PARA CIMA (norte)
+ // - Se câmera aponta LESTE: -π/2 → seta aponta PARA A ESQUERDA (norte relativo)
+ // - Se câmera aponta SUL: -π → seta aponta PARA BAIXO (norte relativo)
+ // - Se câmera aponta OESTE: -(-π/2) = +π/2 → seta aponta PARA A DIREITA (norte relativo)
+
+ (_display displayCtrl BRAF_NORTH_ARROW) ctrlSetAngle [ -_absDir_rad, 0.5, 0.5 ];
\ No newline at end of file
diff --git a/braf_air2/braf_fnc/fn_initRSC.sqf b/braf_air2/braf_fnc/fn_initRSC.sqf
new file mode 100644
index 0000000..0a8de01
--- /dev/null
+++ b/braf_air2/braf_fnc/fn_initRSC.sqf
@@ -0,0 +1,48 @@
+/*
+ Author: Brazilian Armed Forces
+ File: fn_initRSC.sqf
+
+ Objetivo:
+ - Cria e gerencia o loop EachFrame que chama uma função de atualização BRAF_fnc_flirControls
+
+*/
+
+disableSerialization;
+
+params ["_display"];
+
+// Diagnóstico: Verificar se a função está definida
+if (isNil "BRAF_fnc_flirControls") then {
+ systemChat "[BRAF A-29] AVISO: BRAF_fnc_flirControls não foi carregada!";
+};
+
+uiNamespace setVariable ["BRAF_A29_UI_Display", _display];
+
+if ((uiNamespace getVariable ["BRAF_A29_PFH_eachFrame", -1]) > -1) then {
+ removeMissionEventHandler ["EachFrame", (uiNamespace getVariable "BRAF_A29_PFH_eachFrame")];
+ uiNamespace setVariable ["BRAF_A29_PFH_eachFrame", nil];
+};
+
+private _pfh = addMissionEventHandler ["EachFrame", {
+ if (cameraView != "GUNNER") exitWith {};
+
+ private _display = uiNamespace getVariable ["BRAF_A29_UI_Display", displayNull];
+
+ if (isNull _display) exitWith {
+ removeMissionEventHandler ["EachFrame", (uiNamespace getVariable "BRAF_A29_PFH_eachFrame")];
+ uiNamespace setVariable ["BRAF_A29_PFH_eachFrame", nil];
+ uiNamespace setVariable ["BRAF_A29_UI_Display", nil];
+ };
+
+ private _veh = vehicle player;
+ if (isNull _veh) exitWith {
+ removeMissionEventHandler ["EachFrame", (uiNamespace getVariable "BRAF_A29_PFH_eachFrame")];
+ uiNamespace setVariable ["BRAF_A29_PFH_eachFrame", nil];
+ uiNamespace setVariable ["BRAF_A29_UI_Display", nil];
+ };
+
+ [_display] call BRAF_fnc_flirControls;
+}];
+
+uiNamespace setVariable ["BRAF_A29_PFH_eachFrame", _pfh];
+//systemChat "[BRAF A-29] Sistema FLIR iniciado com sucesso";
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/fnc/fn_pilot_eject.sqf b/braf_air2/braf_fnc/fn_pilot_eject.sqf
similarity index 100%
rename from braf_air2/braf_airplanes/braf_super_tucano/Data/fnc/fn_pilot_eject.sqf
rename to braf_air2/braf_fnc/fn_pilot_eject.sqf
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/fnc/fn_remove_before_flight.sqf b/braf_air2/braf_fnc/fn_remove_before_flight.sqf
similarity index 100%
rename from braf_air2/braf_airplanes/braf_super_tucano/Data/fnc/fn_remove_before_flight.sqf
rename to braf_air2/braf_fnc/fn_remove_before_flight.sqf
diff --git a/braf_air2/braf_airplanes/braf_super_tucano/Data/fnc/fn_smoker.sqf b/braf_air2/braf_fnc/fn_smoker.sqf
similarity index 96%
rename from braf_air2/braf_airplanes/braf_super_tucano/Data/fnc/fn_smoker.sqf
rename to braf_air2/braf_fnc/fn_smoker.sqf
index dabe010..9beed65 100644
--- a/braf_air2/braf_airplanes/braf_super_tucano/Data/fnc/fn_smoker.sqf
+++ b/braf_air2/braf_fnc/fn_smoker.sqf
@@ -27,7 +27,7 @@
Requirments:
- - Compatible aircrafat must have a config definition for all sub-sytems that will be invoked by this function.
+ - Compatible aircraft must have a config definition for all sub-sytems that will be invoked by this function.
1- Aircrfat model must have memory a point called "smoker_spawn" definig the position where to attach smoke generator.
diff --git a/braf_air2/config.cpp b/braf_air2/config.cpp
index 84116b2..84d86f0 100644
--- a/braf_air2/config.cpp
+++ b/braf_air2/config.cpp
@@ -1,11 +1,8 @@
-class CfgPatches
-{
- class BRAF_Air2
- {
+class CfgPatches {
+ class BRAF_Air2 {
author = "BRAF Team";
addonRootClass = "braf";
- requiredAddons[] =
- {
+ requiredAddons[] = {
"A3_Air_F",
"A3_Air_F_Jets",
"A3_Air_F_Jets_Plane_Fighter_04",
@@ -18,77 +15,74 @@ class CfgPatches
"BRAF_Air",
};
requiredVersion = 0.1;
- units[] =
- {
- // Aircrafts
- "BRAF_Gripen",
- "BRAF_A29A",
- "BRAF_A29_EDA",
- "BRAF_A29B",
- "BRAF_A29B_90k",
- "BRAF_A29B_100k",
- "BRAF_A29B_Jambock",
-
- // Wreck_Model
- "BRAF_A29A_wreck_F",
-
- // Canopy
- "BRAF_A29_canopy",
- "BRAF_A29_canopy_EDA",
- "BRAF_A29_canopy_Jambock",
-
- //Ejection_Seats
- "BRAF_ejection_seat_base",
- "BRAF_ejection_seat_A29"
- };
- weapons[] =
- {
- // MG
- "BRAF_M3W_A29",
+ units[] = {
+ // Aircrafts
+ "BRAF_Gripen",
+ "BRAF_A29A",
+ "BRAF_A29_EDA",
+ "BRAF_A29B",
+ "BRAF_A29B_90k",
+ "BRAF_A29B_100k",
+ "BRAF_A29B_Jambock",
- // Master Safe
- "BRAF_master_arm_safe",
-
- // AA Missile
- "BRAF_MAA1A_Launcher_weapon",
+ // Wreck_Model
+ "BRAF_A29A_wreck_F",
- // Rockets
- "BRAF_EQ_LMF_70_19_he_weapon",
- "BRAF_EQ_LMF_70_19_ap_weapon",
- "BRAF_EQ_LMF_70_7_he_weapon",
- "BRAF_EQ_LMF_70_7_ap_weapon",
-
- // Bombs
- "BRAF_EFT_weapon",
- "BRAF_Mk82_weapon",
- "BRAF_M117_weapon",
- "BRAF_GBU12_weapon",
- "BRAF_GBU58_weapon"
- };
+ // Canopy
+ "BRAF_A29_canopy",
+ "BRAF_A29_canopy_EDA",
+ "BRAF_A29_canopy_Jambock",
+
+ // Ejection_Seats
+ "BRAF_ejection_seat_base",
+ "BRAF_ejection_seat_A29"};
+ weapons[] = {
+ // MG
+ "BRAF_M3W_A29",
+
+ // Master Safe
+ "BRAF_master_arm_safe",
+
+ // AA Missile
+ "BRAF_MAA1A_Launcher_weapon",
+
+ // Rockets
+ "BRAF_EQ_LMF_70_19_he_weapon",
+ "BRAF_EQ_LMF_70_19_ap_weapon",
+ "BRAF_EQ_LMF_70_7_he_weapon",
+ "BRAF_EQ_LMF_70_7_ap_weapon",
+
+ // Bombs
+ "BRAF_EFT_weapon",
+ "BRAF_Mk82_weapon",
+ "BRAF_M117_weapon",
+ "BRAF_GBU12_weapon",
+ "BRAF_GBU58_weapon"};
};
};
class CfgFunctions {
class BRAF {
tag = "BRAF";
- class functions
- {
- class EjectCopilot
- {
- file = "braf\braf_air2\braf_airplanes\braf_super_tucano\data\fnc\fn_copilot_eject.sqf";
+ class functions {
+ class EjectCopilot {
+ file = "braf\braf_air2\braf_fnc\fn_copilot_eject.sqf";
};
- class EjectPilot
- {
- file = "braf\braf_air2\braf_airplanes\braf_super_tucano\data\fnc\fn_pilot_eject.sqf";
+ class EjectPilot {
+ file = "braf\braf_air2\braf_fnc\fn_pilot_eject.sqf";
};
- class Smoker
- {
- file = "braf\braf_air2\braf_airplanes\braf_super_tucano\data\fnc\fn_smoker.sqf";
+ class Smoker {
+ file = "braf\braf_air2\braf_fnc\fn_smoker.sqf";
};
- class RemoveBeforeFlight
- {
- file = "braf\braf_air2\braf_airplanes\braf_super_tucano\data\fnc\fn_remove_before_flight.sqf";
- };
+ /*class RemoveBeforeFlight
+ {
+ file = "braf\braf_air2\braf_fnc\fn_remove_before_flight.sqf";
+ };*/
+ };
+ class UI {
+ file = "braf\braf_air2\braf_fnc";
+ class initRSC {};
+ class flirControls {};
};
};
};
@@ -114,99 +108,94 @@ class SensorTemplateIR;
class SensorTemplateVisual;
class SensorTemplateMan;
class SensorTemplateNV;
-class DefaultVehicleSystemsDisplayManagerLeft
-{
- class components;
+class DefaultVehicleSystemsDisplayManagerLeft {
+ class components;
};
-class DefaultVehicleSystemsDisplayManagerRight
-{
- class components;
+class DefaultVehicleSystemsDisplayManagerRight {
+ class components;
};
-class VehicleSystemsTemplateLeftPilot: DefaultVehicleSystemsDisplayManagerLeft
-{
- class components;
+class VehicleSystemsTemplateLeftPilot
+ : DefaultVehicleSystemsDisplayManagerLeft {
+ class components;
};
-class VehicleSystemsTemplateRightPilot: DefaultVehicleSystemsDisplayManagerRight
-{
- class components;
+class VehicleSystemsTemplateRightPilot
+ : DefaultVehicleSystemsDisplayManagerRight {
+ class components;
};
-class VehicleSystemsTemplateLeftDriver: DefaultVehicleSystemsDisplayManagerLeft
-{
- class components;
+class VehicleSystemsTemplateLeftDriver
+ : DefaultVehicleSystemsDisplayManagerLeft {
+ class components;
};
-class VehicleSystemsTemplateRightDriver: DefaultVehicleSystemsDisplayManagerRight
-{
- class components;
+class VehicleSystemsTemplateRightDriver
+ : DefaultVehicleSystemsDisplayManagerRight {
+ class components;
};
-class VehicleSystemsTemplateLeftCommander: DefaultVehicleSystemsDisplayManagerLeft
-{
- class components;
+class VehicleSystemsTemplateLeftCommander
+ : DefaultVehicleSystemsDisplayManagerLeft {
+ class components;
};
-class VehicleSystemsTemplateRightCommander: DefaultVehicleSystemsDisplayManagerRight
-{
- class components;
+class VehicleSystemsTemplateRightCommander
+ : DefaultVehicleSystemsDisplayManagerRight {
+ class components;
};
-class VehicleSystemsTemplateLeftGunner: DefaultVehicleSystemsDisplayManagerLeft
-{
- class components;
+class VehicleSystemsTemplateLeftGunner
+ : DefaultVehicleSystemsDisplayManagerLeft {
+ class components;
};
-class VehicleSystemsTemplateRightGunner: DefaultVehicleSystemsDisplayManagerRight
-{
- class components;
+class VehicleSystemsTemplateRightGunner
+ : DefaultVehicleSystemsDisplayManagerRight {
+ class components;
};
class RCWSOptics;
class Optics_Armored;
-#include "BRAF_Optics_Air2\BRAF_AirOptics.hpp"
#include "braf_air_anim\CfgMovesBasic.hpp"
-class CfgVehicles
-{
- class Air;
- class Plane: Air
- {
- class NewTurret;
- class ViewPilot;
- class HitPoints
- {
- class HitHull;
- };
- };
- class Plane_Base_F: Plane
- {
- class AnimationSources;
- class HitPoints: HitPoints
- {
- class HitHull;
- };
- class Turrets
- {
- class CopilotTurret;
- };
- };
- class Plane_Fighter_03_base_F : Plane_Base_F
- {
- class AnimationSources;
- };
- class Plane_Fighter_04_Base_F : Plane_Base_F {};
- class I_Plane_Fighter_04_F : Plane_Fighter_04_Base_F {};
- class Ejection_Seat_Base_F;
- class Plane_Canopy_Base_F;
+#include "braf_optics_air2\BRAF_AirOptics.hpp"
+class CfgVehicles {
+ class Air;
+ class ParachuteBase;
+ class B_Parachute;
+ class Steerable_Parachute_F;
+ class NonSteerable_Parachute_F;
+ class Plane : Air {
+ class NewTurret;
+ class ViewPilot;
+ class HitPoints {
+ class HitHull;
+ };
+ };
+ class Plane_Base_F : Plane {
+ class AnimationSources;
+ class HitPoints : HitPoints {
+ class HitHull;
+ };
+ class Turrets {
+ class CopilotTurret;
+ };
+ };
+ class Plane_Fighter_03_base_F : Plane_Base_F {
+ class AnimationSources;
+ };
+ class Plane_Fighter_04_Base_F : Plane_Base_F {};
+ class I_Plane_Fighter_04_F : Plane_Fighter_04_Base_F {};
+ class Ejection_Seat_Base_F;
+ class Plane_Canopy_Base_F;
- // Attack and Fighter
- #include "BRAF_airplanes\braf_super_tucano\a29_base.hpp"
- //#include "BRAF_airplanes\braf_gripen\a4_base.hpp"
- //#include "BRAF_airplanes\braf_gripen\amx_base.hpp"
- #include "BRAF_airplanes\braf_gripen\f39_base.hpp"
- //#include "BRAF_airplanes\braf_gripen\f5_base.hpp"
- //#include "BRAF_airplanes\braf_gripen\t27_base.hpp"
+// Attack and Fighter
+#include "BRAF_airplanes\braf_super_tucano\a29_base.hpp"
+// #include "BRAF_airplanes\braf_gripen\a4_base.hpp"
+// #include "BRAF_airplanes\braf_gripen\amx_base.hpp"
+#include "BRAF_airplanes\braf_gripen\f39_base.hpp"
+ // #include "BRAF_airplanes\braf_gripen\f5_base.hpp"
+ // #include "BRAF_airplanes\braf_gripen\t27_base.hpp"
- // Patrol and Transport
- //#include "BRAF_airplanes\braf_gripen\c95_base.hpp"
- //#include "BRAF_airplanes\braf_gripen\c105_base.hpp"
- //#include "BRAF_airplanes\braf_gripen\c130_base.hpp"
- //#include "BRAF_airplanes\braf_gripen\c390_base.hpp"
- //#include "BRAF_airplanes\braf_gripen\c98_base.hpp"
- //#include "BRAF_airplanes\braf_gripen\p95_base.hpp"
- //#include "BRAF_airplanes\braf_gripen\p3m_base.hpp"
+ // Patrol and Transport
+ // #include "BRAF_airplanes\braf_gripen\c95_base.hpp"
+ // #include "BRAF_airplanes\braf_gripen\c105_base.hpp"
+ // #include "BRAF_airplanes\braf_gripen\c130_base.hpp"
+ // #include "BRAF_airplanes\braf_gripen\c390_base.hpp"
+ // #include "BRAF_airplanes\braf_gripen\c98_base.hpp"
+ // #include "BRAF_airplanes\braf_gripen\p95_base.hpp"
+ // #include "BRAF_airplanes\braf_gripen\p3m_base.hpp"
};
#include "BRAF_Air_Weap2\Ammo.hpp"
#include "BRAF_Air_Weap2\Magazines.hpp"
diff --git a/braf_air2/textures.lst b/braf_air2/textures.lst
new file mode 100644
index 0000000..db98c2e
--- /dev/null
+++ b/braf_air2/textures.lst
@@ -0,0 +1,4 @@
+braf_air2\braf_airplanes\braf_super_tucano\data\a29_sms_co.png
+braf_air2\braf_optics_air2\a29\data\braf_a29_reticulo_m_white_ca.png
+braf_air2\braf_optics_air2\a29\data\braf_a29_reticulo_n_white_ca.png
+braf_air2\braf_optics_air2\a29\data\braf_a29_reticulo_w_white_ca.png