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()
	self.EndPos = data:GetOrigin()
	self.Norm = ( self.Position - self.EndPos ):Normalize()
	
	local AddVel = self.WeaponEnt:GetOwner():GetVelocity()
	
	local emitter = ParticleEmitter(self.Position)
	
	for i = 1,4 do
		local particle = emitter:Add("particle/particle_smokegrenade", self.Position)
		particle:SetVelocity(60 * i * self.Forward + 1.1 * AddVel)
		particle:SetDieTime(math.Rand(0.36,0.78))
		particle:SetStartAlpha(math.Rand(150,200))
		particle:SetStartSize(math.random(3,4))
		particle:SetEndSize(math.Rand(17,28))
		particle:SetRoll(math.Rand(180,480))
		particle:SetRollDelta(math.Rand(-1,1))
		particle:SetColor(190,190,190)
		particle:SetLighting(true)
		particle:SetAirResistance(150)
    end
				
	local particle = emitter:Add( "sprites/heatwave", self.Position - self.Forward * 4 )

	particle:SetVelocity( 120 * self.Forward + 20 * VectorRand() + 1.05 * AddVel )
	particle:SetGravity( Vector( 0, 0, 100 ) )
	particle:SetAirResistance( 160 )

	particle:SetDieTime( math.Rand( 0.2, 0.35 ) )

	particle:SetStartSize( math.random( 3, 5 ) )
	particle:SetEndSize( math.Rand( 17, 29 ) )

	particle:SetRoll( math.Rand( 180, 480 ) )
	particle:SetRollDelta( math.Rand( -1, 1 ) )
				
	if math.random( 1, 4 ) == 1 then

		for i = 1,6 do
			for j = 1,2 do
				local particle = emitter:Add( "sprites/heatwave", self.Position - self.Forward * 4 )

				particle:SetVelocity( 250 * self.Forward + 20 * VectorRand() + 1.05 * AddVel )
				particle:SetGravity( Vector( 0, 0, 100 ) )
				particle:SetAirResistance( 160 )

				particle:SetDieTime( math.Rand( 0.2, 0.25 ) )

				particle:SetStartSize( math.random( 5, 15 ) )
				particle:SetEndSize( math.Rand( 20, 40 ) )

				particle:SetRoll( math.Rand( 180, 480 ) )
				particle:SetRollDelta( math.Rand( -1, 1 ) )
		
		
				local particle = emitter:Add( "effects/muzzleflash"..math.random( 1, 4 ), self.Position + 8 * self.Forward )

				particle:SetVelocity( 450 * self.Forward + 1.1 * AddVel )
				particle:SetAirResistance( 800 )

				particle:SetDieTime( 0.1 )

				particle:SetStartAlpha( 160 )
				particle:SetEndAlpha( 0 )

				particle:SetStartSize( 6 )
				particle:SetEndSize( 6 )

				particle:SetRoll( math.Rand( 180, 480 ) )
				particle:SetRollDelta( math.Rand( -1, 1) )

				particle:SetColor( 255, 255, 255 )	
				
			end
		
		
			for i = 1,4 do 

				local particle = emitter:Add( "effects/muzzleflash"..math.random( 1, 4 ), self.Position + 8 * self.Forward )

				particle:SetVelocity( 350 * self.Forward + 1.1 * AddVel )
				particle:SetAirResistance( 160 )

				particle:SetDieTime( 0.1 )

				particle:SetStartAlpha( 160 )
				particle:SetEndAlpha( 0 )

				particle:SetStartSize( 5 * i )
				particle:SetEndSize( 5 * i )

				particle:SetRoll( math.Rand( 180, 480 ) )
				particle:SetRollDelta( math.Rand( -1, 1) )

				particle:SetColor( 255, 255, 255 )	
				
				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 	= 700
					dlight.DieTime 	= CurTime() + 0.01
				end
			end
		end
	end
	emitter:Finish()
end

function EFFECT:Think()

	return false
end


function EFFECT:Render()
end