function module.Create(B,T,U,c,O,n,R)local t=math.random(U[1],U[2])local q=Instance.new("\077\111\100\101\108",workspace.FX)q.Name="\068\101\098\114\105\115"Debris:AddItem(q,10)local V=T.Y local j local m local I local F={}for B,T in pairs(workspace:GetDescendants())do if T.Name=="\068\101\098\114\101\101"or T:FindFirstChildWhichIsA("\072\117\109\097\110\111\105\100")then table.insert(F,T)end end local o=RaycastParams.new()o.FilterDescendantsInstances=F o.FilterType=Enum.RaycastFilterType.Blacklist local h=workspace:Raycast(T+Vector3.new(0,.1,0),Vector3.new(0,-999,0),o)if h then V=h.Position.Y j=h.Material m=h.Instance.Transparency I=h.Instance.Color end local S={}for B=0,B*8,t do local T=PartCacheModule.new(script.Parent.Parent.Effects.RockModuleRock,1)local U=PartCacheModule.GetPart(T)U.Parent=q table.insert(S,U)T:ReturnPart(U)end local function C(T)local U=math.cos(T)*B local c=math.sin(T)*B return U,c end for B,c in pairs(S)do c.Anchored=true c.Name="\068\101\098\114\101\101"c.Size=Vector3.new(0,0,0)local n=(B*t)*(360/#S)local R,q=C(n)table.insert(F,c)o.FilterDescendantsInstances=F c.CFrame=CFrame.new(T)*CFrame.new(R,0,q)c.Position=Vector3.new(c.Position.X,V,c.Position.Z)c.CFrame*=CFrame.Angles(math.rad(math.random(-90,90)),math.rad(math.random(-90,90)),math.rad(math.random(-90,90)))if AccurateRepresentation==true then local B=workspace:Raycast(c.Position+Vector3.new(0,.1,0),Vector3.new(0,-999,0),o)if B then c.Material=B.Material c.Transparency=B.Instance.Transparency c.Color=B.Instance.Color else end else c.Material=Materials[math.random(1,#Materials)]c.Color=Colors[math.random(1,#Colors)]end local j=math.random(U[1],U[2])c.Parent=workspace;(TS:Create(c,TweenInfo.new(.2),{Size=Vector3.new(j,j,j)})):Play()local m=math.random(O[1],O[2])local I=math.random(.5,1.3)task.spawn(function()task.wait(m)local B={I,Enum.EasingStyle.Linear,Enum.EasingDirection.Out;0;false}local T={Size=Vector3.new(0,0,0)}local U=Tween.Tween(c,B,T)Debris:AddItem(c,4.1)end)end for B=0,R,1 do local U=Vector3.new(math.random(-40,40),math.floor(55,105),math.random(-40,40))local O=math.random(c[1],c[2])local R=Instance.new("\080\097\114\116",q)R.CanCollide=false R.Size=Vector3.new(0,0,0)R.Massless=true R.Name="\068\101\098\114\101\101";(TS:Create(R,TweenInfo.new(.2),{Size=Vector3.new(O,O,O)})):Play()if AccurateRepresentation==true then R.Material=j R.Transparency=m R.Color=I else R.Material=Materials[math.random(1,#Materials)]R.Color=Colors[math.random(1,#Colors)]end R.Position=T+Vector3.new(0,O,0)R.Velocity=U R.AssemblyAngularVelocity=Vector3.new(math.random(-90,90),math.random(-90,90),math.random(-90,90))task.spawn(function()task.wait(.5)R.CanCollide=FlyingDebrisCollision end)local t=math.random(n[1],n[2])local V=math.random(1,2)task.spawn(function()task.wait(t)local B={V,Enum.EasingStyle.Linear,Enum.EasingDirection.Out;0;false}local T={Size=Vector3.new(0,0,0)}local U=Tween.Tween(R,B,T)Debris:AddItem(R,5.1);(coroutine.wrap(spinPart))(R)end)end return end return module


function module.Create(radius,Position, rockSize , FlyingDebrisSize, DespawnTime, FlyingRockDespawnTime , AmountFlyingDebris)
	local newrocksize = math.random(rockSize[1],rockSize[2])
	
	local ModelCircle = Instance.new("Model",workspace.FX)
	ModelCircle.Name = "Debris"
	Debris:AddItem(ModelCircle,10)
	
	local Y = Position.Y

	local Material
	local Transparency 
	local Color

	local IgnoreList = {}

	for _,object in pairs(workspace:GetDescendants()) do
		if object.Name == "Debree" or object:FindFirstChildWhichIsA("Humanoid") then
			table.insert(IgnoreList,object)
		end
	end

	local RPParams = RaycastParams.new()
	RPParams.FilterDescendantsInstances = IgnoreList
	RPParams.FilterType = Enum.RaycastFilterType.Blacklist

	local ray = workspace:Raycast(Position + Vector3.new(0,0.1,0),Vector3.new(0,-999,0),RPParams)

	if ray then
		Y = ray.Position.Y
		Material = ray.Material
		Transparency = ray.Instance.Transparency
		Color = ray.Instance.Color
	end

	local parts = {}

	for i = 0,radius * 8,newrocksize do
		local Rock = PartCacheModule.new(script.Parent.Parent.Effects.RockModuleRock,1)
		local DropletClone = PartCacheModule.GetPart(Rock)
		DropletClone.Parent = ModelCircle
		table.insert(parts,DropletClone)
		
		Rock:ReturnPart(DropletClone)
	end

	local function getXAndZPositions(angle)
		local x = math.cos(angle) * radius
		local z = math.sin(angle) * radius
		return x, z
	end
	
	for i, part in pairs(parts) do
		part.Anchored = true
		part.Name = "Debree"
		part.Size = Vector3.new(0,0,0)
		local angle = (i*newrocksize) * (360 / #parts)
		local x,z = getXAndZPositions(angle)
		table.insert(IgnoreList,part)
		RPParams.FilterDescendantsInstances = IgnoreList

		part.CFrame = CFrame.new(Position) * CFrame.new(x, 0, z)
		part.Position = Vector3.new(part.Position.X,Y,part.Position.Z)
		part.CFrame *= CFrame.Angles(math.rad(math.random(-90,90)),math.rad(math.random(-90,90)),math.rad(math.random(-90,90)))
						
		if AccurateRepresentation == true then
			local raynew = workspace:Raycast(part.Position + Vector3.new(0,0.1,0),Vector3.new(0,-999,0),RPParams)

			if raynew then
				part.Material = raynew.Material
				part.Transparency = raynew.Instance.Transparency
				part.Color = raynew.Instance.Color
			else
				--part.Material = Material
				--part.Transparency = Transparency
				--part.Color = Color
			end
		else
			part.Material = Materials[math.random(1,#Materials)]
			part.Color = Colors[math.random(1,#Colors)]
		end
				
		local newrocksize2 = math.random(rockSize[1],rockSize[2])

		part.Parent = workspace
		TS:Create(part,TweenInfo.new(0.2),{Size = Vector3.new(newrocksize2,newrocksize2,newrocksize2)}):Play()
		
		local DespawnTime1 = math.random(DespawnTime[1],DespawnTime[2])
		local RockDespawnTimeTween = math.random(.5,1.3)
		
		task.spawn(function()
			task.wait(DespawnTime1)
			local HighlightTweenInfo = {RockDespawnTimeTween, Enum.EasingStyle.Linear, Enum.EasingDirection.Out, 0, false}
			local TweenGoal1 = {Size = Vector3.new(0,0,0)}
			local RockSizeTween = Tween.Tween(part, HighlightTweenInfo, TweenGoal1)	
			Debris:AddItem(part,4.1)
		end)
	end

	for i = 0,AmountFlyingDebris do
		local DebrisVelocity = Vector3.new(math.random(-40,40),math.floor(55,105),math.random(-40,40))
		
		local newFlyingrocksize = math.random(FlyingDebrisSize[1],FlyingDebrisSize[2])
		
		local part = Instance.new("Part",ModelCircle)
		part.CanCollide = false
		part.Size = Vector3.new(0,0,0)
		part.Massless = true
		part.Name = "Debree"
		TS:Create(part,TweenInfo.new(0.2),{Size = Vector3.new(newFlyingrocksize,newFlyingrocksize,newFlyingrocksize)}):Play()

		if AccurateRepresentation == true then
			part.Material = Material
			part.Transparency = Transparency
			part.Color = Color
		else
			part.Material = Materials[math.random(1,#Materials)]
			part.Color = Colors[math.random(1,#Colors)]
		end
		
		part.Position = Position + Vector3.new(0,newFlyingrocksize,0)
		part.Velocity = DebrisVelocity
		part.AssemblyAngularVelocity = Vector3.new(math.random(-90,90),math.random(-90,90),math.random(-90,90))
		
		task.spawn(function()
			task.wait(0.5)
			part.CanCollide = FlyingDebrisCollision
		end)
		
		local FlyingRockDespawnTime1 = math.random(FlyingRockDespawnTime[1],FlyingRockDespawnTime[2])
		local FlyingRockDespawnTimeTween = math.random(1,2)
		
		task.spawn(function()
			task.wait(FlyingRockDespawnTime1)			
			local HighlightTweenInfo = {FlyingRockDespawnTimeTween, Enum.EasingStyle.Linear, Enum.EasingDirection.Out, 0, false}
			local TweenGoal1 = {Size = Vector3.new(0,0,0)}
			local RockSizeTween = Tween.Tween(part, HighlightTweenInfo, TweenGoal1)	
			Debris:AddItem(part, 5.1)			
			coroutine.wrap(spinPart)(part)						
		end)
	end
	
	return
end

return module
