Compare commits

...

3 Commits

Author SHA1 Message Date
rarantes 6d001e42fe feat(ships): update A-140 configuration
Deploy DEV Workshop / deploy-dev-workshop (push) Failing after 4m21s
2026-08-02 17:31:05 -03:00
rarantes 0791b25e57 feat(naval-weapons): Update the naval weapons changelog. 2026-07-31 22:17:09 -03:00
rarantes 4512f2c67e 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.
2026-07-31 21:52:36 -03:00
7 changed files with 159 additions and 24 deletions
+4
View File
@@ -14,3 +14,7 @@ docs/superpowers/plans/2026-07-19-caracal-mb-efs.md
tests/test_caracal_mb_efs.ps1
lfsconfig
docs/superpowers/plans/2026-07-26-a140-geometry-roadway-modularization.md
.agents/skills/arma3-mod-development/SKILL.md
AGENTS.md
.agents/
libs/
+26
View File
@@ -1,5 +1,31 @@
# Changelog
## 2026-07-31
### Armamentos navais
- A fumaça de exaustão dos mísseis ASM passou a utilizar o efeito visual vanilla CruiseMissile, mantendo sua textura, cores e dimensões características.
- O emissor de fumaça agora usa o ponto de memória fire_beg como origem e o vetor fire_beg → fire_end como direção da emissão, evitando a geração no centro ou abaixo do míssil.
- As funções de efeitos ASM foram reorganizadas na pasta braf_functions, com a função renomeada para fn_ASMEngineSmoke.sqf.
- O efeito BRAF_ASM_EngineEffects e o emissor de fumaça foram movidos para as classes-base ASM, permitindo reutilização por futuros mísseis antinavio.
## 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
BIN
View File
Binary file not shown.
+1 -10
View File
@@ -16,16 +16,6 @@ class CfgPatches
weapons[]={};
};
};
class cfgFactionClasses
{
class BRAF_NAVY
{
displayName="Brazilian Navy";
priority=2;
side=2;
icon="";
};
};
class CfgVehicles
{
class StaticShip;
@@ -34,6 +24,7 @@ class CfgVehicles
model="BRAF\BRAF_SHIPS\BRAF_A140\BRAF_A140.p3d";
displayName="NAM A-140 Atlântico";
destrType=0;
author = "BRAF TEAM";
faction="BRAF_NAVY";
scope=2;
};
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;
};
+40 -8
View File
@@ -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",