function EFFECT:Init(data)
	
	self.WeaponEnt = data:GetEntity()
	self.Attachment = data:GetAttachment()
	
	self.Position = self:GetTracerShootPos(data:GetOrigin(), self.WeaponEnt, self.Attachment)
	self.Forward = data:GetNormal()
	self.Angle = self.Forward:Angle()
	self.Right = self.Angle:Right()
	
	local AddVel = self.WeaponEnt:GetOwner():GetVelocity()
	
	local emitter = ParticleEmitter(self.Position)
		
	for i = 1,math.random(5,10) do

		local particle = emitter:Add( "particle/particle_smokegrenade", self.Position )

		particle:SetVelocity( math.Rand( 40, 60 ) * i * self.Forward + 1.1 * AddVel )
		particle:SetAirResistance( 300 )
		particle:SetGravity( Vector(0, 0, math.Rand( 25, 50 ) ) )
		particle:SetDieTime( math.Rand( 2, 4 ) )
		particle:SetStartAlpha( math.Rand( 200, 250 ) )
		particle:SetEndAlpha( 0 )
		particle:SetStartSize( math.Rand( 5, 10 ) )
		particle:SetEndSize( math.Rand( 20, 35 ) )
		particle:SetRoll( math.Rand( -100, 100 ) )
		particle:SetRollDelta( math.Rand( -0.05, 0.05 ) )
        particle:SetLighting(true)
		particle:SetColor( 190, 190, 190 )
	
	end
	
	for i = 1,math.random(5,35) do
		local ang = self.Right:Angle()
		ang:RotateAroundAxis( self.Forward, math.Rand( 0, 360 ) )
		ang = ang:Forward()
		local particle = emitter:Add( "particle/particle_smokegrenade", self.Position + ang * 3 )
		particle:SetVelocity( math.Rand( 80, 120 ) * ang + 8 * VectorRand() + AddVel )
		particle:SetAirResistance( 400 )
		particle:SetGravity( Vector(0, 0, math.Rand( 25, 50 ) ) )
		particle:SetDieTime( math.Rand( 1, 2 ) )
		particle:SetStartAlpha( math.Rand( 200, 250 ) )
		particle:SetEndAlpha( 0 )
		particle:SetStartSize( math.Rand( 1, 5 ) )
		particle:SetEndSize( math.Rand( 15, 25 ) )
		particle:SetRoll( math.Rand( -100, 100 ) )
		particle:SetRollDelta( math.Rand( -0.05, 0.05 ) )
		particle:SetLighting(true)
		particle:SetColor( 190, 190, 190 )
	end	
	
	if math.random( 1, 3 ) == 1 then

		for i = 1, math.random(10,100) do
			local particle = emitter:Add("Effects/spark", self.Position)
			particle:SetVelocity(math.Rand( 80, 120 ) * self.Forward + VectorRand() * 50 )
			particle:SetDieTime(math.Rand(0.1, 0.3))
			particle:SetStartAlpha(255)
			particle:SetStartSize(1)
			particle:SetEndSize(0)
			particle:SetRoll(0)
			particle:SetGravity(Vector(0, 0, 0))
			particle:SetCollide(true)
			particle:SetBounce(0.8)
			particle:SetAirResistance(40)
			particle:SetStartLength(0)
			particle:SetEndLength(0.2)
			particle:SetVelocityScale(true)
			particle:SetCollide(true)
		end
		
		for i = 1, math.random(3,50) do
			local particle = emitter:Add("effects/yellowflare", self.Position)
			particle:SetVelocity(math.Rand( 50, 220 ) * self.Forward + VectorRand() * 100 )
			particle:SetDieTime(math.Rand(0.2, 1))
			particle:SetStartAlpha(255)
			particle:SetStartSize(math.random(1,3))
			particle:SetRoll(0)
			particle:SetGravity(Vector(0, 0, -(math.random(100,400))))
			particle:SetCollide(true)
			particle:SetAirResistance(60)
			particle:SetStartLength(0.2)
			particle:SetEndLength(0.2)
			particle:SetVelocityScale(true)
			particle:SetCollide(true)
		end
		
		for i = 1,math.random(3,9) do
			for j = 1,2 do
				local particle = emitter:Add( "effects/muzzleflash"..math.random( 1, 4 ), self.Position )
				particle:SetVelocity( math.Rand(35, 45) * i * self.Forward + 8 * VectorRand() + AddVel )
				particle:SetAirResistance( 400 )
				particle:SetGravity( Vector(0, 0, 0) )
				particle:SetDieTime( math.Rand(0.1, 0.3) )
				particle:SetStartAlpha( 255 )
				particle:SetEndAlpha( 0 )
				particle:SetStartSize( 0.3 )
				particle:SetEndSize( math.Rand(10, 20) )
				particle:SetRoll( math.Rand( 180, 480 ) )
				particle:SetRollDelta( math.Rand( -1, 1 ) )
				particle:SetColor( 255, 255, 255 )
				
			end
		end
		
		local particle = emitter:Add( "sprites/heatwave", self.Position - self.Forward * 4 )
		particle:SetVelocity( 80 * self.Forward + 20 * VectorRand() + 1.05 * AddVel )
		particle:SetGravity( Vector( 0, 0, 0 ) )
		particle:SetAirResistance( 160 )
		particle:SetDieTime( math.Rand( 0.2, 0.25 ) )
		particle:SetStartSize( math.random( 0.5, 1 ) )
		particle:SetEndSize( math.Rand( 10, 20 ) )
		particle:SetRoll( math.Rand( 180, 480 ) )
		particle:SetRollDelta( math.Rand( -1, 1 ) )
		
		local dlight = DynamicLight(0)
		if (dlight) then
			dlight.Pos 		= self.Position
			dlight.r 		= 70
			dlight.g 		= 50
			dlight.b 		= 0
			dlight.Brightness = 3
			dlight.size 	= 600
			dlight.DieTime 	= CurTime() + 0.01
		end
		
	end	

	emitter:Finish()
end

function EFFECT:Think()

	return false
end


function EFFECT:Render()
end