local RunService = game:GetService("RunService") local Players = game:GetService("Players") local lp = Players.LocalPlayer -- Configuration local radius = 25 local partCount = 40 local spinSpeed = 0.5 local pulseSpeed = 2 -- How fast it breaths local ringParts = {} local isSpinning = false local function getRemote() local tool = lp.Character and lp.Character:FindFirstChild("Building Tools") return tool and tool:FindFirstChild("SyncAPI") and tool.SyncAPI:FindFirstChild("ServerEndpoint") end -- 1. Build Function (Fibonacci Lattice) local function buildPulsingSphere() local remote = getRemote() if not remote then return end local root = lp.Character.HumanoidRootPart local phi = math.pi * (3 - math.sqrt(5)) for i = 1, partCount do local y = 1 - (i / (partCount - 1)) * 2 local r = math.sqrt(1 - y * y) local theta = phi * i local vec = Vector3.new(math.cos(theta) * r, y, math.sin(theta) * r) local part = remote:InvokeServer("CreatePart1", "Normal", CFrame.new(root.Position + vec * radius), workspace) if part then remote:InvokeServer("SyncResize1", {{Part = part, CFrame = part.CFrame, Size = Vector3.new(4, 4, 4)}}) remote:InvokeServer("CreateDecorations", {{Part = part, DecorationType = "Fire"}}) table.insert(ringParts, {part = part, vec = vec}) end if i % 8 == 0 then task.wait(0.1) end end isSpinning = true end -- 2. Pulse & Spin Loop local timePassed = 0 RunService.Heartbeat:Connect(function(dt) if not isSpinning or #ringParts == 0 then return end local remote = getRemote() local root = lp.Character and lp.Character:FindFirstChild("HumanoidRootPart") if not remote or not root then return end timePassed = timePassed + dt local wave = (math.sin(timePassed * pulseSpeed) + 1) / 2 -- Normalizes sine to 0 - 1 range local moveData = {} local fireData = {} local colorData = {} local rotationCFrame = CFrame.Angles(0, timePassed * spinSpeed, timePassed * (spinSpeed/2)) for _, data in ipairs(ringParts) do local p = data.part if p and p.Parent then -- Update Position local finalPos = root.Position + (rotationCFrame * data.vec * radius) table.insert(moveData, {Part = p, CFrame = CFrame.new(finalPos, root.Position)}) -- Batch Color Pulse (Black to Blue) table.insert(colorData, { Part = p, Color = Color3.new(0, wave * 0.5, wave), UnionColoring = true }) -- Batch Fire Pulse (Size 5 to 20) table.insert(fireData, { Part = p, DecorationType = "Fire", Size = 5 + (wave * 15), Color = Color3.new(0, 0.5, 1) }) end end -- Send Batch Updates remote:InvokeServer("SyncMove1", moveData) remote:InvokeServer("SyncColor1", colorData) remote:InvokeServer("SyncDecorate", fireData) end) buildPulsingSphere()