Fe Hat Orbit Script -

angle = angle + speed * dt if angle > math.pi * 2 then angle = angle - math.pi * 2 end

-- Run every render frame for smooth movement RunService.RenderStepped:Connect(updateOrbit) FE Hat Orbit Script

-- ModuleScript: HatOrbitController local HatOrbitController = {} function HatOrbitController.startOrbit(hatHandle, targetPart, radius, speed, heightOffset) local angle = 0 local connection angle = angle + speed * dt if angle > math

local y = heightOffset + math.sin(angle * 2) * 0.5 Store hats in a table and assign each a phase offset: FE Hat Orbit Script

-- Apply new CFrame to hat handle hat.Handle.CFrame = newCFrame end

[ x = r \cdot \cos(\theta + \textphase) ] [ z = r \cdot \sin(\theta + \textphase) ] or for 3D orbits: [ y = r_y \cdot \sin(\textvertical angle) ]