FREE TOOL · UseParticleFxAsset
FiveM particle effect list
Every particle effect GTA 5 ships, with the particle asset that holds it — 2,907 pairs, 2,541 distinct effect names across 364 assets. Search either half, filter to one asset, and copy the effect name, the asset name, or a Lua block that streams the asset in before it starts anything. The asset is not optional metadata: without it the effect name resolves to nothing.
Names from the publicly published GTA V data dumps. 183 effect names appear in more than one asset, and core alone holds 964 of them. The dump does not record which effects are meant to be looped, and neither does this page.
- _fog_foundry
- _fog_plane
- bang_blood
- bang_blood_car
- bang_carmetal
- bang_carmetal
- bang_concrete
- bang_dirt_dry
- bang_hydraulics
- bang_metal
- bang_mud
- bang_plastic
- bang_sand
- bang_sand_underwater
- bang_snow
- bang_wood
- blood_animal_maul
- blood_armour
- blood_armour_heavy
- blood_chopper
- blood_entry
- blood_entry
- blood_entry
- blood_entry
- blood_entry_head_sniper
- blood_entry_shotgun
- blood_entry_sniper
- blood_exit
- blood_fall
- blood_headshot
- blood_melee_blunt
- blood_melee_punch
- blood_mist
- blood_mist_prop
- blood_mouth
- blood_nose
- blood_shark_attack
- blood_stab
- blood_stab_uw
- blood_stungun
- blood_throat
- blood_wheel
- bul_brick
- bul_brick_heli
- bul_bushes
- bul_cardboard
- bul_carmetal
- bul_carmetal
- bul_carmetal
- bul_carmetal
- bul_carmetal
- bul_carmetal
- bul_carmetal_heli
- bul_chickenfarm
- bul_concrete
- bul_concrete
- bul_concrete_heli
- bul_concrete_minigun
- bul_decal_blood
- bul_decal_mud
- bul_decal_oil
- bul_decal_petrol
- bul_decal_water
- bul_decal_water_heli
- bul_dirt
- bul_dirt
- bul_dirt_heli
- bul_foam
- bul_glass
- bul_glass_heli
- bul_glass_mini
- bul_glass_shotgun
- bul_glass_tv
- bul_grass
- bul_grass_heli
- bul_gravel
- bul_gravel_heli
- bul_hay
- bul_leaves
- bul_mud
- bul_mud_heli
- bul_paper
- bul_plaster_brittle
- bul_plastic
- bul_rubber_dust
- bul_sand_loose
- bul_sand_loose_heli
- bul_sb_hal_skel_armour
- bul_sb_hal_skel_bone
- bul_snow
- bul_stungun
- bul_stungun_metal
- bul_tarmac
- bul_tarmac_heli
- bul_water
- bul_water_heli
- bul_wood_splinter
- bul_wood_splinter
- bul_wood_splinter_heli
- bullet_shotgun_tracer
- bullet_shotgun_tracer
- bullet_shotgun_tracer
- bullet_tracer
- bullet_tracer_ba_vehicle_remote_mg
- bullet_tracer_ch_tank_laser
- bullet_tracer_ch_tank_mg
- bullet_tracer_gr_tintable
- bullet_tracer_ie_vehicle_mg
- bullet_tracer_ih_patrolboat
- bullet_tracer_jet
- bullet_tracer_mg
- bullet_tracer_opp_fp
- bullet_tracer_railgun
- bullet_tracer_sm_vehicle_mg
- bullet_tracer_turret
- bullet_tracer_turret_gr
- bullet_tracer_turret_gr_tampa
- bullet_tracer_turret_mogul
- bullet_tracer_turret_sm
- bullet_tracer_turret_tula
- bullet_tracer_valkyrie
- bullet_tracer_xm_akula_mg_turret
- bullet_tracer_xm_barrage_turret
- bullet_tracer_xm_khanjali_mg
- bullet_tracer_xm_thruster_mg
- bullet_tracer_xm_thruster_mg
- bullet_tracer_xm_thruster_mg
- bullet_tracer_xs_sr
- bullet_tracer_xs_vehicle_remote_mg_sf
- cs_agency_toaster_smoke
- cs_alien_hand_light
- cs_alien_light_bed
- cs_amb_tv_book_burn
- cs_amb_tv_peeing
- cs_amb_tv_sauna_steam
- cs_arena_car_exhaust
- cs_arm2_muz_smg
- cs_avi_blood_entry
- cs_avi_champagne_spray
- cs_avi_muz_assault_rifle
- cs_bigscr_beer_spray
- cs_bigscr_cig_exhale_mouth
- cs_bigscr_cig_smoke
- cs_bigscr_eject_auto
- cs_bigscr_eject_shotgun
- cs_bigscr_muz_ar
- cs_bigscr_muz_shotgun
- cs_bigscr_muz_smg
- cs_bike_exhaust
- cs_bike_exhaust
- cs_bul_concrete
- cs_camera_flash
- cs_camera_flash
- cs_car2_bang_blood
- cs_cbh_heli_gas_sign
- cs_cbh_heli_roof
- cs_cbh_heli_smoke
- cs_ch1_bourbon_pour
- cs_ch1_head_bang_blood
- cs_ch1_veh_exhaust_car
- cs_chaingun_muz
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth
- cs_cig_exhale_mouth_finale
- cs_cig_exhale_mouth_prologue
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_exhale_nose
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke
- cs_cig_smoke_inhale
- cs_cig_smoke_inhale
- cs_cig_smoke_inhale
- cs_cig_smoke_lamar
- cs_cig_smoke_prologue
- cs_cig_smoke_stub_out
- cs_cig_smoke_stub_out
- cs_cig_smoke_stub_out
- cs_doobie_smoke
- cs_dry_ice_freezer_door
- cs_dry_ice_freezer_door
- cs_dry_ice_freezer_door
- cs_dry_ice_freezer_floor
- cs_dry_ice_freezer_floor
- cs_dry_ice_point
- cs_dry_ice_point
- cs_dst_impotent_rage_toy
- cs_ex1_cargo_fire
- cs_ex1_cargo_fire
- cs_ex1_elec_malfunction
- cs_ex1_plane_break_L
- cs_ex1_plane_break_R
- cs_ex1_plane_debris_trail
- cs_ex1_plane_impacts
- cs_ex1_plane_spark_L
- cs_ex1_plane_spark_R
- cs_ex1_sparking_wires_sm
- cs_ex1_sparking_wires_sm
- cs_ex1_water_arms
- cs_ex1_water_body
- cs_ex1_water_box
- cs_ex1_wing_smoulder
- cs_ex2_jeep_crash
- cs_ex3_sand_dust
- cs_ex3_water_drips
- cs_ex3_wheel_spin
- cs_exile2_gas_liquid_pour
- cs_exile2_iron_steam
- cs_extr_bang_dirt
- cs_fam1_bourbon_pour
- cs_fam2_foot_sand
- cs_fam2_ped_splash
- cs_fam2_ped_splash
- cs_fam2_ped_water_splash
- cs_fam2_radio_splash
- cs_fam3_brk_pot_plant
- cs_fam3_cig_exhale_mouth
- cs_fam3_drool_drip
- cs_fam4_fridge_door
- cs_fam4_juice_pour
- cs_fam4_juice_shot
- cs_fam4_juice_spit
- cs_fam4_juice_splash
- cs_fam4_liquid_broccoli
- cs_fam4_shot_chandelier
- cs_fam4_water_pour
- cs_fam4_whiskey_pour
- cs_fam4_whiskey_splash
- cs_fam4_whiskey_splash
- cs_fam5_bourbon_pour
- cs_fam5_michael_pool_splash
- cs_fam5_michael_pool_splash
- cs_fam5_ped_water_drips
- cs_fam5_water_splash_ped
- cs_fam5_water_splash_ped_in
- cs_fam5_water_splash_ped_in
Showing 300. Pick an asset to see one dictionary on its own.
HOW TO USE IT
Four steps, two of which are the whole bug
Requesting the asset and waiting for it, then pointing the next call at it. Skip either and a perfectly correct effect name draws nothing and logs nothing.
- 01 Pick the effect and note its asset
Both halves travel together. Filter by asset to browse what belongs to one dictionary, or search a name and read the asset it came out of.
- 02 Request the asset and wait
RequestNamedPtfxAsset(asset), then loop on HasNamedPtfxAssetLoaded(asset). Never skip the wait, even for core.
- 03 Point the next call at the asset
UseParticleFxAsset(asset) immediately before each start call. It is consumed by one call, so repeat it for each effect you start.
- 04 Start it, then clean up
One-shot for a burst, looped for anything that stays. Keep looped handles, StopParticleFxLooped them when you are done, and RemoveNamedPtfxAsset once nothing needs the asset.
Client-side. SetParticleFxNonLoopedColour applies to the next non-looped effect only, and only some effects respond to it — many have colour baked in and will mix rather than replace.
local asset = "scr_indep_fireworks"
local effect = "scr_indep_firework_starburst"
RequestNamedPtfxAsset(asset)
while not HasNamedPtfxAssetLoaded(asset) do
Wait(0)
end
local ped = PlayerPedId()
local pos = GetEntityCoords(ped)
SetParticleFxNonLoopedColour(1.0, 0.35, 0.1)
UseParticleFxAsset(asset)
StartNetworkedParticleFxNonLoopedAtCoord(effect, pos.x, pos.y, pos.z + 12.0, 0.0, 0.0, 0.0, 2.0, false, false, false)
RemoveNamedPtfxAsset(asset)THE TRAPS
Six things that silently produce nothing
None of these raise an error. The start natives return a handle or a boolean, there is no console output, and a wrong scale looks identical to a wrong asset.
RequestNamedPtfxAsset only asks. Until HasNamedPtfxAssetLoaded returns true the effect name resolves to nothing, every start call quietly fails, and there is no error in the console to tell you why. Wait for the load. One Wait(0) loop is the whole fix, and skipping it is far and away the most common reason a correct effect name draws nothing.
It is not a mode you switch on. It points the next start call at an asset and is then spent, which the native documentation says in as many words. Two effects means two UseParticleFxAsset calls, and a loop that starts effects per frame needs one inside the loop — not above it.
StartParticleFxLoopedAtCoord hands back a handle. Lose the handle and the effect is permanent for that client: StopParticleFxLooped takes the handle and nothing else can find it. Keep every handle you create, stop them when the thing they belong to ends, and stop them again in an onResourceStop handler.
StartParticleFxLoopedAtCoord and StartParticleFxNonLoopedAtCoord are client-local. Nobody else sees them, however correct they look on your screen. The networked variants replicate — but there is no networked looped at-coord native at all, so a looped effect at a fixed world point has to be started by every client that should see it, usually off a server event.
Scale is a multiplier on an effect that was authored at a particular size, so an effect built for a car explosion at 0.1 is a few invisible pixels. The three booleans after it invert the effect on the X, Y and Z axis; almost every working snippet passes false for all three, and flipping one by accident turns a plume upside down into the ground.
An effect name carries no flag for looped or one-shot, and some names only behave in one of the two. Nothing on this page claims to know which: try the one-shot first because it cleans itself up, and if it flashes and vanishes when you wanted a plume, run the same name looped.
The “once per call” behaviour is not folklore — the FiveM reference for START_NETWORKED_PARTICLE_FX_NON_LOOPED_AT_COORD states that USE_PARTICLE_FX_ASSET has to be called before every start call.
LOOPED, ONE-SHOT, LOCAL, NETWORKED
Four start natives, and the one that does not exist
Looped effects hand back a handle and run until you stop them. Networked effects replicate — except there is no networked looped at-coord native in the game at all.
Runs until stopped. Returns a handle you keep and later pass to StopParticleFxLooped. For anything persistent: a burning barrel, a leaking pipe, a smoke column over a fixed point.
One shot, then gone. Nothing to keep, nothing to stop, nothing to leak. For impacts, bursts and anything that happens once.
The same one shot, replicated to other players. This is the one to use for an effect other people are supposed to witness — an explosion, a firework, a splash.
The only networked looped family, and it must be attached to an entity rather than a coordinate. If your looped effect needs to be visible to everyone, either hang it off an entity with this, or broadcast an event and have each client start the local version itself.
Client-side. Every handle is kept, stopped when the script asks and stopped again when the resource stops — otherwise a restart leaves another permanent plume on the map.
local asset = "core"
local effect = "exp_grd_bzgas_smoke"
local handles = {}
local function startPlume(x, y, z)
RequestNamedPtfxAsset(asset)
while not HasNamedPtfxAssetLoaded(asset) do
Wait(0)
end
UseParticleFxAsset(asset)
local handle = StartParticleFxLoopedAtCoord(effect, x, y, z, 0.0, 0.0, 0.0, 1.5, false, false, false, false)
SetParticleFxLoopedColour(handle, 0.1, 0.1, 0.1, false)
handles[#handles + 1] = handle
return handle
end
local function stopAll()
for i = #handles, 1, -1 do
if DoesParticleFxLoopedExist(handles[i]) then
StopParticleFxLooped(handles[i], false)
end
handles[i] = nil
end
RemoveNamedPtfxAsset(asset)
end
startPlume(195.2, -933.8, 30.7)
AddEventHandler("onResourceStop", function(resource)
if resource == GetCurrentResourceName() then
stopAll()
end
end)Client-side, triggered from the server. Because there is no networked looped at-coord native, this is how a fixed-position effect reaches every player: tell each client to start it themselves.
RegisterNetEvent("fam:ptfx:burst", function(coords, asset, effect)
RequestNamedPtfxAsset(asset)
while not HasNamedPtfxAssetLoaded(asset) do
Wait(0)
end
UseParticleFxAsset(asset)
StartParticleFxNonLoopedAtCoord(effect, coords.x, coords.y, coords.z, 0.0, 0.0, 0.0, 1.0, false, false, false)
RemoveNamedPtfxAsset(asset)
end)Signatures from the FiveM native reference: REQUEST_NAMED_PTFX_ASSET, HAS_NAMED_PTFX_ASSET_LOADED, START_PARTICLE_FX_LOOPED_AT_COORD, START_PARTICLE_FX_NON_LOOPED_AT_COORD, START_NETWORKED_PARTICLE_FX_LOOPED_ON_ENTITY, STOP_PARTICLE_FX_LOOPED and REMOVE_NAMED_PTFX_ASSET.
QUESTIONS
About particle effects in FiveM
Why does my particle effect not show up?
What is the difference between a looped and a non-looped effect?
Do I have to call UseParticleFxAsset every single time?
Why can other players not see my effect?
How do I know whether a name is meant to be looped?
Where does this list come from?
Every sound name with its sound set, and why passing the wrong set is the usual reason nothing is heard.
Animation listEvery dictionary and clip the game ships, with the same load-and-wait pattern that ptfx assets need.
All the free toolsThe map, the flag calculators, and every reference table on this site.
Names from the publicly published GTA V data dumps. The effects themselves are the property of Take-Two Interactive and Rockstar Games — see our trademark and IP notice.