[ℹ]
FULLNAME=Particles FX
PREVIEW=https://i.imgur.com/2SYJ9tv.jpg
DESCRIPTION=Adds soft particles effect (only works in few cases for now), as well as other options for better particles rendering. A lot more features are coming later, for now, it’s more of a temporary fix.
SHORT_DESCRIPTION=Soft and shadowed particles
URL=https://trello.com/c/CfuT5QqM/28-particles-fx

[BASIC]
; Extension
ENABLED=1 ; Active (set to 0 to disable Particles FX); 1 or 0

[AC_PARTICLES]
; Extra options
SOFT_PARTICLES=1 ; Soft particles (reduces clipping by using depth buffer to blend particles nicely); 1 or 0
SORTED_PARTICLES=0 ; Sort particles before drawing; 1 or 0
LIT_PARTICLES=0 ;; hidden
SHADOWED_PARTICLES=0 ; Draw shadows on particles; 1 or 0
SHADOWS_RESOLUTION=256 ; Reduce shadow maps to; 64 for 64×64, 128 for 128×128, 256 for 256×256, 512 for 512×512, 2048 for “Original size (not recommended)”"

[SPARKS]
ENABLED=1 ; Active; 1 or 0
LIMIT=20000 ; Limit for particles; from 1000 to 40000, round to 1000
SPAWN_RATE=500 ; Spawn rate; from 200 to 2000, round to 100

[SMOKE]
; New smoke and dust
ENABLED=1 ; Active; 1 or 0
USE_CULLING=1 ; Use culling to improve performance; 1 or 0
USE_DOWNSCALING=0 ; Render in half resolution when possible; 1 or 0
USE_DOWNSCALING_VR=0 ; Render in half resolution in VR (not recommended); 1 or 0
QUANTITY_SCALE=1 ; Quantity limit (limits amount of particles next to each other, helping with performance, but making smoke look more patchy); from 0.1 to 1.2, perc.; new
SIZE_LIMIT_SCALE=0.8 ; On-screen size limit (limits amount of large particles close to camera, increase if you want smoke to limit visiblity more); from 0.5 to 1, perc.; new
SIMPLIFIED_SHADING=0 ; Simplified shading (can help with FPS for some low-end GPUs); 1 or 0; new
LONG_LASTING_SMOKE=1 ; Long-lasting smoke (with this option intense wheels smoke and dust will smoke up the nearby area for a few minutes); 1 or 0; new
FILL_SCREEN=1 ; Cover view in smoke when camera is deep in it (adds a fullscreen pass for smoke applied over drawn scene if camera is stuck in smoke, should be faster this way); 1 or 0; new
HEATING_EXTRA=0 ; Extra heating (for more arcade-like and less accurate smoke); from 0 to 2, perc.
CAST_SHADOWS=1 ; Cast shadows; 1 or 0
CAST_AMBIENT_SHADOWS=1 ; Cast ambient shadows; 1 or 0
SHOW_IN_MIRRORS=1 ; Show in mirrors; 1 or 0
CLIP_BY_GLASS=0 ; Clip by glass (removes smoke from interiors, but there wouldn’t be any smoke behind windows; requires active ExtraFX); 1 or 0
EMIT_BRAKES_SMOKE=1 ; Smoke from overheated brakes; 1 or 0
EMIT_EXHAUST_SMOKE=1 ;; hidden
EMIT_ENGINE_SMOKE=1 ;; hidden
EMIT_COLLISIONS_DUST=1 ;; hidden
EMIT_SKID_BLOCK_DUST=1 ;; hidden
EMIT_WHEELS_DUST=1 ;; hidden

[SMOKE_DEV]
; hidden

; maximum amount of particles, limits size of memory allocated
; unlike other particles, smoke is being sorted each frame, so avoid high values
; 8k particles would require 1 MB of VRAM
LIMIT=8000
SPAWN_MULT=1
DUST_SPEED_THRESHOLD=10, 60 ; km/h
RAIN_SPEED_THRESHOLD=10, 160 ; km/h
RAIN_OPEN_WHEELER_MULT=2

[FLAMES]
; New flames
ENABLED=0 ; Active; 1 or 0
DEBUG_MODE=0 ; Debug mode (show trigger type with color: blue for antilag, red for limiter, green for flat shift, white for the rest); 1 or 0
USE_DYNAMIC_SHADOWS=1 ; Cast shadows for flame light (requires Extra FX and TAA); 1 or 0
LIMIT=2000 ; Limit for particles; hidden
FLAMING_WHEELS=0 ;; hidden

[FIREWORKS]
ENABLED=1 ; Active; 1 or 0
BEHAVIOUR=2 ; Behaviour; 1 for always active, 8 for active at night, 2 for only on holidays, 4 for after finish, 6 for on holidays and after finish, 12 for at night and after finish
IMPLEMENTATION=holidays ; Script used; look for fireworks.lua in extension/lua/fireworks
LIMIT=40000 ; Limit for particles; from 10000 to 40000, round to 10000
LIMIT_SMOKE=1000 ; Limit for smoke particles; from 100 to 2000, round to 100
SHOW_IN_MIRRORS=1 ; Render in mirrors; 1 or 0
; SHOW_IN_REFLECTIONS=1 ; Render in reflections; 1 or 0

[MARBLES]
; Bits of tyres laying around
ENABLED=0 ; Active; 1 or 0
LIMIT=50000 ; Limit for particles; from 10000 to 120000, round to 10000
; CAST_SHADOWS=1 ; Cast shadows; 1 or 0
SHOW_IN_MIRRORS=1 ; Render in mirrors; 1 or 0
; SHOW_IN_EXTRAFX=1 ; Render in Extra FX; 1 or 0
USE_DEPTH_FOR_COLLISIONS=1 ; Use data from Extra FX for extra collision check; 1 or 0

[PIECES]
; Solid pieces: dirt, bits of grass, shards in collisions and such
ENABLED=1 ; Active; 1 or 0
LIMIT=20000 ; Limit for particles; from 1000 to 40000, round to 1000
CAST_SHADOWS=1 ; Cast shadows; 1 or 0
SHOW_IN_MIRRORS=1 ; Render in mirrors; 1 or 0
SHOW_IN_EXTRAFX=1 ; Render in Extra FX; 1 or 0
USE_DEPTH_FOR_COLLISIONS=1 ; Use data from Extra FX for extra collision check; 1 or 0
COLLISION_QUANTITY=3 ; Amount of particles for collisions (with 200: https://gfycat.com/classicellipticalgalapagostortoise); hidden
USE_SHARDS_COLOR=1 ; Use car color in point of collision; 1 or 0
USE_COLLIDER_MESH=1 ; Spawn shards on collider mesh; 1 or 0
COLLIDE_WITH_CARS=1 ; Collide particles with few nearest cars; 1 or 0

[TRACES]
; Arcade braking traces (not real; do not enable unless need to)
ENABLED=0 ; Active; 1 or 0
ACCENT_BRAKES=0 ; Brighter with brakes; 1 or 0
MULT_HEADLIGHTS=0.5 ; Mult. for headlights; from 0 to 1, perc.
MULT_BRAKES=1 ; Mult. for brakes; from 0 to 1, perc.; only with ACCENT_BRAKES
LIMIT=10000 ; Limit for particles; from 1000 to 40000, round to 1000
THICKNESS=0.05 ; Thickness; from 0 to 0.05, perc.
LUMINOCITY=2.5 ; Luminocity; from 1 to 5, perc.
SATURATION=0.98 ; Saturation; from 0.9 to 1, perc.
NARROWING_MULT=0.5 ; Ends narrowing factor; from 0 to 3, perc.
LIFESPAN_MULT=1 ; Length; from 0 to 3, perc.
PADDING_MULT=1 ; Padding multiplier; hidden
PUSH_OFFSET_MULT=1 ; Pushing traces, offset; hidden
PUSH_POWER_MULT=2 ; Pushing traces, amount; hidden
SPEED_THRESHOLD=8 ; Minimum speed; hidden
LAG=0.75 ; Brightness smoothness; from 0 to 0.999, perc.

[SPARKS_DEV]
; hidden

SIZE_MULT=0.5
BLUR_MULT=0.8
; BRIGHTNESS_BASE=2
; BRIGHTNESS_EXTRA=3
BRIGHTNESS_BASE=6
BRIGHTNESS_EXTRA=6
FADING_BASE=0.2
FADING_LIFE_LEFT_K=2

; drag value; set to 0 to remove any wind resistance
DRAG_K=2.2

; gravity value
GRAVITY=-9.81

; lifespan parameters
; formula is LIFESPAN_MIN+(LIFESPAN_BASE+LIFESPAN_EXTRA×<random value>)×<surface lifespan mult.>
LIFESPAN_MIN=0.15
LIFESPAN_BASE=0.31
LIFESPAN_EXTRA=1.6

; how much to sides would particles fly
SPREAD_MULT=0.09

; force pushing sparks from wheels while they’re beneath
FORCE_WHEEL_PUSH=5.0
FORCE_WHEEL_SPEED_BASE=40.0
FORCE_WHEEL_SPEED_FACTOR=1.6
FORCE_WHEEL_SPEED_RADIUS=0.4

; force sending particles away when they’re in front
; nice to have a small radius so only a few sparks would be affected
FORCE_FRONT_UP=2.0
FORCE_FRONT_PUSH=4.0
FORCE_FRONT_FORCE_OFFSET=5.5
FORCE_FRONT_FORCE_RADIUS=4.0

; force sending particles up when they pass behind the car
; nice to have a small radius so only a few sparks would be affected
; and force is big to compensate for smaller radius
FORCE_REAR_UP=24.0
FORCE_REAR_PUSH=0.0
FORCE_REAR_FORCE_OFFSET=-0.8
FORCE_REAR_FORCE_RADIUS=0.32

[MIRAGEDISRUPTION]
; hidden
ENABLED=1
LIMIT=4000

; rain stuff
[CARDROPS]
; hidden
ENABLED=1
LIMIT=8000

[SKIDWET]
; hidden
ENABLED=1
LIMIT=10000

[OILSPILL]
; hidden
ENABLED=1
LIMIT=100

[WINDSCREEN]
; hidden
ENABLED=1
LIMIT=40000

[DEV]
; hidden
DRAW_TRACK_AO_SAMPLES2=1 ; Draw track AO samples; 1 or 0