feat(naval-weapons): improve ASM missile exhaust effects
- Use the vanilla CruiseMissile smoke effect. - Position the emitter using the fire_beg and fire_end memory points. - Generalize the function for future ASM missiles.
This commit is contained in:
@@ -1,5 +1,22 @@
|
|||||||
# Changelog
|
# 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
|
## 2026-07-19
|
||||||
|
|
||||||
### Aeronaves
|
### Aeronaves
|
||||||
|
|||||||
Binary file not shown.
@@ -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;
|
||||||
|
};
|
||||||
@@ -7,7 +7,9 @@ class CfgPatches
|
|||||||
requiredVersion = 1.82;
|
requiredVersion = 1.82;
|
||||||
requiredAddons[] =
|
requiredAddons[] =
|
||||||
{
|
{
|
||||||
"A3_Weapons_F"
|
"A3_Weapons_F",
|
||||||
|
"A3_Data_F",
|
||||||
|
"A3_Data_F_ParticleEffects"
|
||||||
};
|
};
|
||||||
units[] = {};
|
units[] = {};
|
||||||
weapons[] =
|
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 CfgAmmo
|
||||||
{
|
{
|
||||||
class ammo_Missile_CruiseBase;
|
class ammo_Missile_CruiseBase;
|
||||||
@@ -23,7 +48,12 @@ class CfgAmmo
|
|||||||
{
|
{
|
||||||
scope = 0;
|
scope = 0;
|
||||||
cameraViewAvailable = 1;
|
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
|
class braf_ammo_am39_asm: braf_ammo_asm_cruise_base
|
||||||
{
|
{
|
||||||
@@ -32,9 +62,6 @@ class CfgAmmo
|
|||||||
author = "BRAF TEAM";
|
author = "BRAF TEAM";
|
||||||
model = "braf\braf_weapons_naval\braf_asm\Exocet\AM39\braf_am39_fly.p3d";
|
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";
|
proxyShape = "braf\braf_weapons_naval\braf_asm\Exocet\AM39\braf_am39.p3d";
|
||||||
effectsMissileInit = "PylonBackEffects";
|
|
||||||
effectsMissile = "EmptyEffect";
|
|
||||||
muzzleEffect = "";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
class CfgMagazines
|
class CfgMagazines
|
||||||
@@ -56,12 +83,12 @@ class CfgMagazines
|
|||||||
displayName = "AM39 Exocet Pylon Store";
|
displayName = "AM39 Exocet Pylon Store";
|
||||||
author = "BRAF TEAM";
|
author = "BRAF TEAM";
|
||||||
count = 1;
|
count = 1;
|
||||||
initSpeed = 12;
|
initSpeed = 0;
|
||||||
model="\A3\Weapons_F\DynamicLoadout\PylonMissile_1x_Bomb_02_F.p3d";
|
model="\A3\Weapons_F\DynamicLoadout\PylonMissile_1x_Bomb_02_F.p3d";
|
||||||
ammo = "braf_ammo_am39_asm";
|
ammo = "braf_ammo_am39_asm";
|
||||||
pylonWeapon = "braf_weapon_am39_asm";
|
pylonWeapon = "braf_weapon_am39_asm";
|
||||||
hardpoints[] = {"BRAF_AM39_PYLON"};
|
hardpoints[] = {"BRAF_AM39_PYLON"};
|
||||||
ejectSpeed[] = {1,0,0};
|
ejectSpeed[] = {0,0,0};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
class CfgWeapons
|
class CfgWeapons
|
||||||
@@ -71,6 +98,7 @@ class CfgWeapons
|
|||||||
class braf_weapon_asm_air_base: missiles_SCALPEL
|
class braf_weapon_asm_air_base: missiles_SCALPEL
|
||||||
{
|
{
|
||||||
scope = 0;
|
scope = 0;
|
||||||
|
author = "BRAF TEAM";
|
||||||
magazines[] = {};
|
magazines[] = {};
|
||||||
modes[] = {"Cruise"};
|
modes[] = {"Cruise"};
|
||||||
class Cruise: RocketPods
|
class Cruise: RocketPods
|
||||||
@@ -97,12 +125,16 @@ class CfgWeapons
|
|||||||
maxRange = 32000;
|
maxRange = 32000;
|
||||||
maxRangeProbab = 0.92;
|
maxRangeProbab = 0.92;
|
||||||
};
|
};
|
||||||
|
class EventHandlers
|
||||||
|
{
|
||||||
|
fired = "_this call BRAF_fnc_ASMEngineSmoke";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
class braf_weapon_am39_asm: braf_weapon_asm_air_base
|
class braf_weapon_am39_asm: braf_weapon_asm_air_base
|
||||||
{
|
{
|
||||||
scope = 2;
|
scope = 2;
|
||||||
displayName = "AM39 Exocet";
|
displayName = "AM39 Exocet";
|
||||||
author = "BRAF";
|
author = "BRAF TEAM";
|
||||||
magazines[] =
|
magazines[] =
|
||||||
{
|
{
|
||||||
"braf_mag_am39_1rnd",
|
"braf_mag_am39_1rnd",
|
||||||
|
|||||||
Reference in New Issue
Block a user