function CircleCFrame(l)local c=math.random(0,EffectRadius)-EffectRadius/2 local g=math.random(0,EffectRadius)-EffectRadius/2 local A=math.random(0,EffectRadius)+5 return CFrame.new(l)*CFrame.new(c,A,g)end function CreateRain(l)local c=Instance.new("\080\097\114\116")c.TopSurface=Enum.SurfaceType.Smooth c.BottomSurface=Enum.SurfaceType.Smooth c.CanCollide=false c.Size=Vector3.new(DropWidth,DropLength,DropWidth)c.Color=Color c.Material=Material c.Transparency=.25 c.CFrame=CircleCFrame(l)c.Orientation=Vector3.new(X_SPEED,0,Z_SPEED)c.Velocity=c.CFrame.upVector*-100 c.Parent=workspace.CurrentCamera;(game:GetService("\068\101\098\114\105\115")):AddItem(c,10)end while wait(1/Rate)do CreateRain(workspace.CurrentCamera.CoordinateFrame.p)end

function CircleCFrame(Origin) --Able to cast a CFrame in a circle around an origin point.
	local X = math.random(0, EffectRadius) - (EffectRadius / 2)
	local Z = math.random(0, EffectRadius) - (EffectRadius / 2)
	local Y = math.random(0, EffectRadius) + 5
	return CFrame.new(Origin) * CFrame.new(X, Y, Z)
end

function CreateRain(OriginPoint)
	--Create
	local Part = Instance.new("Part")
	Part.TopSurface = Enum.SurfaceType.Smooth
	Part.BottomSurface = Enum.SurfaceType.Smooth
	Part.CanCollide = false
	Part.Size = Vector3.new(DropWidth, DropLength, DropWidth)
	Part.Color = Color
	Part.Material = Material
	Part.Transparency = 0.25
	Part.CFrame = CircleCFrame(OriginPoint)
	Part.Orientation = Vector3.new(X_SPEED, 0, Z_SPEED)
	Part.Velocity = Part.CFrame.upVector * -100

	--Parent
	Part.Parent = workspace.CurrentCamera
	
	game:GetService("Debris"):AddItem(Part, 10)
end

while wait(1/Rate) do
	CreateRain(workspace.CurrentCamera.CoordinateFrame.p)
end
