From cff68d95f4897d9e8376042824b6be93fe4a4342 Mon Sep 17 00:00:00 2001 From: Arantes83 Date: Wed, 24 Jun 2026 14:43:41 -0300 Subject: [PATCH] feat(air): integrate standalone FLIR optics into Fennec and Caracal SAR --- CHANGELOG.md | 24 ++++ .../Braf_Caracal/Caracal_Base.hpp | 68 +++++++--- .../Braf_Fennec/Fennec_Base.hpp | 123 ++++++++++++------ braf_air/config.cpp | 1 + 4 files changed, 154 insertions(+), 62 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..a543f4c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,24 @@ +# Changelog + +## 2026-06-24 + +### braf_air + +- Adicionada dependência de `BRAF_Optics_Air` em `braf_air/config.cpp`. +- Integrado o FLIR standalone nas duas variantes do Fennec com torreta (`BRAF_Fennec_dynamicLoadout_base` e `BRAF_Fennec_SAR_base`). +- Integrado o FLIR standalone no Caracal SAR pela base `BRAF_Caracal_2`, propagando para as variantes herdadas `BRAF_Caracal_5` e `BRAF_Caracal_8`. +- Padronizados os limites de câmera usados no optics para o mesmo conjunto adotado no A-29 e no Fennec: `minElev=-120`, `maxElev=30`, `initElev=0`, `minTurn=-180`, `maxTurn=180`, `initTurn=0`. +- Substituído o optics vanilla `RscOptics_Heli_Attack_01_gunner` por `BRAF_RscOptics_Air_FLIR`. +- Substituídos os modelos vanilla de optics pelos modelos standalone `StarSaphire` em `WFOV`, `MFOV`, `NFOV`, `NFOV 2X` e `NFOV 4X`. + +### braf_air2 + +- O A-29 deixou de usar o optics como módulo interno e passou a consumir o addon standalone `braf_optics_air`. +- Removidos de `braf_air2` os scripts, funções, assets, `p3d`, `paa`, include de config e referências legadas do optics interno. +- Atualizada a torreta do A-29 para usar `BRAF_RscOptics_Air_FLIR` e os modelos externos de `braf_optics_air`. +- Resultado: `braf_air2` deixou de ser dono do runtime de optics e passou a depender do módulo independente, facilitando o reuso por outras aeronaves. + +### Referências + +- `5df0649` `refactor(air2): move A-29 optics to standalone addon` +- `4da55a1` `fix(optics): keep standalone air FLIR module independent` diff --git a/braf_air/Braf_Helicopters/Braf_Caracal/Caracal_Base.hpp b/braf_air/Braf_Helicopters/Braf_Caracal/Caracal_Base.hpp index cce1d7a..5d6efa1 100644 --- a/braf_air/Braf_Helicopters/Braf_Caracal/Caracal_Base.hpp +++ b/braf_air/Braf_Helicopters/Braf_Caracal/Caracal_Base.hpp @@ -1390,14 +1390,14 @@ class BRAF_Caracal_2: BRAF_Caracal_Base LODTurnedIn=1100; LODTurnedOut=1100; minElev=-120; - maxElev=20; + maxElev=30; initElev=0; minTurn=-180; maxTurn=180; initTurn=0; gunnerName="Crew Chief"; isCopilot=0; - turretInfoType="RscOptics_Heli_Attack_01_gunner"; + turretInfoType="BRAF_RscOptics_Air_FLIR"; weapons[]= { "Laserdesignator_mounted" @@ -1431,40 +1431,66 @@ class BRAF_Caracal_2: BRAF_Caracal_Base { class Wide { - opticsDisplayName="W"; + opticsDisplayName="WFOV"; initAngleX=0; - minAngleX=-30; + minAngleX=-120; maxAngleX=30; initAngleY=0; - minAngleY=-100; - maxAngleY=100; - initFov=0.46599999; - minFov=0.46599999; - maxFov=0.46599999; + minAngleY=-180; + maxAngleY=180; + initFov=0.5236; + minFov=0.5236; + maxFov=0.5236; visionMode[]= { "Normal", - "NVG", "Ti" }; thermalMode[]={0,1}; - gunnerOpticsModel="\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; + thermalNoise[]= + { + 0.5, + 1.25, + 2.5, + 0.75, + 1, + 0, + 0, + 0.95 + }; + gunnerOpticsModel="\braf\braf_optics_air\StarSaphire\braf_StarSaphire_w.p3d"; + gunnerOpticsEffect[]={}; + directionStabilized=1; }; class Medium: Wide { - opticsDisplayName="M"; - initFov=0.093000002; - minFov=0.093000002; - maxFov=0.093000002; - gunnerOpticsModel="\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F"; + opticsDisplayName="MFOV"; + initFov=0.0593; + minFov=0.0593; + maxFov=0.0593; + gunnerOpticsModel="\braf\braf_optics_air\StarSaphire\braf_StarSaphire_m.p3d"; }; class Narrow: Wide { - opticsDisplayName="N"; - gunnerOpticsModel="\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; - initFov=0.028999999; - minFov=0.028999999; - maxFov=0.028999999; + opticsDisplayName="NFOV"; + gunnerOpticsModel="\braf\braf_optics_air\StarSaphire\braf_StarSaphire_n.p3d"; + initFov=0.0140; + minFov=0.0140; + maxFov=0.0140; + }; + class Narrower: Narrow + { + opticsDisplayName="NFOV 2X"; + initFov=0.0070; + minFov=0.0070; + maxFov=0.0070; + }; + class UltraNarrow: Narrow + { + opticsDisplayName="NFOV 4X"; + initFov=0.0035; + minFov=0.0035; + maxFov=0.0035; }; }; class OpticsOut diff --git a/braf_air/Braf_Helicopters/Braf_Fennec/Fennec_Base.hpp b/braf_air/Braf_Helicopters/Braf_Fennec/Fennec_Base.hpp index 9b55221..a09927b 100644 --- a/braf_air/Braf_Helicopters/Braf_Fennec/Fennec_Base.hpp +++ b/braf_air/Braf_Helicopters/Braf_Fennec/Fennec_Base.hpp @@ -1142,7 +1142,7 @@ class BRAF_Fennec_dynamicLoadout_base: BRAF_Fennec_Base initTurn=0; gunnerName="$STR_A3_COPILOT"; isCopilot=1; - turretInfoType="RscOptics_Heli_Attack_01_gunner"; + turretInfoType="BRAF_RscOptics_Air_FLIR"; weapons[]= { "Laserdesignator_mounted" @@ -1178,20 +1178,19 @@ class BRAF_Fennec_dynamicLoadout_base: BRAF_Fennec_Base { class Wide { - opticsDisplayName="W"; + opticsDisplayName="WFOV"; initAngleX=0; - minAngleX=-30; + minAngleX=-120; maxAngleX=30; initAngleY=0; - minAngleY=-100; - maxAngleY=100; - initFov=0.46599999; - minFov=0.46599999; - maxFov=0.46599999; + minAngleY=-180; + maxAngleY=180; + initFov=0.5236; + minFov=0.5236; + maxFov=0.5236; visionMode[]= { "Normal", - "NVG", "Ti" }; thermalMode[]={0,1}; @@ -1206,23 +1205,39 @@ class BRAF_Fennec_dynamicLoadout_base: BRAF_Fennec_Base 0, //static, 0.95 //blurCoef }; - gunnerOpticsModel="\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; + gunnerOpticsModel="\braf\braf_optics_air\StarSaphire\braf_StarSaphire_w.p3d"; + gunnerOpticsEffect[]={}; + directionStabilized=1; }; class Medium: Wide { - opticsDisplayName="M"; - initFov=0.093000002; - minFov=0.093000002; - maxFov=0.093000002; - gunnerOpticsModel="\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F"; + opticsDisplayName="MFOV"; + initFov=0.0593; + minFov=0.0593; + maxFov=0.0593; + gunnerOpticsModel="\braf\braf_optics_air\StarSaphire\braf_StarSaphire_m.p3d"; }; class Narrow: Wide { - opticsDisplayName="N"; - gunnerOpticsModel="\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; - initFov=0.028999999; - minFov=0.028999999; - maxFov=0.028999999; + opticsDisplayName="NFOV"; + gunnerOpticsModel="\braf\braf_optics_air\StarSaphire\braf_StarSaphire_n.p3d"; + initFov=0.0140; + minFov=0.0140; + maxFov=0.0140; + }; + class Narrower: Narrow + { + opticsDisplayName="NFOV 2X"; + initFov=0.0070; + minFov=0.0070; + maxFov=0.0070; + }; + class UltraNarrow: Narrow + { + opticsDisplayName="NFOV 4X"; + initFov=0.0035; + minFov=0.0035; + maxFov=0.0035; }; }; class OpticsOut @@ -1462,7 +1477,7 @@ class BRAF_Fennec_SAR_base: BRAF_Fennec_Base initTurn=0; gunnerName="$STR_A3_COPILOT"; isCopilot=1; - turretInfoType="RscOptics_Heli_Attack_01_gunner"; + turretInfoType="BRAF_RscOptics_Air_FLIR"; weapons[]= { "Laserdesignator_mounted" @@ -1497,40 +1512,66 @@ class BRAF_Fennec_SAR_base: BRAF_Fennec_Base { class Wide { - opticsDisplayName="W"; + opticsDisplayName="WFOV"; initAngleX=0; - minAngleX=-30; + minAngleX=-120; maxAngleX=30; initAngleY=0; - minAngleY=-100; - maxAngleY=100; - initFov=0.46599999; - minFov=0.46599999; - maxFov=0.46599999; + minAngleY=-180; + maxAngleY=180; + initFov=0.5236; + minFov=0.5236; + maxFov=0.5236; visionMode[]= { "Normal", - "NVG", "Ti" }; thermalMode[]={0,1}; - gunnerOpticsModel="\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; + thermalNoise[]= + { + 0.5, + 1.25, + 2.5, + 0.75, + 1, + 0, + 0, + 0.95 + }; + gunnerOpticsModel="\braf\braf_optics_air\StarSaphire\braf_StarSaphire_w.p3d"; + gunnerOpticsEffect[]={}; + directionStabilized=1; }; class Medium: Wide { - opticsDisplayName="M"; - initFov=0.093000002; - minFov=0.093000002; - maxFov=0.093000002; - gunnerOpticsModel="\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F"; + opticsDisplayName="MFOV"; + initFov=0.0593; + minFov=0.0593; + maxFov=0.0593; + gunnerOpticsModel="\braf\braf_optics_air\StarSaphire\braf_StarSaphire_m.p3d"; }; class Narrow: Wide { - opticsDisplayName="N"; - gunnerOpticsModel="\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; - initFov=0.028999999; - minFov=0.028999999; - maxFov=0.028999999; + opticsDisplayName="NFOV"; + gunnerOpticsModel="\braf\braf_optics_air\StarSaphire\braf_StarSaphire_n.p3d"; + initFov=0.0140; + minFov=0.0140; + maxFov=0.0140; + }; + class Narrower: Narrow + { + opticsDisplayName="NFOV 2X"; + initFov=0.0070; + minFov=0.0070; + maxFov=0.0070; + }; + class UltraNarrow: Narrow + { + opticsDisplayName="NFOV 4X"; + initFov=0.0035; + minFov=0.0035; + maxFov=0.0035; }; }; class OpticsOut @@ -2120,4 +2161,4 @@ class BRAF_Fennec_SAR_FAB: BRAF_Fennec_SAR_base { "FAB",1 }; -}; \ No newline at end of file +}; diff --git a/braf_air/config.cpp b/braf_air/config.cpp index 728afbc..d897936 100644 --- a/braf_air/config.cpp +++ b/braf_air/config.cpp @@ -10,6 +10,7 @@ class CfgPatches { "braf_characters_army", "BRAF_Insignia", "BRAF_Soft", + "BRAF_Optics_Air", }; requiredVersion = 0.1; units[] = {