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