🔞 Not Safe For Work content is ahead, please, NO minors! 🔞
🚧 Still under construction, please forgive the scarceness! 🚧
Using Particles
Particles will help breathe life into your renders, whether that's firing a gun or adding motes of dust floating through a light shaft.
Use the overview below to jump to the section that most interests you.
But first, a big warning:
Especially when editing, these flashes can take up large portions of your screen.
If you're prone to epileptic seizures, this is not something you want to be doing.
Note: I run off of the latest version of PCF files from TF2, rather than the outdated ones present in SFM. Keep this in mind if I have something that you don't.
Overview
- Basics of Adding Particle Systems
- Basic Properties
- Actually Finding the Particles You Want
- Advanced Particles
- Editing Particles
Basics of Adding Particle Systems
First things first, we'll cover how to get a particle system spawned into SFM. For our tutorial's sake we'll say we want to spawn the effect that floats over an enemy's head when they dominate you. We'll do the RED team's.
Like most things, we add particles by right clicking in the Animation Set Editor and selecting Create Animation Set for New Particle System. This will open the Create Particle System menu.

First, we need to open the pcf file that contains the particle system we wish to use. Hit Browse... to open a file browsing window. It'll default to opening the sourcefilmmaker/game/tf/particles folder. Select and open nemesis.pcf
This will fill in Particle System Definition File, with Particle System Definition now showing the first particle listed in the file. Tap where it says particle_nemesis_blue to see the full list of particle systems in this pcf file.

In this case, there's four systems present in this file. particle_nemesis_blue, particle_nemesis_burst_blue, particle_nemesis_red, and particle_nemesis_burst_red. Select particle_nemesis_red, this'll be the RED team effect. particle_nemesis_blue would be the BLU team effect, surprise surprise. The other two systems are children of these two. They're spawned in when their parent system is spawned. In this specific case, they're responsible for the radiating lines that come off of the main part of the nemesis effect.
The other three values affect when the system is active. Unlike when spawning a model or a light, a particle system is only active during a specific time, not for the entirety of a shot. (Well... you can make models not active for an entire shot as well, but let's not go there now.)
- Start Time is, as its name suggests, when the particle will start emitting. A particle system won't be visible before it's started emitting its particles.
- Emission Duration is next, which is how long the system will emit its particles, in seconds from the start time. Note that this only affects systems that continually emit particles, some systems only emit an initial volley of particles and then cease emitting (things like explosions, bullet tracers, etc. function this way).
- Particle System Lifetime is similar to emission duration, however, it's how long the particle system is allowed to exist. For an example of the difference of these last two values, consider the medibeam. When it stops emitting, the remaining particles of the beam still travel into the patient, while the muzzleflash fades away. If we set the lifetime too close to the end of the emission duration, instead of fading away like this, the beam will just blink from existence.
Anyway, actual values here. If we want the effect to be present for our entire shot (assuming we have the default 1 minute long shot) and to not fade in at the start of the shot, we could set these values to -5, 65, and 65 respectively. -5 starts the effect 5 seconds before the shot begins (giving it time to play through its fade in), while the 65s cause it to then emit and live for 65 seconds, bringing us to the 60 second endpoint of our shot. Once we fill those in and hit OK, we'll have our particle system!*
If added while outside of clip editor mode (![]()
![]()
), our particle won't be visible until we've "refreshed" the shot. Other than quickly switching to the clip editor and back, the easiest way to do this that I've found is to tap ↑, ←, and then ↑ again. This will bring you to the beginning of the shot, then one frame before it, then back onto the starting frame. The particle system should now be visible.
Similar to the above, a particle's position in the shot won't update when being moved/rotated. To see its actual position after altering it, you need to change the current frame. Simply tapping ← then → will update this and return you to the current frame you're on.
Basic Properties
Expanding our particle system's animation set reveals only an all category, which in turn holds a transform* and controlPoint0 "bones." Every particle system will have these two present, with some having additional control points listed. What each control point does depends on the system in question. We'll cover examples of these in later sections. For now, on most basic particle systems you can think of these like the rootTransform and static_prop bones on a simple model.
The zero position for an unlocked transform dag is not map spawn like it is for a camera or light's transform, or a model's rootTransform, but is instead wherever the particle was initially spawned in. To get around this, you can lock the transform dag before using the Zero Procedural slider.
If the values you've entered for a spawned particle turn out to be incorrect, you can right click the particle's animation set and select Edit Particle System Start/Stop/End Times. This will open a popup with these values again, as well as a Time Scale option to alter the speed at which the system functions at, which is useful for things like slow-mo.
Below that, you'll see Freeze Particle Systems. Clicking this will "pause" the system at the current time in the shot.
If you scrub time backwards while past the freeze time of the particle, the particle will disappear from view until scrubbed before its freeze time. This does not affect exporting a video or poster, but will affect exporting an image! Note that you can't scrub before its freeze time if it was frozen at the very start of a clip.
And below that is Instance Particle System. This allows, among other things, editing the particle system in question. We'll get to that later.
If a pcf file isn't in the particles manifest and the session is closed and later re-opened, particles from it sometimes won't render (and will generally spam your console with "Attempted to create unknown particle system type [name]") until that pcf is opened again. Instancing the particle system prevents this issue, and should generally be done to "uncommon" systems regardless of if you intend to edit them.
Actually Finding the Particles You Want
So if you've tried poking in any of the other pcf files, you'll have probably noticed that they tend to have a lot more than just four systems in them. And browsing them from a dropdown menu isn't exactly an ideal way to find something if you know what you want to use, but don't know what its file name is (or what pcf file they're even in, the naming convention there broke down a long time ago). As well, there's no logical order to the way the list is sorted. It's not alphabetical, or strictly by parent/child systems (though it tends to wind up like this, it seems to be by when the particle was added, but also from what it was based on if edited from another system? Iunno.)
Luckily, we have a tool that can help us at least figure out what system we might want. The particle editor tool gives us previews of every system in the pcf file we open. To access it, go to Windows
Particle Editor Tool. Your entire SFM window will switch over to the tool.*
This window is 1280x720 and cannot be resized. Exceptionally large or small screen resolutions might have difficulty using it!
First things first, we need to open a pcf file. Unfortunately telling which one the specific effect you might wish to use can be difficult at times. Some particles aren't where you might expect them to be. (An example: The effects for the Sandman baseball are in stickybomb.pcf). But, with this tool, we can view what particles are in a given file, and much more easily hunt down those weird ones. File
Open... will give you your file browser. I believe it defaults to the usermod/particles folder. You'll most likely want to look in tf/particles, workshop/particles, or hl2/particles, depending on what you're looking for. For the tutorial's sake, let's say we want to find Sapper effects. So we'll open tf/particles/sparks.pcf.
You can move and resize the elements in the editor tool to make browsing easier. We'll be looking only at the Particle System Browser for the time being. We can scroll up and down this list to see the previews for each system. We can click on the preview to move the view around. Left click drag rotates, Right click drag zooms, and Middle click drag pans.
Note: The previews automatically loop. Not every particle system loops!
Left clicking on a particle system also opens it in the Properties and Preview windows, giving an additional, typically closer preview. Here, I've taken a look at sapper_sentry1_fx, which fits my "Sapper effect" requirement.
Once you're satisfied with your particle browsing, you can go to Tools
Switch to SFM to return to your work. With the knowledge we've gained (might not hurt to make notes!), we can now spawn the system and have a good idea of what it's going to look like. In this case, we want to open sparks.pcf and use the sapper_sentry1_fx definition.
Note: In systems with very large definition lists, one potentially useful trick for finding the particle in the list is to click onto the list so it's selected and start typing the name of the system you want. It has to be from the start of its name, and unfortunately you need to type fast for it to work, otherwise it'll just start looking for systems starting with the next letter you type. Alternatively you can just keep pressing the first letter(s) of the system's name to just browse through those starting with that letter. There's no copy/pasting or direct search feature from here. Sorry.
(Hey sorry if this section is just an absolute mess, literally just discovered this myself now and trying to document it as accurately as I can.)
That said, you can copy/paste the particle name into the system if you just can't find it from the menu. Spawn a particle system of some type. It doesn't even need to be from the pcf file you wish to use (though it probably should be), however, the pcf it is from should've at least been opened at some point during this session if it isn't a "standard" one.† Right click its animation set, and Show in Element Viewer
Particle System. In the Element Viewer, put the name of the system you want to use as the value for particleSystemType.‡
†Failure for a pcf to be "precached" during this session in one of these ways will cause the particle to not appear. Attempting to instance a particle in this state will crash SFM.
‡The system being replaced should have the same number of control points, otherwise any missing control points will be stuck at the map origin.
(This step shouldn't be necessary if you converted this particle from one that was in its pcf file) To make sure the pcf file is referenced by SFM in future startups, right click the particle animset again and Show in Element Viewer
AnimationSet. Make sure the value in particleFiles
particleFiles [0] is particles\[pcfname], with no extension. If particleFiles is empty, right click it and press Add Item, or select it and press A.
This sometimes doesn't load the particle system regardless. See this note.
Advanced Particles
So just as character models are much more complicated than scene props, some particle systems have more going on than others. In this section we'll go over some of the more complicated particles that you'd be likely to run into, and how to use them.
Ropes and Beams
Ropes and beams, referred to in the particle systems themselves as paths, are defined by having two control points, one for each end. Most also include a "bulge"—a curve in the particle path—the direction of which is controlled by the rotation of one control point or the other (or is sometimes completely random). The most common vanilla application for these is the medigun beam. This is also the case for bullet tracers. There actually isn't a default rope particle (ropes in Source maps are done in a different way). However, there's a wonderful addon on the workshop for getting particle ropes. Though, you'll need to be able to edit particles to really get a use out of it.
In the case of the various medigun/dispenser beams, controlPoint0 is the start of the beam at the barrel of the medigun/the tip of the pipe of the payload cart/the dispenser, while controlPoint1 is the end attached to the patient, typically in their chest.
Placing Particles on Models
Some particles, such as players burning, Spy's disguise smoke, various liquids dripping, and several taunt Unusual effects, are intended to cover the surface of a model (or more technically, its hitboxes). In order to properly use these particles, you need to:
- Right click the model's animation set and Show in Element Viewer
Model. - In the Element Viewer, go Up (
) one level, expand children, and copy [modelname]_GameModel.
Note: If this is a copied animation set, the name will match the animset name, and not include_GameModel. - Right click the particle's animation set and Show in Element Viewer
Particle System. - In the Element Viewer, Right click controlModels and Paste Special
Paste as Reference.
Be sure to delete this reference before deleting this particle system, or it will delete the referenced model with it!
And there you go! For more control over the placement of the particle system, I recommend making a non-visible copy of the model you wish to have it on that you can freely pose to tweak the particles' placement. For instance, you can move this copy of the model closer or further from the camera to both increase/decrease the apparent number of particles dripping from it without needing to edit the system, or to help prevent the particles from clipping with the visible model. You can also adjust specific limbs if a particle ends up covering an important detail.
Note: Particles emitting from models don't show correctly if the model's bone(s) are currently locked, they'll appear offset from that bone and any of its children. Unlock Transforms on any particle emitting models before rendering.
Misc. Weird Pitfalls
Some particles are weird. Like, exceptionally so. We'll make note of some of those weirdnesses here, and how to work with (or around) these oddballs.
Probably the most common one to run into, especially if you record any gameplay in SFM itself, is trail effects. Most projectiles have trails, as well as things like smokestacks on the MvM tank or Li'l Chew Chew. They aren't too weird on their own, they're just intended to be attached to stuff that's moving (a rocket, a jarate jar, a sticky bomb, a tank, a Bonked Scout, a charging Demoknight, etc. etc.) But unfortunately, they come with some bugs.
Particle trails can reset their position to their control point, most notably when time is scrubbed backwards. This doesn't affect exporting movies, but can affect exporting images, and unfortunately always affects exporting posters. We'll cover a workaround further down.
Probably the most famous particle weirdness out there. There's a handful of particles that determine their color with a control point's position. I'm personally aware of two, the Wrangler's laser, and the eyes for MvM robots. To most easily work with these, you should lock the control point that controls the color. This will typically be the last control point on the system. The X position is the red, Y the green, and Z the blue. 0-255 is your normal color range.

Note: Particles can, in theory, use control point positioning for all sorts of different properties, not just color. The method for handling those would likely be the same, but the ranges and functions of each part of the control point's transformation will obviously be different.
And finally (for now), a note on SFM's handling of particles in general. There's some newer particle effects in TF2 that use particle functions that don't seem to be present in SFM itself. These would need to be recreated in a different way to get a similar looking effect. One that I'm personally aware of is orientation_type 3, seen on the rings for the Isotope weapon unusual effect. These will fail to render unless the orientation_type value is changed to 0, 1, or 2. However, the rings then won't be oriented along the barrel of the weapon. My workaround on this piece was to recreate the rings with models.
Editing Particles
So all that is all well and good, but that's really just how to use particles we already have access to. How do we change them if something's not quite right? How do we make our own? SFM allows us to edit existing particle systems without needing to make a new pcf file or editing the existing one, similar to material overrides. First, instance the particle system in question. What it does, on a technical level, is make a copy of the particle system's definition that is saved inside the DMX file of our session, rather than referencing the pcf file the particle comes from. With this done, we can edit the instanced copy of this system in two ways: through the Element Viewer, or with the Particle System Editor. There's benefits to using both, and some things can only be done in one or the other. We'll cover both.
Editing Particles with the Element Viewer
First, we'll go over particles in the Element Viewer. Right click the particle's animset, and Show in Element Viewer
Particle System.
The biggest thing here is randomSeed. This will be, by default, an eight digit long negative number. The number itself is randomly generated, though the first digit will tend to be a 1 or 2. The value of the number by itself doesn't strictly matter, only in regards to other systems does it matter. Namely, two identical particle systems with identical random seeds will appear identically*, while those two systems with different random seeds will appear differently (provided they use any random value functions).
A random force generator added to a particle system doesn't use that system's random seed, and will appear differently both between different systems and even on the same system at the same timestamp. This makes them typically unsuited for editing in post.
There's two big cases where you'd likely want to edit the random seed. When copy/pasting particle systems, the random seed will remain the same. Thus, to make a copied system appear differently (i.e. to avoid a bunch of different particles all unnaturally looking the same), we can edit the random seed on each copy to be unique, preventing repeating. We could also edit the random seed on an individual system if it's doing something we just don't want, such as placing a particle directly over a character's face. In this situation, we can just fiddle around with random seeds until a desirable configuration is found.
Provided the system is instanced, we will see a value in particleSystemDefinition. Expanding this reveals several more categories, as well as many many fields. We'll go over what means what a little later on.
For now, we'll discuss what the benefits of using the element viewer are. For starters, the element viewer is the only way to copy/paste (including pasting references) between particle systems. Pasting references in this context means keeping multiple edited particle systems synced up, either partially or totally.
Note: The entire definition is referenced when a system animset is pasted multiple times from the same copy. i.e. If you copy an instanced particle system animset and paste twice, the two pasted copies will reference the same particleSystemDefinition. This isn't the same one referenced by the first system. This instancing when pasting will continue until something else is copied (this includes copying the same system again).
Next, some values are more easily edited in the element viewer. Most notably, colors can be sampled from anywhere on your screen with the picker that a color element receives.
It's also generally easier to edit multiple child systems at once through the element viewer, as multiple children can be expanded at once.
However, outside of these rather specific situations, it's generally easier to use the built-in Particle System Editor.
Particle Editor Overview
To access the built-in, visual editor, ensure your system is instanced, then right click the system animset and Edit Particle System Definition
[particle system name]. This will open a window similar to the Particle Editor Tool we saw before.