| Latest version | 2.7.0 |
|---|---|
| Minimum Core | 13 |
| Compatible Core | 13.351 |
| Last updated | 2 weeks ago |
| Created | 3 years ago |
| Authors | |
| Languages |
English Français |
| Systems | All systems |
| Project source | Project URL |
T
The module contains several methods to generate particles without needing premade video files. The particles are simple sprite textures managed by script. You can use or add some prefill templates for the emitter or customize it with a JSON input.
particlesFx.sprayParticles('breath', {source: token.id, target: target.id})
freezeOnPause to handle game pause in customized inputs.-m or --multiple.-h or -help like /pfx spray -h.The emission methods are used to interpret the input and manage the particles during their lifetime. The method returns its ID.
Spray particles are emitted from a source and move with a velocity in a direction defined by an angle.
Gravitating particles turn around the source with a velocity at a distance defined by a radius.
The missile method emits spray particles that are used to emit sub-particles.
Open an interactive GM panel listing all active emitters on the scene with their ID, play/pause status, and live particle count.
Pause or resume active emissions. Living particles remain rendered on screen while frozen, and particle spawning is suspended until resumed. Can be toggled per emitter or globally across all active emissions.
To stop all emissions in the scene and reset the particle emitter's IDs index.
To stop a specific emission, you need to use a macro to call the method particlesFx.stopEmissionById with an ID parameter:
true for instant deletion of particles already emitted, false to stop only the emission (living particles are not killed).To stop a future emission linked by a workflow to a current one, you need to use a macro to call the method particlesFx.stopWorkflow(id, isImmediate, all)
id with an ID parameter:
isImmediate is a boolean parameter: true for instant deletion of emitters already generated, false to stop/disable only workflows that have not yet begun.all is a boolean to select workflows in all emitters.Duplicate an existing emitter (by ID, 'l', or 'f') using the currently selected token/target, with optional parameter overrides.
Retrieve the active JSON query configuration of any emitter (merged or unmerged original input) by ID for macro creation or debugging.
You call some methods using the prefix /pfx in a chat message. It adds a message response in the chat with id of the generated (or deleted) emission.
Here is the list of all the commands (except the prefix and the first word, all the following words are optional commands):
/pfx manage/pfx pause *id* --all --resume/pfx stopAll --instant/pfx stopById *id* --instant/pfx stopWorkflow *id* --instant --all/pfx pause *id* --all --resume/pfx spray *prefillMotionTemplates* *prefillColorTemplates* *particleShapes* --multiple/pfx gravitate *prefillMotionTemplates* *prefillColorTemplates* *particleShapes* --multiple/pfx missile *prefillMotionTemplates* *prefillColorTemplates* *particleShapes* --multiple --curve/pfx query *id* --original/pfx duplicate *id*/pfx help/pfx spray ray death ice
The parameters "prefillXXXTemplates" are optional, if it is not given, we are using the default prefill. You can choose multiple templates (to mix color for example)
The parameter "particleShapes" is optional, it must be circle (default), diamond, tor or star. You can choose multiple shapes More details
The parameter "--instant" (-i) is optional; if used on a stop command, deletes active particles immediately without waiting for lifetime end.
The parameter "--multiple" (-m) allows you to generate an emission for each targeted token.
The parameter "--curve" (-c) makes missile trajectories follow a curved path between targets.
The parameter "--original" (-o) on query retrieves the raw original input before prefill merging.
The parameter "--all" (-a) on pause target all active emitters.
The parameter "--resume" (-r/--unpause) on pause resumes paused emitters.
All commands accept--help(-h) to view detailed options and usage.
particlesFx.sprayParticles(prefillMotionTemplates, prefillColorTemplates, particleShapes, {Advanced options})particlesFx.gravitateParticles(prefillMotionTemplates, prefillColorTemplates, particleShapes, {Advanced options})particlesFx.missileParticles(prefillMotionTemplates, prefillColorTemplates, particleShapes, {Advanced options}). Advanced options have the same input as Spray particles with a nested object subParticles containing another input (spray or gravitating) and type (equals to "Spraying" or "Gravitating").particlesFx.showEmittersPanel()particlesFx.refreshEmittersPanel()particlesFx.togglePauseEmissionById(id, isPaused)particlesFx.pauseAllEmission(isPaused)particlesFx.stopAllEmission(instantDelete). instantDelete is a boolean parameter: if true, it deletes all particles already emitted; if false, it stops only the emission (living particles are not killed).particlesFx.stopEmissionById(id, immediate). ID is a number or a string ('l'/'last', 'f'/'first').particlesFx.stopWorkflow(id, isImmediate, all).particlesFx.writeMessageForEmissionById(emitterId, isVerbal).particlesFx.addCustomPrefillMotionTemplate(key, template)particlesFx.removeCustomPrefillMotionTemplate(key)particlesFx.getCustomPrefillMotionTemplate(key)particlesFx.addCustomPrefillColorTemplate(key, template)particlesFx.removeCustomPrefillColorTemplate(key)particlesFx.getCustomPrefillColorTemplate(key)Example To emit missile particles with gravitating sub-particles that form a trail:
particlesFx.missileParticles({source: {x:200, y:250}, target: token.id, subParticles: {type: "Gravitating", particleLifetime: 1000, onlyEmitterFollow: true, particleAngleStart: '0_360'}})
All these methods can also be called via the module API game.modules.get("particule-fx").api:
api.emit):
xxx.api.emit.spray(...)xxx.api.emit.gravit(...)xxx.api.emit.missile(...)xxx.api.emit.stop(id, immediate)xxx.api.emit.stopAll(immediate)xxx.api.emit.stopWorkflow(id, immediate, all)xxx.api.emit.togglePause(id, isPaused)xxx.api.emit.pauseAll(isPaused)xxx.api.emit.duplicate(emitterId, overrides)xxx.api.emit.getQuery(emitterId, isOriginal)xxx.api.emit.showManagerPanel()xxx.api.emit.refreshManagerPanel()xxx.api.emit.writeMessage(emitterId, isVerbal)api.template):
xxx.api.template.motion.add(key, template)xxx.api.template.motion.remove(key)xxx.api.template.motion.get(key)xxx.api.template.color.add(key, template)xxx.api.template.color.remove(key)xxx.api.template.color.get(key)The method emitting particles can be called with multiple prefill templates or none. There are two kinds of templates: prefillMotionTemplates and prefillColorTemplates, which can be combined. You can add an input to override some attributes of the prefill template. The order of the parameters is not important.
Prefill Motion Template:
Example particlesFx.missileParticles('wave', {source: token.id, target: target.id})
Prefill Color Template:
Example /pfx spray breath fire
The particle shape property defines the texture of the sprite for each particle.
Particle shapes:
Example /pfx spray breath star
For more advanced functionality, please read the WIKI for more details:
Example | ```compendium macro Hypnotize
| ``` | compendium macro Concentrate |
|---|---|
![]() |
![]() |
| ```compendium macro firework | |
| ``` | compendium macro rayball |
![]() |
![]() |
With v2.0.0, all words containing "particule" have been renamed "particle". Additionally, the object exposing the module's methods (particleEmitter) has been renamed particlesFx.
Compatibility management has been added with warnings to flag outdated names.
To install this package, open your Foundry Setup screen and navigate to your Module tab and click the Install Module button.
From there, you can either search for the package unique name: particule-fx or copy its manifest URL:
And paste it to the input box at the bottom of your window.

You can install this package directly to your Forge account.