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