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
|
||||
|
||||
## 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
|
||||
|
||||
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;
|
||||
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",
|
||||
|
||||
Reference in New Issue
Block a user