Characters can jump before touching the ground

Since the new jump power and jump height properties were released, Humanoids are now capable of jumping again before they’ve touched the ground.

This happens when you hold down space bar to continuously jump and is more noticeable with certain settings.

You can see below on a custom character as well as a regular character that while holding down spacebar, additional jumps occur before the character touches the ground, and even gives them additional height.

(JumpPower 60, Gravity 196.2)

(JumpPower 13, Gravity 35 - Realistic world preset)

This has been mentioned in the announcement thread but should be extracted into its own thread.

14 Likes

I wonder if this is just a consequence of animations being slow to stop. Can you try jumping with the spider again, but this time with the jump animations disabled?

1 Like

I have noticed this too. With the script I use, the character can more or less fly by holding the spacebar.

This character’s jump height was fine previously. This issue also occurs on a regular character.
Nevertheless, yes it does still occur.

3 Likes

.Touched doesn’t work while holding jump due to this issue.

When holding the jump key on a part that uses the .Touched event it fails to fire most of the time and only fires when a player is walking or jumping at a very slow rate.

The code I used for printing ‘hit’ was:

script.Parent.Touched:Connect(function(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")
	
	if humanoid then
		print("Hit!")
	end
end)

I am assuming this has been a bug for a very long amount of time but as I usually don’t use .Touched I am unsure as to when this would’ve started.

(Using .Touched on a slope while jumping)
https://streamable.com/e/bqclwb

(Using .Touched on regular flat land while jumping)
https://streamable.com/e/ccvxm6

  • Create a part with the script above or any script that uses .Touched
  • Hold the space key (or any equivelant) and continuously jump on the part
  • It should fail to detect the collision and not fire .Touched

System Specs:
OS: Windows 10 Home
CPU: Intel I7-9700 - 3.00GHz
GPU: NVIDIA RTX-2070 Super
Memory: 16GB Ram

1 Like

This is still happening and allows players in my game to get to places they shouldn’t be able to, allows them to avoid touching hazards on the ground, and makes my game look broken in extreme cases.

6 Likes

I ran into this problem today and did some testing.
I did a small override on the default jump behavior, placing a mandatory 1 second delay before the player can jump, I won’t go into exactly how that was done but more or less it looks like this:

if jumpedRecently then
else
    jumpedRecently = true
    spawn(function() 
        self.humanoid.Jump = self.activeController:GetIsJumping() or (self.touchJumpController and self.touchJumpController:GetIsJumping())
        wait(1)
        jumpedRecently = false
    end)
end

The problem still occurs, but instead of double jumping you get sporadic alternations between a normal jump and “messed up half jump.”

This tells us that the problem is most likely not related to how the input is being received but more so how the jump power is being delivered or calculated against the gravity.

tl;dr: After a small test, I think we can say with more clarity now, that this is more of a physics problem than an input issue.

1 Like

This is still happening FYI. My players periodically bring this issue up as a bug with my game, while I can not do anything sane to prevent it.

2 Likes

The only feasible way to mitigate this is by adding a delay after each .Landed, and even then that can cause some unintended behavior

local Character = script.Parent
local Humanoid = Character:WaitForChild("Humanoid")

local onStateChanged = Humanoid.StateChanged:Connect(function(_,new)
	if new == Enum.HumanoidStateType.Jumping then
		Humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
		task.delay(8, Humanoid.SetStateEnabled,Humanoid,Enum.HumanoidStateType.Jumping, true) -- Incase of Edge Cases
	end
	if new == Enum.HumanoidStateType.Landed then
		task.delay(0.2, Humanoid.SetStateEnabled,Humanoid,Enum.HumanoidStateType.Jumping, true)
	end
end)

Humanoid.Died:Once(function()
	onStateChanged:Disconnect()
end)

As with touched events, I’ve found the issue comes more down to the glitched way TouchTransmitters react with the jumping animation rather than this bug, and the only way I can think of fixing this is either having another non-collideable part above or using a custom touched implementation (Both of course being headaches)

In my place, I have Gravity at 50 and JumpPower at 13.342. The character is able to jump before touches the ground, exactly as shown in the videos PeZsmistic shared. Really hoping this bug gets looked into by staff.

4 Likes

I had this issue recently, and in my case the solution was to resize and reposition HumanoidRootPart.