diff --git a/addons/particles/CfgAmmo.hpp b/addons/particles/CfgAmmo.hpp index 68a6ebfda1..6065a0b818 100644 --- a/addons/particles/CfgAmmo.hpp +++ b/addons/particles/CfgAmmo.hpp @@ -4,47 +4,61 @@ class CfgAmmo { // - Smoke hand grenades -------------------------------------------------- class SmokeShell: GrenadeHand { smokeColor[] = {1, 1, 1, 1}; + timeToLive = 90; }; class SmokeShellRed: SmokeShell { - smokeColor[] = {0.9528, 0.0438, 0.0410, 1}; + smokeColor[] = SMOKE_COLOR_RED; + timeToLive = 60; }; class SmokeShellGreen: SmokeShell { - smokeColor[] = {0.0328, 0.1626, 0.1023, 1}; + smokeColor[] = SMOKE_COLOR_GREEN; + timeToLive = 60; }; class SmokeShellYellow: SmokeShell { - smokeColor[] = {0.9610, 0.4505, 0.0109, 1}; + smokeColor[] = SMOKE_COLOR_YELLOW; + timeToLive = 60; }; class SmokeShellPurple: SmokeShell { - smokeColor[] = {0.4622, 0.0578, 0.3154, 1}; + smokeColor[] = SMOKE_COLOR_PURPLE; + timeToLive = 60; }; class SmokeShellBlue: SmokeShell { - smokeColor[] = {0.0355, 0.1863, 1.0000, 1}; + smokeColor[] = SMOKE_COLOR_BLUE; + timeToLive = 60; }; class SmokeShellOrange: SmokeShell { - smokeColor[] = {0.9132, 0.1763, 0.0070, 1}; + smokeColor[] = SMOKE_COLOR_ORANGE; + timeToLive = 60; }; // - 40mm smoke grenades -------------------------------------------------- class G_40mm_Smoke: SmokeShell { smokeColor[] = {1, 1, 1, 1}; + timeToLive = 40; }; class G_40mm_SmokeRed: G_40mm_Smoke { - smokeColor[] = {0.9528, 0.0438, 0.0410, 1}; + smokeColor[] = SMOKE_COLOR_RED; + timeToLive = 40; }; class G_40mm_SmokeGreen: G_40mm_Smoke { - smokeColor[] = {0.0328, 0.1626, 0.1023, 1}; + smokeColor[] = SMOKE_COLOR_GREEN; + timeToLive = 40; }; class G_40mm_SmokeYellow: G_40mm_Smoke { - smokeColor[] = {0.9610, 0.4505, 0.0109, 1}; + smokeColor[] = SMOKE_COLOR_YELLOW; + timeToLive = 40; }; class G_40mm_SmokePurple: G_40mm_Smoke { - smokeColor[] = {0.4622, 0.0578, 0.3154, 1}; + smokeColor[] = SMOKE_COLOR_PURPLE; + timeToLive = 40; }; class G_40mm_SmokeBlue: G_40mm_Smoke { - smokeColor[] = {0.0355, 0.1863, 1.0000, 1}; + smokeColor[] = SMOKE_COLOR_BLUE; + timeToLive = 40; }; class G_40mm_SmokeOrange: G_40mm_Smoke { - smokeColor[] = {0.9132, 0.1763, 0.0070, 1}; + smokeColor[] = SMOKE_COLOR_ORANGE; + timeToLive = 40; }; // - Artillery smoke submunition ------------------------------------------ diff --git a/addons/particles/CfgCloudlets.hpp b/addons/particles/CfgCloudlets.hpp index 769ab3ff14..955acecb95 100644 --- a/addons/particles/CfgCloudlets.hpp +++ b/addons/particles/CfgCloudlets.hpp @@ -1,7 +1,7 @@ class CfgCloudlets { class Default; - // - Surface smoke -------------------------------------------------------- + // - Smoke hand grenades -------------------------------------------------- class ACE_SmokeBaseLarge: Default { colorCoef[] = {"colorR", "colorG", "colorB", "colorA"}; sizeCoef = 1; @@ -29,7 +29,6 @@ class CfgCloudlets { destroyOnWaterSurface = 1; destroyOnWaterSurfaceOffset = -0.6; positionVar[] = {0, 0, 0}; - moveVelocityVar[] = {0.25, 0.25, 0.25}; colorVar[] = {0, 0, 0, 0}; color[] = { {0.5, 0.5, 0.5, 1}, @@ -39,10 +38,11 @@ class CfgCloudlets { {0.5, 0.5, 0.5, 0.1}, {0.5, 0.5, 0.5, 0} }; - size[] = {0.05, 7, 15, 20}; + size[] = {0.05, 4, 12, 16}; sizeVar = 0.5; weight = 1.2777; moveVelocity[] = {0, 0, 0}; + moveVelocityVar[] = {0.25, 0.25, 0.25}; rotationVelocity = 0; rotationVelocityVar = 20; volume = 1; @@ -51,11 +51,23 @@ class CfgCloudlets { beforeDestroyScript = ""; blockAIVisibility = 1; }; + class ACE_SmokeBaseMedium: ACE_SmokeBaseLarge { + size[] = {0.05, 3, 9, 12}; + moveVelocityVar[] = {0.20, 0.20, 0.20}; + }; class ACE_SmokeBaseSmall: ACE_SmokeBaseLarge { - size[] = {0.05, 5, 7.5, 10}; + size[] = {0.05, 2, 6, 8}; + moveVelocityVar[] = {0.15, 0.15, 0.15}; }; - // - Artillery smoke ------------------------------------------------------ + // - 40mm smoke grenades -------------------------------------------------- + class ACE_SmokeBase40mm: ACE_SmokeBaseLarge { + lifeTime = 15; + size[] = {0.05, 2.5, 7.5, 10}; + moveVelocityVar[] = {0.10, 0.10, 0.10}; + }; + + // - Artillery smoke submunition ------------------------------------------ class ACE_SmokeBaseArtilleryLarge: ACE_SmokeBaseLarge { lifeTime = 45; }; @@ -64,62 +76,41 @@ class CfgCloudlets { }; // - Smoke on water surface ----------------------------------------------- - class ACE_SmokeAfterWater: ACE_SmokeBaseLarge { + class ACE_SmokeAfterWaterWhite: ACE_SmokeBaseLarge { interval = 0.05; - size[] = {0.05, 2, 5}; + size[] = {0.05, 2, 6}; sizeVar = 1; lifeTime = 10; color[] = { - {0.5, 0.5, 0.5, 0.07}, + {0.5, 0.5, 0.5, 0.1}, {0.5, 0.5, 0.5, 0} }; moveVelocityVar[] = {0, 0, 0}; colorCoef[] = {1, 1, 1, 1}; }; - class ACE_SmokeAfterWaterRed: ACE_SmokeAfterWater { - colorCoef[] = {0.9528, 0.0438, 0.0410, 1}; + class ACE_SmokeAfterWaterRed: ACE_SmokeAfterWaterWhite { + colorCoef[] = SMOKE_COLOR_RED; }; - class ACE_SmokeAfterWaterGreen: ACE_SmokeAfterWater { - colorCoef[] = {0.0328, 0.1626, 0.1023, 1}; + class ACE_SmokeAfterWaterGreen: ACE_SmokeAfterWaterWhite { + colorCoef[] = SMOKE_COLOR_GREEN; }; - class ACE_SmokeAfterWaterYellow: ACE_SmokeAfterWater { - colorCoef[] = {0.9610, 0.4505, 0.0109, 1}; + class ACE_SmokeAfterWaterYellow: ACE_SmokeAfterWaterWhite { + colorCoef[] = SMOKE_COLOR_YELLOW; }; - class ACE_SmokeAfterWaterPurple: ACE_SmokeAfterWater { - colorCoef[] = {0.4622, 0.0578, 0.3154, 1}; + class ACE_SmokeAfterWaterPurple: ACE_SmokeAfterWaterWhite { + colorCoef[] = SMOKE_COLOR_PURPLE; }; - class ACE_SmokeAfterWaterBlue: ACE_SmokeAfterWater { - colorCoef[] = {0.0355, 0.1863, 1.0000, 1}; + class ACE_SmokeAfterWaterBlue: ACE_SmokeAfterWaterWhite { + colorCoef[] = SMOKE_COLOR_BLUE; }; - class ACE_SmokeAfterWaterOrange: ACE_SmokeAfterWater { - colorCoef[] = {0.9132, 0.1763, 0.0070, 1}; - }; - class SmokeShellWhiteUW; - class SmokeShellWhite2UW: SmokeShellWhiteUW { - postEffects = "ACE_SmokeAfterWater"; - }; - class SmokeShellRedUW; - class SmokeShellRed2UW: SmokeShellRedUW { - postEffects = "ACE_SmokeAfterWaterRed"; - }; - class SmokeShellGreenUW; - class SmokeShellGreen2UW: SmokeShellGreenUW { - postEffects = "ACE_SmokeAfterWaterGreen"; - }; - class SmokeShellYellowUW; - class SmokeShellYellow2UW: SmokeShellYellowUW { - postEffects = "ACE_SmokeAfterWaterYellow"; - }; - class SmokeShellPurpleUW; - class SmokeShellPurple2UW: SmokeShellPurpleUW { - postEffects = "ACE_SmokeAfterWaterPurple"; - }; - class SmokeShellBlueUW; - class SmokeShellBlue2UW: SmokeShellBlueUW { - postEffects = "ACE_SmokeAfterWaterBlue"; - }; - class SmokeShellOrangeUW; - class SmokeShellOrange2UW: SmokeShellOrangeUW { - postEffects = "ACE_SmokeAfterWaterOrange"; + class ACE_SmokeAfterWaterOrange: ACE_SmokeAfterWaterWhite { + colorCoef[] = SMOKE_COLOR_ORANGE; }; + CLOUDLET_UNDERWATER(White); + CLOUDLET_UNDERWATER(Red); + CLOUDLET_UNDERWATER(Green); + CLOUDLET_UNDERWATER(Yellow); + CLOUDLET_UNDERWATER(Purple); + CLOUDLET_UNDERWATER(Orange); + CLOUDLET_UNDERWATER(Blue); }; diff --git a/addons/particles/Effects.hpp b/addons/particles/Effects.hpp index 153416f063..0a208cdae6 100644 --- a/addons/particles/Effects.hpp +++ b/addons/particles/Effects.hpp @@ -1,3 +1,4 @@ +// - Smoke hand grenades ------------------------------------------------------ class SmokeShellWhiteEffect { class SmokeShell { type = "ACE_SmokeBaseLarge"; @@ -6,7 +7,27 @@ class SmokeShellWhiteEffect { type = "ACE_SmokeBaseSmall"; }; }; +EFFECT_HANDGRENADE(Red); +EFFECT_HANDGRENADE(Green); +EFFECT_HANDGRENADE(Yellow); +EFFECT_HANDGRENADE(Purple); +EFFECT_HANDGRENADE(Orange); +EFFECT_HANDGRENADE(Blue); +// - 40mm smoke grenades ------------------------------------------------------ +class ACE_40mmSmokeShellWhiteEffect: SmokeShellWhiteEffect { + class SmokeShell: SmokeShell { + type = "ACE_SmokeBase40mm"; + }; +}; +EFFECT_40MM(Red); +EFFECT_40MM(Green); +EFFECT_40MM(Yellow); +EFFECT_40MM(Purple); +EFFECT_40MM(Orange); +EFFECT_40MM(Blue); + +// - 120mm/155mm artillery smoke ---------------------------------------------- class ACE_ArtillerySmoke { class SmokeShell { type = "ACE_SmokeBaseArtilleryLarge"; @@ -24,42 +45,19 @@ class ACE_ArtillerySmoke { }; }; -class ACE_SmokeAfterWater { +// - Smoke on water surface --------------------------------------------------- +class ACE_SmokeAfterWaterWhite { class SmokeAfterWater { - type = "ACE_SmokeAfterWater"; + type = "ACE_SmokeAfterWaterWhite"; simulation = "particles"; position[] = {0, 0, 0}; intensity = 1; interval = 1; }; }; -class ACE_SmokeAfterWaterRed: ACE_SmokeAfterWater { - class SmokeAfterWater: SmokeAfterWater { - type = "ACE_SmokeAfterWaterRed"; - }; -}; -class ACE_SmokeAfterWaterGreen: ACE_SmokeAfterWater { - class SmokeAfterWater: SmokeAfterWater { - type = "ACE_SmokeAfterWaterGreen"; - }; -}; -class ACE_SmokeAfterWaterYellow: ACE_SmokeAfterWater { - class SmokeAfterWater: SmokeAfterWater { - type = "ACE_SmokeAfterWaterYellow"; - }; -}; -class ACE_SmokeAfterWaterPurple: ACE_SmokeAfterWater { - class SmokeAfterWater: SmokeAfterWater { - type = "ACE_SmokeAfterWaterPurple"; - }; -}; -class ACE_SmokeAfterWaterOrange: ACE_SmokeAfterWater { - class SmokeAfterWater: SmokeAfterWater { - type = "ACE_SmokeAfterWaterOrange"; - }; -}; -class ACE_SmokeAfterWaterBlue: ACE_SmokeAfterWater { - class SmokeAfterWater: SmokeAfterWater { - type = "ACE_SmokeAfterWaterBlue"; - }; -}; +EFFECT_AFTER_WATER(Red); +EFFECT_AFTER_WATER(Green); +EFFECT_AFTER_WATER(Yellow); +EFFECT_AFTER_WATER(Purple); +EFFECT_AFTER_WATER(Orange); +EFFECT_AFTER_WATER(Blue); diff --git a/addons/particles/script_component.hpp b/addons/particles/script_component.hpp index 3afc7af7e3..f3d4bbd853 100644 --- a/addons/particles/script_component.hpp +++ b/addons/particles/script_component.hpp @@ -15,3 +15,43 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + +#define SMOKE_COLOR_RED {0.9528, 0.0438, 0.0410, 0.8} +#define SMOKE_COLOR_GREEN {0.0328, 0.1626, 0.1023, 0.8} +#define SMOKE_COLOR_YELLOW {0.9610, 0.4505, 0.0109, 0.8} +#define SMOKE_COLOR_PURPLE {0.4622, 0.0578, 0.3154, 0.8} +#define SMOKE_COLOR_BLUE {0.0355, 0.1863, 1.0000, 0.8} +#define SMOKE_COLOR_ORANGE {0.9132, 0.1763, 0.0070, 0.8} + +#define EFFECT_HANDGRENADE(color) class SmokeShell##color##Effect: SmokeShellWhiteEffect { \ + class SmokeShell: SmokeShell { \ + type = "ACE_SmokeBaseMedium"; \ + }; \ +} +#define EFFECT_40MM(color) class ACE_40mmSmokeShell##color##Effect: ACE_40mmSmokeShellWhiteEffect { \ + class SmokeShellUW { \ + simulation = "particles"; \ + type = QUOTE(SmokeShell##color##UW); \ + position[] = {0, 0, 0}; \ + intensity = 1; \ + interval = 1; \ + }; \ + class SmokeShell2UW { \ + simulation = "particles"; \ + type = QUOTE(SmokeShell##color##2UW); \ + position[] = {0, 0, 0}; \ + intensity = 1; \ + interval = 1; \ + }; \ +} +#define MERGE(var1,var2) var1##var2 +#define EFFECT_AFTER_WATER(color) class ACE_SmokeAfterWater##color##: ACE_SmokeAfterWaterWhite { \ + class SmokeAfterWater: SmokeAfterWater { \ + type = QUOTE(MERGE(ACE_SmokeAfterWater,color)); \ + }; \ +} + +#define CLOUDLET_UNDERWATER(color) class SmokeShell##color##UW; \ +class SmokeShell##color##2UW: SmokeShell##color##UW { \ + postEffects = QUOTE(MERGE(ACE_SmokeAfterWater,color)); \ +}