Make Bouncy Balls like in wipeout

Hello DevForum.

Today, I’ve considered making a game like wipeout, and one of the most famous things in wipeout, besides the epic fail complimations, is the bouncy balls. I would like to know how I could make a ball, that on the touch of a humanoid character, it bounces the character and somewhat makes it more difficult to get to the next bouncy ball, all the way until they get to the end of that part of the course. Any help is appreciated,
Thanks!

-SourSkittIes

7 Likes

Hey! So there are many ways to do this. You could use body positions and just make the Y vector force to a high value.

Or you can just set the character’s JumpPower to something like 200 and then make the Humanoid property called Jumped set to true so it forces them to jump and then set it back to normal.

This probably isn’t the best method, but it would be how I would do it. I never saw the need to make anything of this sort so don’t take my word for this being the most efficient way of doing this.

I would use CollectionService and tag the bouncy balls but for the sake of this tutorial I’ll just keep it simple and use a script inside of the part.

Note: I haven’t tested this so it may not function correctly, but this is how it should look to some extent.

local deb = false

local BOOST_JUMP = 200
local NORMAL_JUMP = 100

script.Parent.Touched:Connect(function(hit)
    local player = hit.Parent:FindFirstAncestorWhichIsA('Model')
    local humanoid = player:FindFirstChild('Humanoid')
    if player and humanoid and not deb then
         humanoid.JumpPower = JUMP_POWER
         humanoid.Jump = true
         humanoid.JumpPower = NORMAL_JUMP
         deb = true
         wait(2)
         deb = false
    end
end)
5 Likes

You could kind of make it bouncy by adding a body force or something to the HumanoidRootPart of the character like:

local part = script.Parent
local db = false
part.Touched:Connect(function(hit)
        if db == false then
               db = true
               local force = Instance.new("BodyForce")
                -- You could mess with the properties here
              force.Parent =  hit.Parent:FindFirstChild("HumanoidRootPart")
              debris:AddItem(force, 1)
              wait(1)
              db = false
        end
        return
end)

Zero idea if it will work. But, that should be somewhat accurate. I don’t know the properties of a body force that you need to edit off the top of my head but you could play around with it! :smiley:

2 Likes
local alreadyUsed = false
local velocity = 200

script.Parent.Touched:Connect(function(hit)
    local chr = hit.Parent
    if chr:IsA("Model") and chr:FindFirstChild("Humanoid") then
        if alreadyUsed == false then
          script.Parent.Velocity = Vector3.new(0, velocity, 0)
          alreadyUsed = true
          wait(3)
          alreadyUsed = false
        --should throw a player INSANELY high, fast.  Change velocity to something more suitable. :)--
        end
    end
end)
3 Likes

Thank you all, I will test and edit the scripts you provided and if it doesn’t work out, I’ll add to the post :+1::+1::+1:

Sweet, thanks! :slightly_smiling_face:

hey there. Just a 5-hour-later checkup, how did it go?

It went pretty good, I couldn’t get the first script to work for some reason, even when I edited it, the second script I toyed around with properties and it worked well, and your script I also toyed around with velocity and it ended up working out pretty well, overall I picked yours since it seemed the simplest and had the lowest amount of code, thank you everyone else for the help though, it really helped me!

1 Like

After a bit more testing, I realized that on every 3rd bounce it bounces higher than the other previous bounces, is there any way that I can edit this to either make it less high or non-existent, or completely random? (I just don’t know what part of the script it is)

Yay! I’m glad you found one! :smiley:

1 Like

oh, add this after alreadyUsed = false:

script.Parent.Velocity = Vector3.new(0,0,0)

That should work. Also, make sure to mark the solution when you find one! :slight_smile:

Did this work?

1 Like

Here, I modified the one using BodyForces.

local db = false
local force1 = 2500
local forcelifetime = 1
local debouncetime = 1
part.Touched:Connect(function(hit)
        if db == false then
               db = true
               local force = Instance.new("BodyForce")
                -- You could mess with the properties here
              force.Parent =  hit.Parent:FindFirstChild("HumanoidRootPart")
              game:GetService("Debris"):AddItem(force, forcelifetime)
			force.Force = Vector3.new(0,force1, 0)
              wait(debouncetime)
              db = false
        end
        return
end)

There.

3 Likes

Ok, thanks for doing that. I could not for the life of me remember how to change the force of a body force. (I did not have studio open…) :smiley:

1 Like