{"name":"Particles Tutorial","title":"Particles Tutorial","type":"topic","url":"https://community.bistudio.com/wiki/Particles_Tutorial","revid":369856,"updated":"2024-10-16T13:52:06Z","aliases":[],"markdown":"A **[particle](https://en.wikipedia.org/wiki/Particle_system)** is a (to some extent, non-physical) 2D plane that always faces the camera, or (more rarely) a 3D model.\nIt can be used to simulate ambient effects, such as dust, fire, water splash, wood splinters and even rock debris.\n\nA **particle source** is a non-physical object that creates particles at a certain rate and position/velocity.\n\nA particle (as well as a particle source) is **local** to the computer where the script has been called; one player could see smoke while another could see through without any issue.\n\n> [!NOTE]\n> Particles exist since Operation Flashpoint, but the first related command (drop) was only introduced in Operation Flashpoint: Resistance.\n> Particle source notions and commands were introduced in ArmA: Armed Assault, some commands were later added in Arma 3 (e.g setParticleFire, setParticleClass).\n\n### How To\n\n#### Create a Particle Source\n\n```sqf\nprivate _particleSource = \"#particlesource\" createVehicleLocal ASLToAGL getPosASL player;\n```\n\n> [!NOTE]\n> A particle source is **local** (and all the particle commands take a local argument too), hence createVehicleLocal usage.\n\n#### Set Source Class (Arma 3 v0.50)\n\n```sqf\n_particleSource setParticleClass \"ObjectDestructionFire1Smallx\"; // defined in configFile >> \"CfgCloudlets\"\n```\n\n> [!NOTE]\n> Particle source class must be defined in game config and **cannot** be declared in missionConfigFile or campaignConfigFile. See Arma 3: Particle Effects for more information.\n\n#### Set Source Parameters\n\nSee ParticleArray for details on the array format.\n\n```sqf\n_particleSource setParticleParams\n[\n    [\"\\A3\\data_f\\ParticleEffects\\Universal\\Universal\", 16, 12, 0, 8],\n    \"\", \"Billboard\", 1, 3,                        // animationName, type, timerPeriod, lifeTime\n    [0,1.5,0],                                    // position relative to referenceObject\n    [0,0,0],                                    // velocity\n    0, 0.005, 0.003925, 0.1, [0.25, 0.75],        // rotation, weight, volume, rubbing, size\n    [[1,0,0,0.5], [0,1,0,1], [0,0,01,0.25]],    // colors\n    [1],                                        // animationPhase\n    0, 0,                                        // randomDirectionPeriod, randomDirectionIntensity\n    \"\", \"\",                                        // onTimer, beforeDestroy\n    player,                                        // referenceObject\n    0, false,                                    // angle, bounces\n    -1, [],                                        // bounceOnSurface, emissiveColor\n    [0,1,0]                                        // vectorDir - CANNOT be [0,0,0]\n];\n```\n\n#### Set Source Drop Interval\n\n```sqf\n_particleSource setDropInterval 0.0625; // duration between drops\n```\n\n#### Set Source Drop Circle\n\n```sqf\n_particleSource setParticleCircle [3, [0,1,0]]; // [circle radius, velocity]\n```\n\n#### Set Source Random Values\n\n```sqf\n/*\n    lifeTime,\n    position,\n    moveVelocity,\n    rotationVelocity,\n    size,\n    color,\n    directionPeriod,\n    directionIntensity,\n    angle,\n    bounceOnSurface\n*/\n_particleSource setParticleRandom [0, [0.1, 0.1, 0.1], [0, 0, 0.5], 0, 0.1, [0, 0, 0, 0], 0, 0];\n```\n\n#### Set Source Fire Properties (Arma 3 v1.08)\n\n```sqf\n_particleSource setParticleFire [0.1, 0.5, 2]; // [coreIntensity, coreDistance, damageTime]\n```\n\n#### Delete Source\n\n```sqf\ndeleteVehicle _particleSource; // as simple as that\n```\n\n#### Use the drop Command\n\nThe drop command only drops one particle. If multiple ones are needed, a loop (for, while) must be used.\n\nSee ParticleArray for details on the array format.\n\n```sqf\ndrop [\n    [\"\\A3\\data_f\\ParticleEffects\\Universal\\Universal\", 16, 12, 0, 8],\n    \"\", \"Billboard\", 1, 3,                        // animationName, type, timerPeriod, lifeTime\n    [0,1.5,0],                                    // position relative to referenceObject\n    [0,0,0],                                    // velocity\n    0, 0.005, 0.003925, 0.1, [0.25, 0.75],        // rotation, weight, volume, rubbing, size\n    [[1,0,0,0.5], [0,1,0,1], [0,0,01,0.25]],    // colors\n    [1],                                        // animationPhase\n    0, 0,                                        // randomDirectionPeriod, randomDirectionIntensity\n    \"\", \"\",                                        // onTimer, beforeDestroy\n    player                                        // referenceObject\n];\n```\n\n### Design Workflow\n\nIn order to determine *one* particle behaviour, a simple drop usage in the Debug Console can do;\nbut seeing the complete end result can be another task at hand.\n\n#### Using a Script\n\nOne way to design your effect is to have an SQF file, named e.g \"particles.sqf\", filled with your code:\n\n```sqf\n{ deleteVehicle _x } forEach allMissionObjects \"#particlesource\";\n\nprivate _posATL = player modelToWorld [0,10,0];\n\nps1 = \"#particlesource\" createVehicleLocal _posATL;\nps1 setParticleParams [/* ... */];\nps1 setDropInterval 0.2;\n\nps2 = \"#particlesource\" createVehicleLocal _posATL;\nps2 setParticleParams [/* ... */];\nps2 setDropInterval 0.2;\n```\n\nand run with\n\n```sqf\nexecVM \"particles.sqf\";\n```\n\nThis format deletes all previous effects and still allows you to use the Debug Console in order to adjust particle source settings thanks to the usage of global variables (here, `ps1` and `ps2`).\n\n#### Using a Mod\n\n**Emitter 3Ditor** (a real-time WYSIWYG particle source editor) adds and uses particle and light emitters in your scenarios **without any scripting nor mod dependency**.\n[Steam page](https://steamcommunity.com/sharedfiles/filedetails/?id=1613905318) - [Forums post](https://forums.bohemia.net/forums/topic/221163-emitter-3ditor/)\n\n### Examples\n\n> [!NOTE]\n> The following examples are for Arma 2 and later titles. For Armed Assault examples, see ParticleTemplates.\n\n> [!IMPORTANT]\n> For games other than Arma 3:\n>\n> - remove private usage\n> - replace `\\A3\\Data_F\\` with:\n>\n> |  |  |\n> |---|---|\n> | Arma 2 v1.00 | `\\Ca\\Data\\` |\n> | Arma 2: Operation Arrowhead v1.50 | `\\Ca\\Ca_e\\Data\\` |\n> | Take On Helicopters v1.00 | `\\hsim\\Data_h\\Data\\` |\n\n#### Burning Vehicle Fire Look-Alike\n\n```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\n// Fire\nprivate _ps0 = \"#particlesource\" createVehicleLocal _posATL;\n_ps0 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 10, 32], \"\", \"Billboard\",\n    0, 1, [0, 0, 0.25], [0, 0, 0.5], 1, 1, 0.9, 0.3, [1.5],\n    [[1,1,1, 0.0], [1,1,1, 0.3], [1,1,1, 0.0]],\n    [0.75], 0, 0, \"\", \"\", _ps0, rad -45];\n_ps0 setParticleRandom [0.2, [1, 1, 0], [0.5, 0.5, 0], 0, 0.5, [0, 0, 0, 0], 0, 0];\n_ps0 setDropInterval 0.03;\n\n// Smoke part 1\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 1], \"\", \"Billboard\",\n    1, 10, [0, 0, 0.5], [0, 0, 2.9], 1, 1.275, 1, 0.066, [4, 5, 10, 10],\n    [[0.3, 0.3, 0.3, 0.33], [0.4, 0.4, 0.4, 0.33], [0.2, 0.2, 0, 0]],\n    [0, 1], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0, 0, 0], [0.33, 0.33, 0], 0, 0.25, [0.05, 0.05, 0.05, 0.05], 0, 0];\n_ps1 setDropInterval 0.5;\n\n// Smoke part 2\nprivate _ps2 = \"#particlesource\" createVehicleLocal _posATL;\n_ps2 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 1], \"\", \"Billboard\",\n    1, 15, [0, 0, 0.5], [0, 0, 2.9], 1, 1.275, 1, 0.066, [4, 5, 10, 10],\n    [[0.1, 0.1, 0.1, 0.75], [0.4, 0.4, 0.4, 0.5], [1, 1, 1, 0.2]],\n    [0], 1, 0, \"\", \"\", _ps2];\n_ps2 setParticleRandom [0, [0, 0, 0], [0.5, 0.5, 0], 0, 0.25, [0.05, 0.05, 0.05, 0.05], 0, 0];\n_ps2 setDropInterval 0.25;\n```\n\n#### Fire\n\n```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\n// Fire\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 10, 32], \"\", \"Billboard\",\n    1, 1, [0, 0, 0], [0, 0, 0.5], 0, 1, 1, 3, [0.5,1.5],\n    [[1,1,1,0.4], [1,1,1,0.2], [1,1,1,0]],\n    [0.25,1], 1, 1, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0.2, [0.5, 0.5, 0.25], [0.125, 0.125, 0.125], 0.2, 0.2, [0, 0, 0, 0], 0, 0];\n_ps1 setDropInterval 0.05;\n\n// Smoke\nprivate _ps2 = \"#particlesource\" createVehicleLocal _posATL;\n_ps2 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 1, 1], \"\", \"Billboard\",\n    1, 5, [0, 0, 1], [0, 0, 1.5], 0, 1, 1, 0.5, [1.75,2,3,4.5], // timerPeriod → size\n    [[1,1,1,0], [1,1,1,0.5], [1,1,1,0.4], [1,1,1,0.2], [1,1,1,0]],\n    [0.5,0.5], 0, 0, \"\", \"\", _ps2];\n_ps2 setParticleRandom [0.5, [1, 1, 0.4], [0, 0, 0.5], 0, 0.125, [0, 0, 0, 0], rad 30, 0];\n_ps2 setDropInterval 0.1;\n```\n\n#### Floating Orb\n\n```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 12, 16, 0], \"\", \"Billboard\",\n    1, 3.0141, [0, 0, 2], [0, 0, 0], 1, 1.275, 1, 0, [4],\n    [[1, 1, 1, 1]],\n    [1000], 1, 0, \"\", \"\", _ps1];\n_ps1 setDropInterval 3;\n```\n\n#### Heavy Oily Smoke (Small)\n\n```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 16, 1], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 1.5], 0, 10, 7.9, 0.066, [1, 3, 6],\n    [[0, 0, 0, 0], [0.05, 0.05, 0.05, 1], [0.05, 0.05, 0.05, 1], [0.05, 0.05, 0.05, 1], [0.1, 0.1, 0.1, 0.5], [0.125, 0.125, 0.125, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.05;\n```\n\n#### Heavy Oily Smoke (Medium)\n\n```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 16, 1], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 2.5], 0, 10, 7.9, 0.066, [2, 6, 12],\n    [[0, 0, 0, 0], [0.05, 0.05, 0.05, 1], [0.05, 0.05, 0.05, 1], [0.05, 0.05, 0.05, 1], [0.1, 0.1, 0.1, 0.5], [0.125, 0.125, 0.125, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.1;\n```\n\n#### Heavy Oily Smoke (Large)\n\n```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 16, 1], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 2.5], 0, 10, 7.9, 0.066, [4, 12, 20],\n    [[0, 0, 0, 0], [0.05, 0.05, 0.05, 1], [0.05, 0.05, 0.05, 1], [0.05, 0.05, 0.05, 1], [0.1, 0.1, 0.1, 0.5], [0.125, 0.125, 0.125, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.2;\n```\n\n#### Light Wood Smoke (Small)\n\n```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 16, 0], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 1.5], 0, 10, 7.9, 0.066, [1, 3, 6],\n    [[0.5, 0.5, 0.5, 0], [0.5, 0.5, 0.5, 0.15], [0.5, 0.5, 0.5, 0.15], [0.5, 0.5, 0.5, 0.1], [0.75, 0.75, 0.75, 0.075], [1, 1, 1, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.05;\n```\n\n#### Light Wood Smoke (Medium)\n\n```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 16, 0], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 1.5], 0, 10, 7.9, 0.066, [2, 6, 12],\n    [[0.5, 0.5, 0.5, 0], [0.5, 0.5, 0.5, 0.3], [0.5, 0.5, 0.5, 0.2], [0.5, 0.5, 0.5, 0.1], [0.75, 0.75, 0.75, 0.075], [1, 1, 1, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.1;\n```\n\n#### Light Wood Smoke (Large)\n\n```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 16, 0], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 4.5], 0, 10, 7.9, 0.5, [4, 12, 20],\n    [[0.5, 0.5, 0.5, 0], [0.5, 0.5, 0.5, 0.5], [0.66, 0.66, 0.66, 0.33], [0.75, 0.75, 0.75, 0.25], [1, 1, 1, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.5, 0.5, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.2;\n```\n\n#### Mixed Smoke (Small)\n\n```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 16, 1], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 1.5], 0, 10, 7.9, 0.066, [1, 3, 6],\n    [[0.2, 0.2, 0.2, 0], [0.2, 0.2, 0.2, 0.45], [0.2, 0.2, 0.2, 0.45], [0.35, 0.35, 0.35, 0.225], [0.5, 0.5, 0.5, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.1;\n\nprivate _ps2 = \"#particlesource\" createVehicleLocal _posATL;\n_ps2 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 16, 0], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 1.5], 0, 10, 7.9, 0.066, [1, 3, 6],\n    [[0.33, 0.33, 0.33, 0], [0.33, 0.33, 0.33, 0.8], [0.33, 0.33, 0.33, 0.8], [0.66, 0.66, 0.66, 0.4], [1, 1, 1, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps2];\n_ps2 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps2 setDropInterval 0.1;\n```\n\n#### Mixed Smoke (Medium)\n\n```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 16, 1], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 2.5], 0, 10, 7.9, 0.066, [2, 6, 12],\n    [[0.2, 0.2, 0.2, 0], [0.2, 0.2, 0.2, 0.3], [0.2, 0.2, 0.2, 0.3], [0.35, 0.35, 0.35, 0.2], [0.5, 0.5, 0.5, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.2;\n\nprivate _ps2 = \"#particlesource\" createVehicleLocal _posATL;\n_ps2 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 16, 0], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 2.5], 0, 10, 7.9, 0.066, [2, 6, 12],\n    [[0.33, 0.33, 0.33, 0], [0.33, 0.33, 0.33, 0.8], [0.33, 0.33, 0.33, 0.8], [0.66, 0.66, 0.66, 0.4], [1, 1, 1, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps2];\n_ps2 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps2 setDropInterval 0.2;\n```\n\n#### Mixed Smoke (Large)\n\n```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 16, 1], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 4.5], 0, 10, 7.9, 0.5, [4, 12, 20],\n    [[0.2, 0.2, 0.2, 0], [0.2, 0.2, 0.2, 0.3], [0.2, 0.2, 0.2, 0.3], [0.35, 0.35, 0.35, 0.2], [0.5, 0.5, 0.5, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.4, 0.4, 0], [0.4, 0.4, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.2;\n\nprivate _ps2 = \"#particlesource\" createVehicleLocal _posATL;\n_ps2 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 16, 0], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 4.5], 0, 10, 7.9, 0.5, [4, 12, 20],\n    [[0.33, 0.33, 0.33, 0], [0.33, 0.33, 0.33, 0.8], [0.33, 0.33, 0.33, 0.8], [0.66, 0.66, 0.66, 0.4], [1, 1, 1, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps2];\n_ps2 setParticleRandom [0, [0.4, 0.4, 0], [0.4, 0.4, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps2 setDropInterval 0.2;\n```\n\n#### Rock Shower\n\n```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    \"\\A3\\Data_F\\ParticleEffects\\Pstone\\Pstone\", \"\", \"SpaceObject\",\n    1, 10, [0, 0, 30], [0, 0, -2], 1, 10, 1, 0.2, [2, 2],\n    [[1, 1, 1 ,1]],\n    [0, 1], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [10, 10, 0], [0.25, 0.25, 0], 0, 1.5, [0, 0, 0, 0], 0, 0];\n_ps1 setDropInterval 0.04;\n```\n\n### See Also\n\n- Particle System category\n- ParticleArray - particle array format","sections":[{"heading":null,"level":1,"markdown":"A **[particle](https://en.wikipedia.org/wiki/Particle_system)** is a (to some extent, non-physical) 2D plane that always faces the camera, or (more rarely) a 3D model.\nIt can be used to simulate ambient effects, such as dust, fire, water splash, wood splinters and even rock debris.\n\nA **particle source** is a non-physical object that creates particles at a certain rate and position/velocity.\n\nA particle (as well as a particle source) is **local** to the computer where the script has been called; one player could see smoke while another could see through without any issue.\n\n> [!NOTE]\n> Particles exist since Operation Flashpoint, but the first related command (drop) was only introduced in Operation Flashpoint: Resistance.\n> Particle source notions and commands were introduced in ArmA: Armed Assault, some commands were later added in Arma 3 (e.g setParticleFire, setParticleClass)."},{"heading":"How To","level":3,"markdown":""},{"heading":"Create a Particle Source","level":4,"markdown":"```sqf\nprivate _particleSource = \"#particlesource\" createVehicleLocal ASLToAGL getPosASL player;\n```\n\n> [!NOTE]\n> A particle source is **local** (and all the particle commands take a local argument too), hence createVehicleLocal usage."},{"heading":"Set Source Class (Arma 3 v0.50)","level":4,"markdown":"```sqf\n_particleSource setParticleClass \"ObjectDestructionFire1Smallx\"; // defined in configFile >> \"CfgCloudlets\"\n```\n\n> [!NOTE]\n> Particle source class must be defined in game config and **cannot** be declared in missionConfigFile or campaignConfigFile. See Arma 3: Particle Effects for more information."},{"heading":"Set Source Parameters","level":4,"markdown":"See ParticleArray for details on the array format.\n\n```sqf\n_particleSource setParticleParams\n[\n    [\"\\A3\\data_f\\ParticleEffects\\Universal\\Universal\", 16, 12, 0, 8],\n    \"\", \"Billboard\", 1, 3,                        // animationName, type, timerPeriod, lifeTime\n    [0,1.5,0],                                    // position relative to referenceObject\n    [0,0,0],                                    // velocity\n    0, 0.005, 0.003925, 0.1, [0.25, 0.75],        // rotation, weight, volume, rubbing, size\n    [[1,0,0,0.5], [0,1,0,1], [0,0,01,0.25]],    // colors\n    [1],                                        // animationPhase\n    0, 0,                                        // randomDirectionPeriod, randomDirectionIntensity\n    \"\", \"\",                                        // onTimer, beforeDestroy\n    player,                                        // referenceObject\n    0, false,                                    // angle, bounces\n    -1, [],                                        // bounceOnSurface, emissiveColor\n    [0,1,0]                                        // vectorDir - CANNOT be [0,0,0]\n];\n```"},{"heading":"Set Source Drop Interval","level":4,"markdown":"```sqf\n_particleSource setDropInterval 0.0625; // duration between drops\n```"},{"heading":"Set Source Drop Circle","level":4,"markdown":"```sqf\n_particleSource setParticleCircle [3, [0,1,0]]; // [circle radius, velocity]\n```"},{"heading":"Set Source Random Values","level":4,"markdown":"```sqf\n/*\n    lifeTime,\n    position,\n    moveVelocity,\n    rotationVelocity,\n    size,\n    color,\n    directionPeriod,\n    directionIntensity,\n    angle,\n    bounceOnSurface\n*/\n_particleSource setParticleRandom [0, [0.1, 0.1, 0.1], [0, 0, 0.5], 0, 0.1, [0, 0, 0, 0], 0, 0];\n```"},{"heading":"Set Source Fire Properties (Arma 3 v1.08)","level":4,"markdown":"```sqf\n_particleSource setParticleFire [0.1, 0.5, 2]; // [coreIntensity, coreDistance, damageTime]\n```"},{"heading":"Delete Source","level":4,"markdown":"```sqf\ndeleteVehicle _particleSource; // as simple as that\n```"},{"heading":"Use the drop Command","level":4,"markdown":"The drop command only drops one particle. If multiple ones are needed, a loop (for, while) must be used.\n\nSee ParticleArray for details on the array format.\n\n```sqf\ndrop [\n    [\"\\A3\\data_f\\ParticleEffects\\Universal\\Universal\", 16, 12, 0, 8],\n    \"\", \"Billboard\", 1, 3,                        // animationName, type, timerPeriod, lifeTime\n    [0,1.5,0],                                    // position relative to referenceObject\n    [0,0,0],                                    // velocity\n    0, 0.005, 0.003925, 0.1, [0.25, 0.75],        // rotation, weight, volume, rubbing, size\n    [[1,0,0,0.5], [0,1,0,1], [0,0,01,0.25]],    // colors\n    [1],                                        // animationPhase\n    0, 0,                                        // randomDirectionPeriod, randomDirectionIntensity\n    \"\", \"\",                                        // onTimer, beforeDestroy\n    player                                        // referenceObject\n];\n```"},{"heading":"Design Workflow","level":3,"markdown":"In order to determine *one* particle behaviour, a simple drop usage in the Debug Console can do;\nbut seeing the complete end result can be another task at hand."},{"heading":"Using a Script","level":4,"markdown":"One way to design your effect is to have an SQF file, named e.g \"particles.sqf\", filled with your code:\n\n```sqf\n{ deleteVehicle _x } forEach allMissionObjects \"#particlesource\";\n\nprivate _posATL = player modelToWorld [0,10,0];\n\nps1 = \"#particlesource\" createVehicleLocal _posATL;\nps1 setParticleParams [/* ... */];\nps1 setDropInterval 0.2;\n\nps2 = \"#particlesource\" createVehicleLocal _posATL;\nps2 setParticleParams [/* ... */];\nps2 setDropInterval 0.2;\n```\n\nand run with\n\n```sqf\nexecVM \"particles.sqf\";\n```\n\nThis format deletes all previous effects and still allows you to use the Debug Console in order to adjust particle source settings thanks to the usage of global variables (here, `ps1` and `ps2`)."},{"heading":"Using a Mod","level":4,"markdown":"**Emitter 3Ditor** (a real-time WYSIWYG particle source editor) adds and uses particle and light emitters in your scenarios **without any scripting nor mod dependency**.\n[Steam page](https://steamcommunity.com/sharedfiles/filedetails/?id=1613905318) - [Forums post](https://forums.bohemia.net/forums/topic/221163-emitter-3ditor/)"},{"heading":"Examples","level":3,"markdown":"> [!NOTE]\n> The following examples are for Arma 2 and later titles. For Armed Assault examples, see ParticleTemplates.\n\n> [!IMPORTANT]\n> For games other than Arma 3:\n>\n> - remove private usage\n> - replace `\\A3\\Data_F\\` with:\n>\n> |  |  |\n> |---|---|\n> | Arma 2 v1.00 | `\\Ca\\Data\\` |\n> | Arma 2: Operation Arrowhead v1.50 | `\\Ca\\Ca_e\\Data\\` |\n> | Take On Helicopters v1.00 | `\\hsim\\Data_h\\Data\\` |"},{"heading":"Burning Vehicle Fire Look-Alike","level":4,"markdown":"```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\n// Fire\nprivate _ps0 = \"#particlesource\" createVehicleLocal _posATL;\n_ps0 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 10, 32], \"\", \"Billboard\",\n    0, 1, [0, 0, 0.25], [0, 0, 0.5], 1, 1, 0.9, 0.3, [1.5],\n    [[1,1,1, 0.0], [1,1,1, 0.3], [1,1,1, 0.0]],\n    [0.75], 0, 0, \"\", \"\", _ps0, rad -45];\n_ps0 setParticleRandom [0.2, [1, 1, 0], [0.5, 0.5, 0], 0, 0.5, [0, 0, 0, 0], 0, 0];\n_ps0 setDropInterval 0.03;\n\n// Smoke part 1\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 1], \"\", \"Billboard\",\n    1, 10, [0, 0, 0.5], [0, 0, 2.9], 1, 1.275, 1, 0.066, [4, 5, 10, 10],\n    [[0.3, 0.3, 0.3, 0.33], [0.4, 0.4, 0.4, 0.33], [0.2, 0.2, 0, 0]],\n    [0, 1], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0, 0, 0], [0.33, 0.33, 0], 0, 0.25, [0.05, 0.05, 0.05, 0.05], 0, 0];\n_ps1 setDropInterval 0.5;\n\n// Smoke part 2\nprivate _ps2 = \"#particlesource\" createVehicleLocal _posATL;\n_ps2 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 1], \"\", \"Billboard\",\n    1, 15, [0, 0, 0.5], [0, 0, 2.9], 1, 1.275, 1, 0.066, [4, 5, 10, 10],\n    [[0.1, 0.1, 0.1, 0.75], [0.4, 0.4, 0.4, 0.5], [1, 1, 1, 0.2]],\n    [0], 1, 0, \"\", \"\", _ps2];\n_ps2 setParticleRandom [0, [0, 0, 0], [0.5, 0.5, 0], 0, 0.25, [0.05, 0.05, 0.05, 0.05], 0, 0];\n_ps2 setDropInterval 0.25;\n```"},{"heading":"Fire","level":4,"markdown":"```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\n// Fire\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 10, 32], \"\", \"Billboard\",\n    1, 1, [0, 0, 0], [0, 0, 0.5], 0, 1, 1, 3, [0.5,1.5],\n    [[1,1,1,0.4], [1,1,1,0.2], [1,1,1,0]],\n    [0.25,1], 1, 1, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0.2, [0.5, 0.5, 0.25], [0.125, 0.125, 0.125], 0.2, 0.2, [0, 0, 0, 0], 0, 0];\n_ps1 setDropInterval 0.05;\n\n// Smoke\nprivate _ps2 = \"#particlesource\" createVehicleLocal _posATL;\n_ps2 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 1, 1], \"\", \"Billboard\",\n    1, 5, [0, 0, 1], [0, 0, 1.5], 0, 1, 1, 0.5, [1.75,2,3,4.5], // timerPeriod → size\n    [[1,1,1,0], [1,1,1,0.5], [1,1,1,0.4], [1,1,1,0.2], [1,1,1,0]],\n    [0.5,0.5], 0, 0, \"\", \"\", _ps2];\n_ps2 setParticleRandom [0.5, [1, 1, 0.4], [0, 0, 0.5], 0, 0.125, [0, 0, 0, 0], rad 30, 0];\n_ps2 setDropInterval 0.1;\n```"},{"heading":"Floating Orb","level":4,"markdown":"```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 12, 16, 0], \"\", \"Billboard\",\n    1, 3.0141, [0, 0, 2], [0, 0, 0], 1, 1.275, 1, 0, [4],\n    [[1, 1, 1, 1]],\n    [1000], 1, 0, \"\", \"\", _ps1];\n_ps1 setDropInterval 3;\n```"},{"heading":"Heavy Oily Smoke (Small)","level":4,"markdown":"```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 16, 1], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 1.5], 0, 10, 7.9, 0.066, [1, 3, 6],\n    [[0, 0, 0, 0], [0.05, 0.05, 0.05, 1], [0.05, 0.05, 0.05, 1], [0.05, 0.05, 0.05, 1], [0.1, 0.1, 0.1, 0.5], [0.125, 0.125, 0.125, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.05;\n```"},{"heading":"Heavy Oily Smoke (Medium)","level":4,"markdown":"```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 16, 1], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 2.5], 0, 10, 7.9, 0.066, [2, 6, 12],\n    [[0, 0, 0, 0], [0.05, 0.05, 0.05, 1], [0.05, 0.05, 0.05, 1], [0.05, 0.05, 0.05, 1], [0.1, 0.1, 0.1, 0.5], [0.125, 0.125, 0.125, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.1;\n```"},{"heading":"Heavy Oily Smoke (Large)","level":4,"markdown":"```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 16, 1], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 2.5], 0, 10, 7.9, 0.066, [4, 12, 20],\n    [[0, 0, 0, 0], [0.05, 0.05, 0.05, 1], [0.05, 0.05, 0.05, 1], [0.05, 0.05, 0.05, 1], [0.1, 0.1, 0.1, 0.5], [0.125, 0.125, 0.125, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.2;\n```"},{"heading":"Light Wood Smoke (Small)","level":4,"markdown":"```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 16, 0], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 1.5], 0, 10, 7.9, 0.066, [1, 3, 6],\n    [[0.5, 0.5, 0.5, 0], [0.5, 0.5, 0.5, 0.15], [0.5, 0.5, 0.5, 0.15], [0.5, 0.5, 0.5, 0.1], [0.75, 0.75, 0.75, 0.075], [1, 1, 1, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.05;\n```"},{"heading":"Light Wood Smoke (Medium)","level":4,"markdown":"```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 16, 0], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 1.5], 0, 10, 7.9, 0.066, [2, 6, 12],\n    [[0.5, 0.5, 0.5, 0], [0.5, 0.5, 0.5, 0.3], [0.5, 0.5, 0.5, 0.2], [0.5, 0.5, 0.5, 0.1], [0.75, 0.75, 0.75, 0.075], [1, 1, 1, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.1;\n```"},{"heading":"Light Wood Smoke (Large)","level":4,"markdown":"```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 16, 0], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 4.5], 0, 10, 7.9, 0.5, [4, 12, 20],\n    [[0.5, 0.5, 0.5, 0], [0.5, 0.5, 0.5, 0.5], [0.66, 0.66, 0.66, 0.33], [0.75, 0.75, 0.75, 0.25], [1, 1, 1, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.5, 0.5, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.2;\n```"},{"heading":"Mixed Smoke (Small)","level":4,"markdown":"```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 16, 1], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 1.5], 0, 10, 7.9, 0.066, [1, 3, 6],\n    [[0.2, 0.2, 0.2, 0], [0.2, 0.2, 0.2, 0.45], [0.2, 0.2, 0.2, 0.45], [0.35, 0.35, 0.35, 0.225], [0.5, 0.5, 0.5, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.1;\n\nprivate _ps2 = \"#particlesource\" createVehicleLocal _posATL;\n_ps2 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 16, 0], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 1.5], 0, 10, 7.9, 0.066, [1, 3, 6],\n    [[0.33, 0.33, 0.33, 0], [0.33, 0.33, 0.33, 0.8], [0.33, 0.33, 0.33, 0.8], [0.66, 0.66, 0.66, 0.4], [1, 1, 1, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps2];\n_ps2 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps2 setDropInterval 0.1;\n```"},{"heading":"Mixed Smoke (Medium)","level":4,"markdown":"```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 16, 1], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 2.5], 0, 10, 7.9, 0.066, [2, 6, 12],\n    [[0.2, 0.2, 0.2, 0], [0.2, 0.2, 0.2, 0.3], [0.2, 0.2, 0.2, 0.3], [0.35, 0.35, 0.35, 0.2], [0.5, 0.5, 0.5, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.2;\n\nprivate _ps2 = \"#particlesource\" createVehicleLocal _posATL;\n_ps2 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 16, 0], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 2.5], 0, 10, 7.9, 0.066, [2, 6, 12],\n    [[0.33, 0.33, 0.33, 0], [0.33, 0.33, 0.33, 0.8], [0.33, 0.33, 0.33, 0.8], [0.66, 0.66, 0.66, 0.4], [1, 1, 1, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps2];\n_ps2 setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps2 setDropInterval 0.2;\n```"},{"heading":"Mixed Smoke (Large)","level":4,"markdown":"```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 7, 16, 1], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 4.5], 0, 10, 7.9, 0.5, [4, 12, 20],\n    [[0.2, 0.2, 0.2, 0], [0.2, 0.2, 0.2, 0.3], [0.2, 0.2, 0.2, 0.3], [0.35, 0.35, 0.35, 0.2], [0.5, 0.5, 0.5, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [0.4, 0.4, 0], [0.4, 0.4, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps1 setDropInterval 0.2;\n\nprivate _ps2 = \"#particlesource\" createVehicleLocal _posATL;\n_ps2 setParticleParams [\n    [\"\\A3\\Data_F\\ParticleEffects\\Universal\\Universal\", 16, 9, 16, 0], \"\", \"Billboard\",\n    1, 8, [0, 0, 0], [0, 0, 4.5], 0, 10, 7.9, 0.5, [4, 12, 20],\n    [[0.33, 0.33, 0.33, 0], [0.33, 0.33, 0.33, 0.8], [0.33, 0.33, 0.33, 0.8], [0.66, 0.66, 0.66, 0.4], [1, 1, 1, 0]],\n    [0.25], 1, 0, \"\", \"\", _ps2];\n_ps2 setParticleRandom [0, [0.4, 0.4, 0], [0.4, 0.4, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0];\n_ps2 setDropInterval 0.2;\n```"},{"heading":"Rock Shower","level":4,"markdown":"```sqf\nprivate _posATL = player modelToWorld [0,10,0];\n\nprivate _ps1 = \"#particlesource\" createVehicleLocal _posATL;\n_ps1 setParticleParams [\n    \"\\A3\\Data_F\\ParticleEffects\\Pstone\\Pstone\", \"\", \"SpaceObject\",\n    1, 10, [0, 0, 30], [0, 0, -2], 1, 10, 1, 0.2, [2, 2],\n    [[1, 1, 1 ,1]],\n    [0, 1], 1, 0, \"\", \"\", _ps1];\n_ps1 setParticleRandom [0, [10, 10, 0], [0.25, 0.25, 0], 0, 1.5, [0, 0, 0, 0], 0, 0];\n_ps1 setDropInterval 0.04;\n```"},{"heading":"See Also","level":3,"markdown":"- Particle System category\n- ParticleArray - particle array format"}],"categories":["Arma Scripting Tutorials"],"groups":["Scripting"]}