I’ve been keeping up with your posts, and I might’ve came up with a system that could work for you. Here it is, hope you don’t mind that it isn’t formatted, it’s just super hard to write up code using the 4-space thing, it usually looks terrible every time I try it. This script would assume to be inside your ball object. Two other notes, I didn’t test this, and I didn’t take in account for Y velocity.
local slowing_down = false
local delta = .1 --Value/speed for the for loop. Too small of a number may provide you with float inaccuracies.
local function slow_down()
for x = 0,1,delta do
script.Parent.Velocity = Vector3.new(script.Parent.Velocity.X * (1 - x),script.Parent.Velocity.Y,script.Parent.Velocity.Z * (1 - x))
slowing_down = false
local vel = script.Parent.Velocity
if not slowing_down and (math.abs(vel.X) > 0 or math.abs(vel.Z) > 0) then
slowing_down = true