port A2 incendiary grenades

This commit is contained in:
commy2 2016-07-14 00:01:14 +02:00
parent c117a79431
commit 9a93dffc3b
22 changed files with 402 additions and 49 deletions

View File

@ -68,7 +68,7 @@ class CfgAmmo {
timeToLive = 60;
grenadeFireSound[] = {};
grenadeBurningSound[] = {};
aiAmmoUsageFlags = "4 + 2";
aiAmmoUsageFlags = "1 + 2"; // illumination + marking
smokeColor[] = {0,0,0,0};
effectsSmoke = "ACE_HandFlareEffect";
whistleDist = 0;
@ -99,7 +99,7 @@ class CfgAmmo {
timeToLive = 6;
grenadeFireSound[] = {};
grenadeBurningSound[] = {};
aiAmmoUsageFlags = "0";
aiAmmoUsageFlags = "64"; // infantry
smokeColor[] = {0,0,0,0};
effectsSmoke = "ACE_M84FlashbangEffect";
whistleDist = 0;
@ -124,4 +124,26 @@ class CfgAmmo {
soundImpactWoodExt3[] = {"A3\sounds_f\characters\footsteps\wood_run_ext_2",1,1.1,75};
soundImpactWoodExt4[] = {"A3\sounds_f\characters\footsteps\wood_run_ext_2",1,1.15,75};
};
class ACE_G_M14: SmokeShell {
GVAR(incendiary) = 1;
model = QPATHTOF(models\ace_anm14th3_armed.p3d);
hit = 5;
indirectHit = 4;
indirectHitRange = 1.1;
dangerRadiusHit = 50;
suppressionRadiusHit = 18;
deflecting = 20;
explosionTime = 3;
timeToLive = 40;
fuseDistance = 0;
SmokeShellSoundHit1[] = {QPATHTOF(sounds\incen_exp1.ogg),3.1622777,1,500};
SmokeShellSoundHit2[] = {QPATHTOF(sounds\incen_exp2.ogg),3.1622777,1,500};
grenadeFireSound[] = {"SmokeShellSoundHit1",0.5,"SmokeShellSoundHit2",0.5};
grenadeBurningSound[] = {};
aiAmmoUsageFlags = "64 + 1"; // infantry + illumination
effectsSmoke = "ACE_Incendiary";
whistleDist = 0; // no BIS explosion effects
whistleOnFire = 0; // no BIS firing effects
};
};

View File

@ -14,7 +14,7 @@ class CfgMagazines {
author = ECSTRING(common,ACETeam);
scope = 2;
displayname = CSTRING(M127A1_White_Name);
descriptionshort = CSTRING(M127A1_White_Description);
descriptionShort = CSTRING(M127A1_White_Description);
displayNameShort = CSTRING(M127A1_White_NameShort);
model = "\A3\weapons_f\ammo\flare_white";
picture = "\A3\Weapons_F\Data\UI\gear_flare_white_ca.paa";
@ -25,7 +25,7 @@ class CfgMagazines {
author = ECSTRING(common,ACETeam);
scope = 2;
displayname = CSTRING(M127A1_Red_Name);
descriptionshort = CSTRING(M127A1_Red_Description);
descriptionShort = CSTRING(M127A1_Red_Description);
displayNameShort = CSTRING(M127A1_Red_NameShort);
model = "\A3\weapons_f\ammo\flare_red";
picture = "\A3\Weapons_F\Data\UI\gear_flare_red_ca.paa";
@ -36,7 +36,7 @@ class CfgMagazines {
author = ECSTRING(common,ACETeam);
scope = 2;
displayname = CSTRING(M127A1_Green_Name);
descriptionshort = CSTRING(M127A1_Green_Description);
descriptionShort = CSTRING(M127A1_Green_Description);
displayNameShort = CSTRING(M127A1_Green_NameShort);
model = "\A3\weapons_f\ammo\flare_green";
picture = "\A3\Weapons_F\Data\UI\gear_flare_green_ca.paa";
@ -47,7 +47,7 @@ class CfgMagazines {
author = ECSTRING(common,ACETeam);
scope = 2;
displayname = CSTRING(M127A1_Yellow_Name);
descriptionshort = CSTRING(M127A1_Yellow_Description);
descriptionShort = CSTRING(M127A1_Yellow_Description);
displayNameShort = CSTRING(M127A1_Yellow_NameShort);
model = "\A3\weapons_f\ammo\flare_yellow";
picture = "\A3\Weapons_F\Data\UI\gear_flare_yellow_ca.paa";
@ -57,14 +57,26 @@ class CfgMagazines {
class ACE_M84: HandGrenade {
author = ECSTRING(common,ACETeam);
displayname = CSTRING(M84_Name);
descriptionshort = CSTRING(M84_Description);
displayNameShort = "M84";
descriptionShort = CSTRING(M84_Description);
displayNameShort = CSTRING(M84_NameShort);
model = QPATHTOF(models\ACE_m84.p3d);
picture = QPATHTOF(UI\ACE_m84_x_ca.paa);
ammo = "ACE_G_M84";
mass = 4;
};
class SmokeShell;
class ACE_M14: SmokeShell {
author = ECSTRING(common,ACETeam);
displayname = CSTRING(Incendiary_Name);
descriptionShort = CSTRING(Incendiary_Description);
displayNameShort = CSTRING(Incendiary_NameShort);
model = QPATHTOF(models\ace_anm14th3.p3d);
picture = QPATHTOF(UI\ace_anm14th3_x_ca.paa);
ammo = "ACE_G_M14";
mass = 4;
};
class 3Rnd_UGL_FlareGreen_F;
class 6Rnd_GreenSignal_F: 3Rnd_UGL_FlareGreen_F {
author = ECSTRING(common,ACETeam);

View File

@ -35,6 +35,7 @@ class CfgVehicles {
MACRO_ADDITEM(ACE_HandFlare_Green,12);
MACRO_ADDITEM(ACE_HandFlare_Yellow,12);
MACRO_ADDITEM(ACE_M84,12);
MACRO_ADDITEM(ACE_M14,12);
};
};
};

View File

@ -2,7 +2,7 @@
class CfgWeapons {
class GrenadeLauncher;
class Throw: GrenadeLauncher {
muzzles[] += {"ACE_HandFlare_WhiteMuzzle","ACE_HandFlare_RedMuzzle","ACE_HandFlare_GreenMuzzle","ACE_HandFlare_YellowMuzzle","ACE_M84Muzzle"};
muzzles[] += {"ACE_HandFlare_WhiteMuzzle","ACE_HandFlare_RedMuzzle","ACE_HandFlare_GreenMuzzle","ACE_HandFlare_YellowMuzzle","ACE_M84Muzzle","ACE_M14Muzzle"};
class ThrowMuzzle;
class ACE_HandFlare_WhiteMuzzle: ThrowMuzzle {
@ -24,5 +24,9 @@ class CfgWeapons {
class ACE_M84Muzzle: ThrowMuzzle {
magazines[] = {"ACE_M84"};
};
class ACE_M14Muzzle: ThrowMuzzle {
magazines[] = {"ACE_M14"};
};
};
};

View File

@ -6,3 +6,30 @@ class ACE_M84FlashbangEffect {
class ACE_HandFlareEffect {
// empty
};
class ACE_Incendiary {
class Cmeasures1 {
simulation = "particles";
type = "Cmeasures1";
position[] = {0,0,0};
intensity = 1;
interval = 1;
lifeTime = 25;
};
class Cmeasures2 {
simulation = "particles";
type = "Cmeasures2";
position[] = {0,0,0};
intensity = 1;
interval = 1;
lifeTime = 25;
};
class Light1 {
simulation = "light";
type = "CmeasuresLight";
position[] = {0,0,0};
intensity = 1;
interval = 1;
lifeTime = 25;
};
};

Binary file not shown.

View File

@ -2,5 +2,6 @@
PREP(flare);
PREP(flashbangExplosionEH);
PREP(flashbangThrownFuze);
PREP(incendiary);
PREP(nextMode);
PREP(throwGrenade);

View File

@ -10,8 +10,7 @@ GVAR(flashbangPPEffectCC) = ppEffectCreate ["ColorCorrections", 4265];
GVAR(flashbangPPEffectCC) ppEffectForceInNVG true;
// Add keybinds
["ACE3 Weapons", QGVAR(switchGrenadeMode), localize LSTRING(SwitchGrenadeMode),
{
["ACE3 Weapons", QGVAR(switchGrenadeMode), localize LSTRING(SwitchGrenadeMode), {
// Conditions: canInteract
if !([ACE_player, objNull, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Conditions: specific
@ -19,10 +18,7 @@ GVAR(flashbangPPEffectCC) ppEffectForceInNVG true;
// Statement
[] call FUNC(nextMode);
},
{false},
[9, [false, false, false]], false] call CBA_fnc_addKeybind; //8 Key
}, {false}, [9, [false, false, false]], false] call CBA_fnc_addKeybind; //8 Key
// Register fire event handler
["ace_firedPlayer", DFUNC(throwGrenade)] call CBA_fnc_addEventHandler;

View File

@ -4,11 +4,18 @@ class CfgPatches {
class ADDON {
name = COMPONENT_NAME;
units[] = {};
weapons[] = {};
weapons[] = {
"ACE_HandFlare_White",
"ACE_HandFlare_Red",
"ACE_HandFlare_Green",
"ACE_HandFlare_Yellow",
"ACE_M84",
"ACE_M14"
};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author = ECSTRING(common,ACETeam);
authors[] = {"commy2", "KoffeinFlummi"};
authors[] = {"commy2","KoffeinFlummi"};
url = ECSTRING(main,URL);
VERSION_CONFIG;
};

View File

@ -36,4 +36,4 @@ _light setLightDayLight true;
_light lightAttachObject [_projectile, [0,0,0]];
//_light attachTo [_projectile, [0,0,0]];
[{deleteVehicle _this}, _light, _timeToLive, 1] call CBA_fnc_waitAndExecute;
[{deleteVehicle _this}, _light, _timeToLive] call CBA_fnc_waitAndExecute;

View File

@ -0,0 +1,173 @@
/*
* Author: commy2
* Makes incendiary burn.
*
* Arguments:
* 0: The grenade <OBJECT>
* 1: Incendiary lifetime <OBJECT>
*
* Return Value:
* None
*
* Example:
* [_nade, 60] call ace_grenades_fnc_incendiary
*
* Public: No
*/
#include "script_component.hpp"
#define PARTICLE_LIFE_TIME 2
#define PARTICLE_DENSITY 20
#define PARTICLE_SIZE 1
#define PARTICLE_SPEED 1
#define PARTICLE_SMOKE_LIFE_TIME 5
#define PARTICLE_SMOKE_DENSITY 5
#define PARTICLE_SMOKE_SIZE 0.5
#define PARTICLE_SMOKE_SPEED 1
#define PARTICLE_SMOKE_LIFTING 1
#define PARTICLE_SMOKE_WIND_EFFECT 1
#define EFFECT_SIZE 1
#define ORIENTATION 5.4
#define EXPANSION 1
params ["_projectile", "_timeToLive"];
private _position = position _projectile;
// --- fire
private _fire = "#particlesource" createVehicleLocal _position;
_fire setParticleParams [
["\A3\data_f\ParticleEffects\Universal\Universal",16,10,32],
"",
"billboard",
1,
PARTICLE_LIFE_TIME,
[0,0,0],
[0, 0, 0.4 * PARTICLE_SPEED],
0,
0.0565,
0.05,
0.03,
[0.9 * PARTICLE_SIZE, 0],
[
[0.5,0.5,0.5,-0],
[0.5,0.5,0.5,-1],
[0.5,0.5,0.5,-1],
[0.5,0.5,0.5,-1],
[0.5,0.5,0.5,-1],
[0.5,0.5,0.5,0]
],
[1],
0.01,
0.02,
"",
"",
_projectile,
ORIENTATION,
false,
-1,
[[3,3,3,0]]
];
_fire setParticleRandom [PARTICLE_LIFE_TIME / 4, [0.15 * EFFECT_SIZE, 0.15 * EFFECT_SIZE, 0], [0.2,0.2,0], 0.4, 0, [0,0,0,0], 0, 0, 0.2];
_fire setParticleFire [1.2,1.0,0.1];
_fire setDropInterval (1 / PARTICLE_DENSITY);
// --- smoke
private _smoke = "#particlesource" createVehicleLocal _position;
_smoke setParticleParams [
["\A3\data_f\ParticleEffects\Universal\Universal_02",8,0,40,1],
"",
"billboard",
1,
PARTICLE_SMOKE_LIFE_TIME,
[0,0,0],
[0, 0, 2 * PARTICLE_SMOKE_SPEED],
0,
0.05,
0.04 * PARTICLE_SMOKE_LIFTING,
0.05 * PARTICLE_SMOKE_WIND_EFFECT,
[1 * PARTICLE_SMOKE_SIZE + 1, 1.8 * PARTICLE_SMOKE_SIZE + 15],
[
[0.7,0.7,0.7,0.7],
[0.7,0.7,0.7,0.6],
[0.7,0.7,0.7,0.45],
[0.84,0.84,0.84,0.28],
[0.84,0.84,0.84,0.16],
[0.84,0.84,0.84,0.09],
[0.84,0.84,0.84,0.06],
[1,1,1,0.02],
[1,1,1,0]
],
[1,0.55,0.35],
0.1,
0.08 * EXPANSION,
"",
"",
_projectile
];
_smoke setParticleRandom [PARTICLE_SMOKE_LIFE_TIME / 2, [0.5 * EFFECT_SIZE, 0.5 * EFFECT_SIZE, 0.2 * EFFECT_SIZE], [0.3,0.3,0.5], 1, 0, [0,0,0,0.06], 0, 0];
_smoke setDropInterval (1 / PARTICLE_SMOKE_DENSITY);
// --- light
private _light = "#lightpoint" createVehicleLocal (_position vectorAdd [0,0,0.5]);
_light setLightBrightness 1.0;
_light setLightColor [1,0.65,0.4];
_light setLightAmbient [0.15,0.05,0];
_light setLightIntensity (50 + 400 * ((PARTICLE_SIZE + EFFECT_SIZE) / 2));
_light setLightAttenuation [0,0,0,1];
_light setLightDayLight false;
_light lightAttachObject [_projectile, [0,0,0]];
// --- sound
private _sound = objNull;
if (isServer) then {
_sound = createSoundSource ["Sound_Fire", _position, [], 0];
};
[{
{deleteVehicle _x} forEach _this;
}, [_fire, _smoke, _light, _sound], _timeToLive] call CBA_fnc_waitAndExecute;
// --- damage
{
if (local _x) then {
//systemChat format ["burn: %1", _x];
// --- destroy nearby static weapons and ammo boxes
if (_x isKindOf "StaticWeapon" || {_x isKindOf "ReammoBox_F"}) then {
_x setDamage 1;
};
// --- delete nearby ground weapon holders
if (_x isKindOf "WeaponHolder" || {_x isKindOf "WeaponHolderSimulated"}) then {
deleteVehicle _x;
};
// --- inflame fireplace, barrels etc.
_x inflame true;
};
} forEach (_position nearObjects EFFECT_SIZE);
// --- burn car engine
if ("ace_cookoff" call EFUNC(common,isModLoaded)) then {
private _vehicle = _position nearestObject "Car";
if (!local _vehicle || {_vehicle isKindOf "Wheeled_APC_F"}) exitWith {};
private _engineSelection = getText (_vehicle call CBA_fnc_getObjectConfig >> "HitPoints" >> "HitEngine" >> "name");
private _enginePosition = _vehicle modelToWorld (_vehicle selectionPosition _engineSelection);
if (_position distance _enginePosition < EFFECT_SIZE * 2) then {
_vehicle setHit [_engineSelection, 1];
_vehicle call EFUNC(cookoff,engineFire);
};
};

View File

@ -49,7 +49,14 @@ if (getNumber (_config >> QGVAR(flare)) == 1) then {
private _color = getArray (_config >> QGVAR(color));
private _intensity = _color deleteAt 3;
[FUNC(flare), [_projectile, _color, _intensity, _timeToLive], _fuzeTime, 0] call CBA_fnc_waitAndExecute;
[FUNC(flare), [_projectile, _color, _intensity, _timeToLive], _fuzeTime] call CBA_fnc_waitAndExecute;
};
if (getNumber (_config >> QGVAR(incendiary)) == 1) then {
private _fuzeTime = getNumber (_config >> "explosionTime");
private _timeToLive = getNumber (_config >> "timeToLive");
[FUNC(incendiary), [_projectile, _timeToLive], _fuzeTime] call CBA_fnc_waitAndExecute;
};
// handle throw modes

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -85,6 +85,18 @@
<Italian>Granata Stordente M84</Italian>
<Portuguese>M84 granada de atordoamento</Portuguese>
</Key>
<Key ID="STR_ACE_Grenades_M84_NameShort">
<English>M84</English>
<German>M84</German>
<Spanish>M84</Spanish>
<French>M84</French>
<Polish>M84</Polish>
<Czech>M84</Czech>
<Russian>M84</Russian>
<Hungarian>M84</Hungarian>
<Italian>M84</Italian>
<Portuguese>M84</Portuguese>
</Key>
<Key ID="STR_ACE_Grenades_M84_Description">
<English>Also known as flashbang. Causes immediate flash blindness, deafness, tinnitus, and inner ear disturbance.</English>
<German>Verursacht temporäre Blind- und Taubheit.</German>
@ -241,5 +253,18 @@
<Russian>M127A1 (Жёлтые)</Russian>
<Spanish>M127A1 (Amarilla)</Spanish>
</Key>
<Key ID="STR_ACE_Grenades_Incendiary_Name">
<English>AN-M14 Incendiary Grenade</English>
<German>AN-M14 Brandsatz</German>
</Key>
<Key ID="STR_ACE_Grenades_Incendiary_NameShort">
<English>AN-M14</English>
<German>AN-M14</German>
</Key>
<Key ID="STR_ACE_Grenades_Incendiary_Description">
<English>Incendiary grenade used to destroy weapons, ammunition and other equipment.</English>
<German>Brandsatzgranate. Verwendet um Waffen, Munition und andere Ausrüstung zu zerstören.</German>
</Key>
</Package>
</Project>

View File

@ -0,0 +1,85 @@
ambient[] = {1.0,1.0,1.0,1.0};
diffuse[] = {1.0,1.0,1.0,1.0};
forcedDiffuse[] = {0.0,0.0,0.0,0.0};
emmisive[] = {0.0,0.0,0.0,1.0};
specular[] = {0.93,0.93,0.93,1.0};
specularPower = 200;
PixelShaderID = "Super";
VertexShaderID = "Super";
class Stage1 {
texture = "z\ace\addons\grenades\textures\ace_anm14th3_nohq.paa";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage2 {
texture = "a3\weapons_f\data\detailmaps\metal_detail_dt.paa";
uvSource = "tex";
class uvTransform {
aside[] = {6,0,0};
up[] = {0,3,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 uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage4 {
texture = "#(argb,8,8,3)color(1,1,1,1,AS)";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage5 {
texture = "z\ace\addons\grenades\textures\ace_anm14th3_smdi.paa";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage6 {
texture = "#(ai,64,64,1)fresnel(1.29,0.5)";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage7 {
texture = "a3\data_f\env_land_co.paa";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -6,84 +6,77 @@ specular[] = {0.1,0.1,0.1,1.0};
specularPower = 95;
PixelShaderID = "Super";
VertexShaderID = "Super";
class Stage1
{
class Stage1 {
texture = "z\ace\addons\grenades\textures\ace_m84_nohq.paa";
uvSource = "tex";
class uvTransform
{
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage2
{
class Stage2 {
texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
uvSource = "tex";
class uvTransform
{
class uvTransform {
aside[] = {0,9,0};
up[] = {4.5,0,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage3
{
class Stage3 {
texture = "#(argb,8,8,3)color(0.5,0.5,0.5,0,MC)";
uvSource = "tex";
class uvTransform
{
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage4
{
class Stage4 {
texture = "#(argb,8,8,3)color(1,1,1,1,AS)";
uvSource = "tex";
class uvTransform
{
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage5
{
class Stage5 {
texture = "z\ace\addons\grenades\textures\ace_m84_smdi.paa";
uvSource = "tex";
class uvTransform
{
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage6
{
class Stage6 {
texture = "#(ai,16,2,2)fresnel(10.4,8.3)";
uvSource = "tex";
class uvTransform
{
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,1};
pos[] = {0,0,0};
};
};
class Stage7
{
class Stage7 {
texture = "a3\data_f\env_land_co.paa";
uvSource = "tex";
class uvTransform
{
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};