diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c57c2c..8b1204c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## 2026-07-30 + +### Armamentos navais + +- O AM39 Exocet foi integrado ao pacote de armamentos navais usando a base de míssil de cruzeiro, com modelo de voo próprio, ignição retardada de 1,5 segundo e animações de estágio de lançamento, cruzeiro e estabilizadores. +- Criadas as definições de munição, magazine, hardpoint e arma do AM39 para emprego aerotransportado. +- Configurada a ejeção do míssil sem velocidade inicial (`initSpeed=0` e `ejectSpeed[]={0,0,0}`), permitindo a queda gravitacional antes da ignição do motor. +- Ajustado o ciclo de efeitos do AM39 para usar o atraso de ignição vanilla: queda gravitacional sem partículas, labareda e emissor contínuo de fumaça branca juntos na ignição por 2 segundos e voo posterior sem efeitos. + +### Aeronaves + +- O AH-15B Super Cougar (Caracal) recebeu dois pylons dinâmicos para o AM39, um em cada bordo, com presets `Empty` e `AM39 Exocet 2x`. +- O pylon direito foi configurado como posição espelhada do pylon esquerdo e o armamento foi vinculado à estação do Weapons Officer. +- Adicionada a estação `BRAF_AM39_Gunner_Turret`, herdada da Crew Chief Turret, sem função de copiloto ou partida do motor, mantendo o emprego do sensor FLIR/laser designator. +- Os proxies dinâmicos do Caracal foram ajustados para o sistema de pylons. +- O modelo do store do AM39 passou a usar `PylonMissile_1x_Bomb_02_F.p3d`, fazendo o proxy desaparecer corretamente do helicóptero após o disparo. + ## 2026-07-19 ### Aeronaves diff --git a/braf_weapons_naval/braf_asm/Exocet/AM39/braf_am39_fly.p3d b/braf_weapons_naval/braf_asm/Exocet/AM39/braf_am39_fly.p3d index 3b62f01..77be8df 100644 --- a/braf_weapons_naval/braf_asm/Exocet/AM39/braf_am39_fly.p3d +++ b/braf_weapons_naval/braf_asm/Exocet/AM39/braf_am39_fly.p3d @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c3bd91b5388c490d8b549441edb78d1d41771079522d908439d2b1f21d74144e -size 2098205 +oid sha256:610b326650f845b9bae6761618acadb2e8f894a428af7530976b0bff1442a6fb +size 2098255 diff --git a/braf_weapons_naval/braf_functions/fn_ASMEngineSmoke.sqf b/braf_weapons_naval/braf_functions/fn_ASMEngineSmoke.sqf new file mode 100644 index 0000000..1a23a74 --- /dev/null +++ b/braf_weapons_naval/braf_functions/fn_ASMEngineSmoke.sqf @@ -0,0 +1,85 @@ +params [ + "_unit", + "_weapon", + "_muzzle", + "_mode", + "_ammo", + "_magazine", + "_projectile" +]; + +private _ammoConfig = configFile >> "CfgAmmo" >> _ammo; +if ( + isNull _projectile || + {!isClass _ammoConfig} || + {getNumber (_ammoConfig >> "braf_asm") != 1} +) exitWith {}; + +[_projectile] spawn +{ + params ["_projectile"]; + + sleep 1.5; + if (isNull _projectile) exitWith {}; + + private _fireBeg = _projectile selectionPosition ["fire_beg", "Memory"]; + private _fireEnd = _projectile selectionPosition ["fire_end", "Memory"]; + private _fireDirectionModel = _fireBeg vectorFromTo _fireEnd; + + if (vectorMagnitude _fireDirectionModel < 0.01) exitWith {}; + + private _fireDirectionWorld = _projectile vectorModelToWorld _fireDirectionModel; + private _smoke = "#particlesource" createVehicleLocal [0, 0, 0]; + if (isNull _smoke) exitWith {}; + + _smoke setParticleParams + [ + ["\A3\data_f\ParticleEffects\Universal\Universal", 16, 12, 8, 0], + "", + "Billboard", + 1, + 0.6, + "fire_beg", + _fireDirectionWorld vectorMultiply 2, + 0, + 0, + 1.2, + 0.5, + [2, 6, 8.8], + [ + [0.5, 0.5, 0.5, 0.1], + [0.6, 0.6, 0.6, 0.06], + [0.7, 0.7, 0.7, 0.04], + [0.8, 0.8, 0.8, 0.005], + [0.9, 0.9, 0.9, 0.003] + ], + [5], + 0.1, + 0.1, + "", + "", + _projectile + ]; + _smoke setParticleRandom + [ + 0.1, + [0.3, 0.3, 0.3], + [0.25, 0.25, 0.25], + 20, + 0.15, + [0, 0, 0, 0], + 0, + 0 + ]; + _smoke setDropInterval 0.003; + _smoke attachTo [_projectile, [0, 0, 0]]; + + private _endTime = time + 2; + waitUntil + { + sleep 0.01; + isNull _projectile || {time >= _endTime} + }; + + deleteVehicle _smoke; +}; diff --git a/braf_weapons_naval/config.cpp b/braf_weapons_naval/config.cpp index 7da0cdd..21a6a3a 100644 --- a/braf_weapons_naval/config.cpp +++ b/braf_weapons_naval/config.cpp @@ -7,7 +7,9 @@ class CfgPatches requiredVersion = 1.82; requiredAddons[] = { - "A3_Weapons_F" + "A3_Weapons_F", + "A3_Data_F", + "A3_Data_F_ParticleEffects" }; units[] = {}; weapons[] = @@ -16,6 +18,29 @@ class CfgPatches }; }; }; +class CfgFunctions +{ + class BRAF + { + class NavalWeapons + { + class ASMEngineSmoke + { + file = "\braf\braf_weapons_naval\braf_functions\fn_ASMEngineSmoke.sqf"; + }; + }; + }; +}; +class BRAF_ASM_EngineEffects +{ + class RocketBackfire1 + { + simulation = "particles"; + type = "PylonBackfire"; + start = "(density interpolate [0.019,0.02,1,0])"; + lifeTime = 2; + }; +}; class CfgAmmo { class ammo_Missile_CruiseBase; @@ -23,7 +48,12 @@ class CfgAmmo { scope = 0; cameraViewAvailable = 1; - initTime = 0.5; + initTime = 1.5; + coefGravity = 1; + braf_asm = 1; + effectsMissileInit = "BRAF_ASM_EngineEffects"; + effectsMissile = "EmptyEffect"; + muzzleEffect = ""; }; class braf_ammo_am39_asm: braf_ammo_asm_cruise_base { @@ -32,9 +62,6 @@ class CfgAmmo author = "BRAF TEAM"; model = "braf\braf_weapons_naval\braf_asm\Exocet\AM39\braf_am39_fly.p3d"; proxyShape = "braf\braf_weapons_naval\braf_asm\Exocet\AM39\braf_am39.p3d"; - effectsMissileInit = "PylonBackEffects"; - effectsMissile = "EmptyEffect"; - muzzleEffect = ""; }; }; class CfgMagazines @@ -56,12 +83,12 @@ class CfgMagazines displayName = "AM39 Exocet Pylon Store"; author = "BRAF TEAM"; count = 1; - initSpeed = 12; + initSpeed = 0; model="\A3\Weapons_F\DynamicLoadout\PylonMissile_1x_Bomb_02_F.p3d"; ammo = "braf_ammo_am39_asm"; pylonWeapon = "braf_weapon_am39_asm"; hardpoints[] = {"BRAF_AM39_PYLON"}; - ejectSpeed[] = {1,0,0}; + ejectSpeed[] = {0,0,0}; }; }; class CfgWeapons @@ -71,6 +98,7 @@ class CfgWeapons class braf_weapon_asm_air_base: missiles_SCALPEL { scope = 0; + author = "BRAF TEAM"; magazines[] = {}; modes[] = {"Cruise"}; class Cruise: RocketPods @@ -97,12 +125,16 @@ class CfgWeapons maxRange = 32000; maxRangeProbab = 0.92; }; + class EventHandlers + { + fired = "_this call BRAF_fnc_ASMEngineSmoke"; + }; }; class braf_weapon_am39_asm: braf_weapon_asm_air_base { scope = 2; displayName = "AM39 Exocet"; - author = "BRAF"; + author = "BRAF TEAM"; magazines[] = { "braf_mag_am39_1rnd",