Compare commits

..

4 Commits

Author SHA1 Message Date
rarantes 0bea545612 feat(BRAF NAVAL TURRETS)
Deploy DEV Workshop / deploy-dev-workshop (push) Failing after 3m5s
2026-08-08 22:36:33 -03:00
rarantes 9bd92bd492 fix(braf_air): env_land_co.paa path fixed in damage rvmats
Deploy DEV Workshop / deploy-dev-workshop (push) Failing after 4m32s
2026-08-07 19:12:02 -03:00
valmojr 353b1f215c Merge branch 'main' of https://git.valmo.dev/projectbraf/braf
Deploy DEV Workshop / deploy-dev-workshop (push) Successful in 57s
2026-08-06 19:36:52 -03:00
valmojr a5e660eccd fixed semicolon error on guarani model.cfg 2026-08-06 19:36:50 -03:00
18 changed files with 543 additions and 5 deletions
+3
View File
@@ -18,3 +18,6 @@ docs/superpowers/plans/2026-07-26-a140-geometry-roadway-modularization.md
AGENTS.md
.agents/
libs/
docs/superpowers/specs/2026-08-08-sea-snake-30mm-design.md
docs/superpowers/plans/2026-08-08-seasnake-static-ciws.md
braf_weapons_naval/weapons.md
@@ -75,7 +75,7 @@ class Stage6
};
class Stage7
{
texture="braf\braf_air\braf_helicopters\braf_pantera\data\env_land_co.paa";
texture="a3\data_f\env_land_co.paa";
uvSource="none";
};
class StageTI
@@ -73,7 +73,7 @@ class Stage6
};
class Stage7
{
texture="braf\braf_air\braf_helicopters\braf_pantera\data\env_land_co.paa";
texture="a3\data_f\env_land_co.paa";
uvSource="none";
};
class StageTI
+1 -1
View File
@@ -1152,7 +1152,7 @@ class CfgModels
type="translation";
source="remaxbase";
selection="remaxbase";
axis="remaxTurret_axis"
axis="remaxTurret_axis";
sourceAddress=0;
minPhase=0;
maxPhase=1;
@@ -0,0 +1,55 @@
//class StageTI
//{
// texture="braf\braf_weapons_naval\braf_canons\braf_otomelarasr\data\braf_otomelarasr_ti_ca.paa";
//};
ambient[]={0.75,0.75,0.75,1.0};
diffuse[]={0.75,0.75,0.75,1.0};
forcedDiffuse[]={0.0,0.0,0.0,1.0};
emmisive[]={0.0,0.0,0.0,1.0};
specular[]={0.15,0.15,0.15,1.0};
specularPower=25;
PixelShaderID="Super";
VertexShaderID="Super";
class Stage1
{
texture="braf\braf_weapons_naval\braf_canons\braf_otomelarasr\data\braf_otomelarasr_nohq.paa";
uvSource="tex";
};
class Stage2
{
texture="#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
uvSource="tex";
class uvTransform
{
aside[]={10,0,0};
up[]={0,10,0};
dir[]={0,0,0};
pos[]={0,0,0};
};
};
class Stage3
{
texture="#(argb,8,8,3)color(0,0,0,0,MC)";
uvSource="tex";
};
class Stage4
{
texture="braf\braf_weapons_naval\braf_canons\braf_otomelarasr\data\braf_otomelarasr_as.paa";
uvSource="tex";
};
class Stage5
{
texture="braf\braf_weapons_naval\braf_canons\braf_otomelarasr\data\braf_otomelarasr_smdi.paa";
uvSource="tex";
};
class Stage6
{
texture="#(ai,64,64,1)fresnel(4.7,1.2)";
uvSource="tex";
};
class Stage7
{
texture="a3\data_f\env_land_co.paa";
useWorldEnvMap="true";
uvSource="tex";
};
@@ -0,0 +1,55 @@
//class StageTI
//{
// texture="braf\braf_weapons_naval\braf_ciws\braf_seasnake\data\braf_seasnake_ti_ca.paa";
//};
ambient[]={0.75,0.75,0.75,1.0};
diffuse[]={0.75,0.75,0.75,1.0};
forcedDiffuse[]={0.0,0.0,0.0,1.0};
emmisive[]={0.0,0.0,0.0,1.0};
specular[]={0.15,0.15,0.15,1.0};
specularPower=25;
PixelShaderID="Super";
VertexShaderID="Super";
class Stage1
{
texture="braf\braf_weapons_naval\braf_ciws\braf_seasnake\data\braf_seasnake_nohq.paa";
uvSource="tex";
};
class Stage2
{
texture="#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
uvSource="tex";
class uvTransform
{
aside[]={10,0,0};
up[]={0,10,0};
dir[]={0,0,0};
pos[]={0,0,0};
};
};
class Stage3
{
texture="#(argb,8,8,3)color(0,0,0,0,MC)";
uvSource="tex";
};
class Stage4
{
texture="braf\braf_weapons_naval\braf_ciws\braf_seasnake\data\braf_seasnake_as.paa";
uvSource="tex";
};
class Stage5
{
texture="braf\braf_weapons_naval\braf_ciws\braf_seasnake\data\braf_seasnake_smdi.paa";
uvSource="tex";
};
class Stage6
{
texture="#(ai,64,64,1)fresnel(4.7,1.2)";
uvSource="tex";
};
class Stage7
{
texture="a3\data_f\env_land_co.paa";
useWorldEnvMap="true";
uvSource="tex";
};
@@ -0,0 +1,58 @@
class CfgSkeletons
{
class braf_seasnake_skeleton
{
isDiscrete = 1;
skeletonInherit = "";
skeletonBones[] =
{
"mainturret", "",
"maingun", "mainturret"
};
};
};
class CfgModels
{
class braf_seasnake
{
htMin = 0;
htMax = 0;
afMax = 0;
mfMax = 0;
mFact = 0;
tBody = 0;
skeletonName = "braf_seasnake_skeleton";
sectionsInherit = "";
sections[] = {};
class Animations
{
class MainTurret
{
type = "rotationY";
source = "mainTurret";
selection = "mainturret";
axis = "mainturret_axis";
animPeriod = 0;
minValue = "rad -170";
maxValue = "rad +170";
angle0 = "rad -170";
angle1 = "rad +170";
};
class MainGun
{
type = "rotationX";
source = "mainGun";
selection = "maingun";
axis = "maingun_axis";
animPeriod = 0;
minValue = "rad -25";
maxValue = "rad +60";
angle0 = "rad -25";
angle1 = "rad +60";
};
};
};
};
@@ -0,0 +1,63 @@
class braf_seasnake_30mm_static_f: braf_ciws_static_base_f
{
author = "BRAF TEAM";
scope = 2;
scopeCurator = 2;
displayName = "Sea Snake 30 mm CIWS";
side = 2;
faction = "BRAF Navy";
crew = "B_UAV_AI";
typicalCargo[] = {"B_UAV_AI"};
model = "\braf\braf_weapons_naval\braf_ciws\braf_seasnake\braf_seasnake.p3d";
laserScanner = 1;
threat[] = {0.3,0.3,1.0};
cost = 150000;
accuracy = 0.12;
armor = 80;
armorStructural = 2;
damageResistance = 0.004;
damageEffect = "AirDestructionEffects";
class Turrets: Turrets
{
class MainTurret: MainTurret
{
minElev = -25;
maxElev = 60;
minTurn = -170;
maxTurn = 170;
initElev = 0;
initTurn = 0;
maxHorizontalRotSpeed = 1.333333;
maxVerticalRotSpeed = 1.333333;
stabilizedInAxes = 3;
soundServo[] = {"A3\Sounds_F\vehicles\armor\noises\servo_best",1.4125376,1,40};
weapons[] = {"braf_weapon_seasnake_30mm"};
magazines[] =
{
"braf_mag_seasnake_30mm_tp_t",
"braf_mag_seasnake_30mm_ketf",
"braf_mag_seasnake_30mm_ketf_impact"
};
};
};
class AnimationSources
{
class Revolving
{
source = "revolving";
weapon = "braf_weapon_seasnake_30mm";
};
};
class SimpleObject
{
eden = 1;
animate[] = {{"mainturret",0},{"maingun",0}};
hide[] = {"zasleh"};
verticalOffset = 0;
verticalOffsetWorld = 0;
init = "''";
};
};
+279 -2
View File
@@ -11,10 +11,30 @@ class CfgPatches
"A3_Data_F",
"A3_Data_F_ParticleEffects"
};
units[] = {};
units[] =
{
"braf_seasnake_30mm_static_f"
};
weapons[] =
{
"braf_weapon_am39_asm"
"braf_weapon_am39_asm",
"braf_weapon_seasnake_30mm"
};
magazines[] =
{
"braf_mag_am39_1rnd",
"braf_mag_am39_pylon_1rnd",
"braf_mag_seasnake_30mm_tp_t",
"braf_mag_seasnake_30mm_ketf",
"braf_mag_seasnake_30mm_ketf_impact"
};
ammo[] =
{
"braf_ammo_am39_asm",
"braf_ammo_seasnake_30mm_tp_t",
"braf_ammo_seasnake_30mm_ketf",
"braf_ammo_seasnake_30mm_ketf_sub",
"braf_ammo_seasnake_30mm_ketf_impact"
};
};
};
@@ -44,6 +64,8 @@ class braf_asm_engineeffects
class CfgAmmo
{
class ammo_Missile_CruiseBase;
class B_30mm_MP;
class B_30mm_APFSDS;
class braf_ammo_asm_cruise_base: ammo_Missile_CruiseBase
{
scope = 0;
@@ -63,11 +85,62 @@ class CfgAmmo
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";
};
class braf_ammo_seasnake_30mm_tp_t: B_30mm_MP
{
scope = 2;
displayName = "30x173 mm TP-T";
author = "BRAF TEAM";
typicalSpeed = 1065;
hit = 0;
indirectHit = 0;
indirectHitRange = 0;
explosive = 0;
};
class braf_ammo_seasnake_30mm_ketf_sub: B_30mm_APFSDS
{
scope = 1;
displayName = "KETF tungsten subprojectile";
author = "BRAF TEAM";
typicalSpeed = 1065;
hit = 5;
caliber = 0.20;
indirectHit = 0;
indirectHitRange = 0;
explosive = 0;
};
class braf_ammo_seasnake_30mm_ketf: B_30mm_MP
{
scope = 2;
displayName = "30x173 mm KETF / ABM";
author = "BRAF TEAM";
submunitionAmmo = "braf_ammo_seasnake_30mm_ketf_sub";
submunitionConeType[] = {"poissondisc", 162};
triggerTime = 0.12;
timeToLive = 8.2;
hit = 0;
indirectHit = 0;
indirectHitRange = 0;
explosive = 0;
};
class braf_ammo_seasnake_30mm_ketf_impact: B_30mm_APFSDS
{
scope = 2;
displayName = "30x173 mm KETF / impact mode";
author = "BRAF TEAM";
typicalSpeed = 1065;
hit = 70;
caliber = 1.25;
indirectHit = 0;
indirectHitRange = 0;
explosive = 0;
};
};
class CfgMagazines
{
class 8Rnd_LG_scalpel;
class PylonMissile_1Rnd_LG_scalpel;
class 140Rnd_30mm_MP_shells;
class 60Rnd_30mm_APFSDS_shells;
class braf_mag_am39_1rnd: 8Rnd_LG_scalpel
{
scope = 2;
@@ -90,11 +163,38 @@ class CfgMagazines
hardpoints[] = {"BRAF_AM39_PYLON"};
ejectSpeed[] = {0,0,0};
};
class braf_mag_seasnake_30mm_tp_t: 140Rnd_30mm_MP_shells
{
scope = 2;
displayName = "Sea Snake 30 - 30x173 TP-T";
author = "BRAF TEAM";
ammo = "braf_ammo_seasnake_30mm_tp_t";
initSpeed = 1065;
tracersEvery = 1;
};
class braf_mag_seasnake_30mm_ketf: 140Rnd_30mm_MP_shells
{
scope = 2;
displayName = "Sea Snake 30 - 30x173 KETF / ABM";
author = "BRAF TEAM";
ammo = "braf_ammo_seasnake_30mm_ketf";
initSpeed = 1065;
};
class braf_mag_seasnake_30mm_ketf_impact: 60Rnd_30mm_APFSDS_shells
{
scope = 2;
displayName = "Sea Snake 30 - KETF impact mode";
author = "BRAF TEAM";
ammo = "braf_ammo_seasnake_30mm_ketf_impact";
initSpeed = 1065;
};
};
class CfgWeapons
{
class missiles_SCALPEL;
class RocketPods;
class autocannon_30mm;
class autocannon_Base_F;
class braf_weapon_asm_air_base: missiles_SCALPEL
{
scope = 0;
@@ -141,4 +241,181 @@ class CfgWeapons
"braf_mag_am39_pylon_1rnd"
};
};
class braf_weapon_seasnake_30mm: autocannon_30mm
{
scope = 2;
displayName = "Rheinmetall Sea Snake 30 / SeaVision";
author = "BRAF TEAM";
muzzles[] = {"HE"};
magazines[] =
{
"braf_mag_seasnake_30mm_tp_t",
"braf_mag_seasnake_30mm_ketf",
"braf_mag_seasnake_30mm_ketf_impact"
};
reloadTime = 0.0545455;
class HE: autocannon_Base_F
{
magazines[] =
{
"braf_mag_seasnake_30mm_tp_t",
"braf_mag_seasnake_30mm_ketf",
"braf_mag_seasnake_30mm_ketf_impact"
};
reloadTime = 0.0545455;
class player: player
{
reloadTime = 0.0545455;
};
};
};
};
class SensorTemplateIR;
class SensorTemplateVisual;
class SensorTemplateDataLink;
class LandVehicle;
class StaticWeapon: LandVehicle
{
class Turrets;
class HitPoints;
};
class StaticMGWeapon: StaticWeapon
{
class Turrets: Turrets
{
class MainTurret;
};
class Components;
};
class CfgVehicles
{
class braf_ciws_static_base_f: StaticMGWeapon
{
author = "BRAF TEAM";
scope = 0;
scopeCurator = 0;
vehicleClass = "Autonomous";
hasDriver = 0;
hasGunner = 1;
isUav = 1;
getInRadius = 0;
unitInfoType = "RscUnitInfoTank";
canFloat = 0;
animated = 1;
enableGPS = 1;
irScanRangeMin = 500;
irScanRangeMax = 4000;
irScanToEyeFactor = 2;
laserScanner = 1;
showAllTargets = 4;
visualTarget = 1;
visualTargetSize = 1.2;
irTarget = 1;
irTargetSize = 0.5;
reportRemoteTargets = 1;
receiveRemoteTargets = 1;
reportOwnPosition = 1;
lockDetectionSystem = 0;
incomingMissileDetectionSystem = 16;
uavCameraGunnerPos = "pos_gunner_view";
uavCameraGunnerDir = "pos_gunner_view_dir";
memoryPointGun = "pos_barrel_end";
class Components: Components
{
class SensorsManagerComponent
{
class Components
{
class IRSensorComponent: SensorTemplateIR
{
class AirTarget
{
minRange = 500;
maxRange = 4000;
objectDistanceLimitCoef = -1;
viewDistanceLimitCoef = 1;
};
class GroundTarget
{
minRange = 500;
maxRange = 3500;
objectDistanceLimitCoef = 1;
viewDistanceLimitCoef = 1;
};
typeRecognitionDistance = 3500;
maxTrackableSpeed = 600;
angleRangeHorizontal = 60;
angleRangeVertical = 40;
animDirection = "mainGun";
aimDown = -0.5;
};
class VisualSensorComponent: SensorTemplateVisual
{
class AirTarget
{
minRange = 500;
maxRange = 4000;
objectDistanceLimitCoef = -1;
viewDistanceLimitCoef = 1;
};
class GroundTarget
{
minRange = 500;
maxRange = 3500;
objectDistanceLimitCoef = 1;
viewDistanceLimitCoef = 1;
};
typeRecognitionDistance = 3500;
maxTrackableSpeed = 600;
angleRangeHorizontal = 360;
angleRangeVertical = 95;
animDirection = "mainGun";
aimDown = -0.5;
};
class DataLinkSensorComponent: SensorTemplateDataLink{};
};
};
};
class Turrets: Turrets
{
class MainTurret: MainTurret
{
hasGunner = 1;
primary = 1;
primaryGunner = 1;
startEngine = 0;
enableManualFire = 1;
forceHideGunner = 1;
gunnerForceOptics = 1;
gunnerOutForceOptics = 1;
viewGunnerInExternal = 0;
outGunnerMayFire = 1;
inGunnerMayFire = 1;
castGunnerShadow = 0;
showAllTargets = 2;
body = "MainTurret";
gun = "MainGun";
animationSourceBody = "MainTurret";
animationSourceGun = "MainGun";
gunbeg = "pos_barrel_end";
gunend = "pos_barrel";
uavCameraGunnerPos = "pos_gunner_view";
uavCameraGunnerDir = "pos_gunner_view_dir";
memoryPointGunnerOptics = "pos_gunner_view";
particlespos = "pos_fx";
particlesdir = "pos_fx_dir";
selectionFireAnim = "zasleh";
gunnerlefthandanimname = "";
gunnerrighthandanimname = "";
optics = 1;
turretinfotype = "RscOptics_APC_Tracked_01_gunner";
gunnerOpticsModel = "\a3\weapons_f\reticle\Optics_Gunner_AAA_01_w_F";
};
};
};
#include "braf_ciws\braf_seasnake\seasnake.hpp"
};