
Key RequiredUniversal

local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
-- Variables
local spawnDistance = 4 -- 4 meters
local loadingTime = 10 -- Faster loading time (10 seconds for faster loading)
local circleSize = 4 -- size of the circle block
local isAccepted = false
-- Create a loading bar GUI
local screenGui = Instance.new("ScreenGui")
screenGui.Parent = player.PlayerGui
local loadingBarBackground = Instance.new("Frame")
loadingBarBackground.Size = UDim2.new(0, 300, 0, 50)
loadingBarBackground.Position = UDim2.new(0.5, -150, 0.9, -25)
loadingBarBackground.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
loadingBarBackground.BackgroundTransparency = 0.6
loadingBarBackground.Parent = screenGui
local loadingBar = Instance.new("Frame")
loadingBar.Size = UDim2.new(0, 0, 1, 0)
loadingBar.BackgroundColor3 = Color3.fromRGB(0, 255, 0)
loadingBar.Parent = loadingBarBackground
-- Function to update loading bar
local function updateLoadingBar(progress)
loadingBar.Size = UDim2.new(progress, 0, 1, 0)
end
-- Function to create the bouncy circle block
local function createBouncyCircle()
local part = Instance.new("Part")
part.Shape = Enum.PartType.Ball
part.Size = Vector3.new(circleSize, circleSize, circleSize)
part.Position = character.HumanoidRootPart.Position + character.HumanoidRootPart.CFrame.LookVector * spawnDistance
part.Anchored = false
part.CanCollide = true
part.Material = Enum.Material.SmoothPlastic
part.Color = Color3.fromRGB(0, 0, 139) -- Dark Blue as initial color
part.Parent = workspace
-- Change color every 2 seconds between dark cyan and dark blue
local colors = {Color3.fromRGB(0, 139, 139), Color3.fromRGB(0, 0, 139)}
local colorIndex = 1
while part do
wait(2)
colorIndex = (colorIndex % #colors) + 1
part.Color = colors[colorIndex]
end
-- Add bouncy properties (using BodyVelocity and BodyGyro)
local bodyVelocity = Instance.new("BodyVelocity")
bodyVelocity.MaxForce = Vector3.new(10000, 10000, 10000)
bodyVelocity.Velocity = Vector3.new(0, 0, 0) -- Neutral velocity initially
bodyVelocity.Parent = part
local bodyGyro = Instance.new("BodyGyro")
bodyGyro.MaxTorque = Vector3.new(10000, 10000, 10000)
bodyGyro.CFrame = part.CFrame
bodyGyro.Parent = part
-- Drift and bounce physics
local moonGravity = Vector3.new(0, -32.7, 0) -- Moon gravity (1/6th of Earth's gravity)
local driftSpeed = 20 -- Adjust drift speed
local bounceForce = 50 -- Bounciness on collision
-- Function to apply drifting and gravity
game:GetService("RunService").Heartbeat:Connect(function()
if part and character and character:FindFirstChild("HumanoidRootPart") then
-- Apply Moon gravity to make the ball fall naturally
bodyVelocity.Velocity = bodyVelocity.Velocity + moonGravity
-- Drift movement towards the player with smooth control
local driftDirection = (character.HumanoidRootPart.Position - part.Position).unit
bodyVelocity.Velocity = bodyVelocity.Velocity + (driftDirection * driftSpeed)
-- Bouncing effect when hitting surfaces
part.Touched:Connect(function(hit)
local direction = (part.Position - hit.Position).unit
local bounce = direction * bounceForce
bodyVelocity.Velocity = bodyVelocity.Velocity + bounce
end)
end
end)
end
-- Start loading animation
local elapsedTime = 0
while elapsedTime < loadingTime do
elapsedTime = elapsedTime + 0.1
local progress = math.min(elapsedTime / loadingTime, 1)
updateLoadingBar(progress)
wait(0.1)
end
-- After loading, spawn the circle if accepted
if elapsedTime >= loadingTime then
isAccepted = true
-- Remove the loading bar if accepted or not
screenGui:Destroy()
if isAccepted then
createBouncyCircle()
else
-- Optionally handle the case where the user doesn't accept (although it's set to always accept after loading)
print("Spawn failed!")
end
end



Forgot to say, that its clientsided, so people can also touch it with their avatar, but they cant see it, and touch it in fling things and people
Client-sided means that only you can see what you're doing, and this script is client-sided; other people cannot see or touch the ball because it's only happening on your side of the server.