// The Battle Grounds Particle System Emitter Definition File
//=======================================================================================//
// All lines started with // will be ignored by BG
// so that you can add notes to yourself or others in these files.
// All settings start with the setting name.  The actual setting value follows after a space.
// Each setting must be on a new line.  An example of a setting can be seen below

testsetting 10

// Below I will give an example of a fully fleshed out particle system
// There are some comments after some settings. 
// These comments are no substitute for the guide, which explains all this in much more detail
//=======================================================================================//


//  The Number of particles spawned by the emitter when the emitter is triggered or the map is loaded.
starting_particles 5

// These particles are spawned every second, the number says how many new particles are created in a second, 
// one frame can generate more or less than 1 particle. There is no limit but the more particles the longer it will take to 
// render them. Most of the time a few well configured particles give the best effect and are fast to render.
new_particles_per_second 5.0

// Path to the tga used for the particle relative to bg path. It can be a compressed or uncompressed tga, 
// but compressed tga will save hdd space and wont affect the games performance.
texture particles/smoke1.tga

//  The starting size of the particle multiplied with 30 in the code, 
// so 1.0 means 30 hl units what is compareable to something like 50cm.
scale 1.0

//  Scale increase per second. 1.0 means the particle scale increases by one every second. 
// 0.0 means the particles scale stays the same all the time.
growth 1.0

// The time that has to pass till a particle is removed
// fadein in and out will be finished completely in this time.
lifetime 5.0

// A random value between -Lifetimevariation and +Lifetimevariation is added to the Lifetime. 
// Meaning if Lifetimevariation = 1.0 and Lifetime = 5.0 particles from this emitter 
// can have Lifetimes between 4.0 and 6.0.
lifetime_var 1.0

// This Keyvalue sets 2 variables in code at the same time, first it sets how much the particle is rotated when it spawns. 
// Spawned particles can have a rotation between +Rotation speed and -Rotation speed. 
// Also as the name says it determines how fast the particle rotates. Again the continous rotation can be any 
// value between +Rotation speed and -Rotation speed generated by random. The value can be interpreted as 
// degrees per second. So Rotation speed = 180 means the particle rotates 180° (a half circle) in one second . 
// The rotation of all particles is independent, meaning no particle will rotate the same way and the same 
// rotationspeed if "Rotation speed" is bigger than zero.
rotation_speed 0.0

//  Acceleration per second. For solid mass that would be 9.81 in the real world. But in many cases 0 or even 
// a negative value will also help to get the desired effect.
gravity 1.0

//  Velocity of the particles when they are spawned. If you need to figure out which axis is positive and negative 
// in which direction check the @ X, Y in the status line in hammer. But remember the value is only for the 
// current viewport your mouse is hovering.
starting_velocity_x 0.0
starting_velocity_y 0.0
starting_velocity_z 5.0

//  Again a random value between -velocity_var and +velocity_var is added to the starting_velocity.
velocity_var_x 2.0
velocity_var_y 2.0
velocity_var_z 2.0

// Determines how much the velocity gets reduced over time. This is a little hard to describe in examples 
// because the damping increases with the square of the velocity. 
// In general high damping means decreasing the speed faster
damping 1.0

//  Is the maximum transparency of a particle.
// 255 = totally solid
// 0 = totally see through, invisible
// It's a sliding scale inbetween
// Fade_In and Fade_Out Spawnflags animate the transparecy over a particles lifetime though.
transparency 255

// After this time the emitter and all its particles are deleted. Positive Values are only used for retiggerable particlesystems, like explosions and blasts.
// Negative number means forever, any other number is actual life time in seconds.
system_life -1.0

// Displaymode:
// 32 - 24bit for color and 8 bit for alpha channel
// 24 - additive - additive blending used for fire explosions,...
// 32 and 24 are the only valid values here.  Defaults to 32
display_mode 32

// Actually the entity is point based. But you can select to make the emitter areal or to spawn all particles around the player.
// If you select plane or around_player you have to enter values for the plane_x/y_length.
// point, plane and around_player are the only accepted values here.  Defaults to point
emitter_shape point

// These next two settings are only valid if emitter_shape is set to plane or around_player
// standard HL units		
plane_x_length 5
plane_y_length 5

// Animate over Life - all frames are played once, every frame lasts the same amount of time
// Start fast / End slow - used for explosions, the framerate is high in the beginning and getting slower in the end
// custom - set the custom framerate below
// over_life, fast_to_slow and custom are the only valid settings here.  Defaults to over_life
anim_speed over_life

//  Custom Framerate if anim_speed is set to custom.
fps 10

//  Determines which frame in a tga is the first one of the animation
starting_frame 1

// Determines which frame in a tga is the last one of the animation
ending_frame 1

//  This is the number of frames the tga contains, only 2^n numbers are supported, x and y must match.
// Supported Frames per Image values: 1, 4, 9, 16, 25, 36, 49, 64,.....
// That doesnt mean the Animation has to last that long, the Endingframe above can also be set 
// to 10 in a 16 frame tga so the last 6 images in the tga are ignored. 
frames_in_image 1

// Animation Behavior
// loop - the animation plays over and over again
// ping-pong - the animation reverses if it reaches the last frame and does the same 
// thing when it reaches the first frame again
// hold last frame - animation is played once and last frame is frozen
// loop, reverse and hold_last are the only valid settings here.  Defaults to hold_last
loop_behaviour hold_last

// Collision
// off - no collision - faster rendering
// stuck on collision - particles get stuck where they hit a solid brush
// die on collision - particle gets deleted as soon as it collides with a brush
// bounce on collision - particles bounce with 90% of their speed from any solid brush, 
// but they only bounce on axis aligned walls, 45° degree walls will lead to physically wrong effects
// splash on collision - creates a splash effect as well as a ripple effect if it hits water
// "particles/deffile.txt" There is one other behaviour.  That is to create a new particle system on collision and then kill
// the particle like in die.  The new particle system will have the same position to the killed particle
// In addition the new particle system would be created in the direction that the particle would have moved
// if it had bounced.
// off, stuck, die and bounce, splash and path to new particle system are the only valid settings here. Defaults to off
collision off

// Particle Generation Falloff 
// used for triggered emitters to simulate explosion and events that are only temporary, to create a smooth 
//transition when the emitter "fades away" the particle generation decreases linearly.
//none - no falloff
//linear to 1/2 of Lifetime - particle generation starts to constantly decrease till its 0 at1/2 of the emitters life time, make sure 
//your particles life time is long enough so the particle system lifetime doesnt kill them
//linear to 1/4 of Lifetime - particle generation starts to constantly decrease till its 0 at1/4 of the emitters life time, make sure 
//your particles life time is long enough so the particle system lifetime doesnt kill them
// none, lifetime, half, quarter.  Defaults to none
falloff none

// Light Check
// Adapts the particles brightness to the maps light at the particles location
// off - particles are not affected by light
// once - the particle receives the light of the location it spawns at (one light check performed)
// every_sort - the particle's brightness gets updated everytime depth sorting occurs (cl_particlesorts each second)
// never, once, every_sort - Default to never
light_check never

// Particle Aligning
// controlls billboarding and particle orientation
// player_view - billboards the particle to the players view
// locked_z - billboards the particle to the players view but locks the particles z-axis
// planar - Particles surface is a plane parallel to the ground
// none - the particle stays in the orientation it is spawned in
// velocity_vector - * not working yet* the particle aligns to the direction it is traveling
// player_view, locked_z, planar, none, velocity_vector - Default to player_view
particle_align player_view

// rotationvelocity of the particles. Only works if particle_align is set to none
rotation_velocity_pitch 0.0
rotation_velocity_yaw 0.0
rotation_velocity_roll 0.0

// rotationvelocity variation of the particles. Only works if particle_align is set to none
rotation_velocity_var_pitch 0.0
rotation_velocity_var_yaw 0.0
rotation_velocity_var_roll 0.0

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

// spawnflags, boolean values:		
// They are on/off switch.  0 for off, all other values for on (1 prefered for better readability :p )

// An additional force slowly blows the particles to the side
wind 1

// Particles slowly fade in and are at maximal transparency after 50% of the lifetime
fade_in 1

// Particles slowly fade out after 50% of their lifetime has passed
fade_out 1

// Particles surface is a plane parallel to the ground
planar 0

// Particles very close to the player are faded out
smoke 0

// Particles for this system won't be sorted, meaning particles behind them may be drawn infront
ignore_sort 0