function EFFECT:Init(data)
	local particleEmitter = ParticleEmitter( data:GetOrigin() );
	local scale = data:GetScale() or 2;
	
	for i = 1, (16 * scale) do
		local randomThing = math.random(200, 240);
		local startSize = math.Rand(16 * scale, 32 * scale);
		local position = Vector( math.Rand(-1, 1), math.Rand(-1, 1), math.Rand(-2, 2) );
		local particle = particleEmitter:Add("particle/particle_smokegrenade", data:GetOrigin() + position);
		
		if (particle) then
			particle:SetAirResistance( math.Rand(256, 384) );
			particle:SetStartAlpha(175);
			particle:SetStartSize(startSize * 2);
			particle:SetRollDelta( math.Rand(-0.2, 0.2) );
			particle:SetEndAlpha( math.Rand(0, 128) );
			particle:SetVelocity( Vector(0, 0, 1) * math.Rand(32, 64) );
			particle:SetLifeTime(0);
			particle:SetLighting(0);
			particle:SetGravity( Vector( math.Rand(-8, 8), math.Rand(-8, 8), math.Rand(16, -16) ) );
			particle:SetCollide(true);
			particle:SetEndSize(startSize);
			particle:SetDieTime( math.random(1, 3) );
			particle:SetBounce(0.5);
			particle:SetColor(randomThing, randomThing, randomThing);
			particle:SetRoll( math.Rand(-180, 180) );
		end;
	end;
	
	particleEmitter:Finish()
end;

-- Called when the effect should be rendered.
function EFFECT:Render() end;

-- Called each frame.
function EFFECT:Think()
	return false;
end;