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