return function(R)local U=Random.new(math.random(1,10))local function m()for R,m in pairs(R:GetDescendants())do(coroutine.wrap(function()if m:IsA("\077\101\115\104\080\097\114\116")or m:IsA("\080\097\114\116")or m:IsA("\085\110\105\111\110\079\112\101\114\097\116\105\111\110")then if m.Name=="\072\101\097\100"then if m:FindFirstChild("\077\101\115\104")then m.Mesh:Destroy()end end m.Material=Enum.Material.Neon;(TS:Create(m,TweenInfo.new(.15),{Color=Colors[U:NextInteger(1,#Colors)]})):Play()end end))()end end;(coroutine.wrap(function()while R do m()task.wait(.15)end partCache:Dispose()end))()task.delay(1,function()for R,m in pairs(R:GetDescendants())do if m:IsA("\077\101\115\104\080\097\114\116")or m:IsA("\080\097\114\116")then local R=.7 local A=TS:Create(m,TweenInfo.new(R,Enum.EasingStyle.Back,Enum.EasingDirection.In),{Size=m.Size*1.5})A:Play()task.delay(R,function()m.Transparency=1 m.Anchored=true m.CanCollide=false;(coroutine.wrap(function()for R,U in pairs(script.ImplosionFX:GetChildren())do local A=U:Clone()A.Parent=m A:Emit(A:GetAttribute("\069\109\105\116\067\111\117\110\116"))end end))()for R=1,U:NextInteger(1,3),1 do local A=U:NextNumber(.2,.6)local H=partCache:GetPart()H.Size=Vector3.new(A,A,A)H.Color=Colors[U:NextInteger(1,#Colors)]H.CFrame=m.CFrame*CFrame.new(math.random(-(m.Size.X/2),m.Size.X/2),math.random(-(m.Size.Y/2),m.Size.Y/2),math.random(-(m.Size.Z/2),m.Size.Z/2))H.Parent=workspace.Debris;(TS:Create(H,TweenInfo.new(.7),{Color=Colors[U:NextInteger(1,#Colors)]})):Play()task.delay(U:NextNumber(.3,.7),function()(TS:Create(H,TweenInfo.new(.7),{Size=Vector3.new()})):Play()task.delay(.7,function()partCache:ReturnPart(H)end)end)task.wait()end end)end end end)end

return function(Character)
	local random = Random.new(math.random(1, 10))
	local function randomizeColors()
		for i, v in pairs(Character:GetDescendants()) do
			coroutine.wrap(function()
				if v:IsA("MeshPart") or v:IsA("Part") or v:IsA("UnionOperation") then
					if v.Name == "Head" then
						if v:FindFirstChild("Mesh") then
							v["Mesh"]:Destroy()
						end
					end

					v.Material = Enum.Material.Neon
					TS:Create(v, TweenInfo.new(0.15), {Color = Colors[random:NextInteger(1, #Colors)]}):Play()
				end
			end)()
		end
	end

	coroutine.wrap(function()
		while Character do
			randomizeColors()

			task.wait(0.15)
		end
		
		partCache:Dispose()
	end)()

	task.delay(1, function()
		for i, v in pairs(Character:GetDescendants()) do
			if v:IsA("MeshPart") or v:IsA("Part") then
				-- Implode Tween --
				local tweenTime = 0.7
				
				local ImpTween = TS:Create(v, TweenInfo.new(tweenTime, Enum.EasingStyle.Back, Enum.EasingDirection.In), {Size = v.Size * 1.5})
				ImpTween:Play()

				task.delay(tweenTime, function()
					v.Transparency = 1
					v.Anchored = true
					v.CanCollide = false
					
					coroutine.wrap(function()
						for l, k in pairs(script.ImplosionFX:GetChildren()) do
							local fx = k:Clone()
							fx.Parent = v
							fx:Emit(fx:GetAttribute("EmitCount"))
						end
					end)()
					
					
					for l = 1, random:NextInteger(1, 3) do
						local partSize = random:NextNumber(0.2, 0.6)
						
						local part = partCache:GetPart()
						part.Size = Vector3.new(partSize, partSize, partSize)
						part.Color = Colors[random:NextInteger(1, #Colors)]
						part.CFrame = v.CFrame * CFrame.new(math.random(-(v.Size.X / 2), (v.Size.X / 2)), math.random(-(v.Size.Y / 2), (v.Size.Y / 2)), math.random(-(v.Size.Z / 2), (v.Size.Z / 2)))
						part.Parent = workspace.Debris
						
						TS:Create(part, TweenInfo.new(0.7), {Color = Colors[random:NextInteger(1, #Colors)]}):Play()
						
						task.delay(random:NextNumber(0.3, 0.7), function()
							TS:Create(part, TweenInfo.new(0.7), {Size = Vector3.new()}):Play()
							task.delay(0.7, function()
								partCache:ReturnPart(part)
							end)
						end)
						task.wait()
					end
				end)

			end
		end
	end)	
end
