What exactly is JumpPower

So, I’m trying to achieve an effect in-game as if the time slowed down by manipulating the player’s walking speed and jumping power. The problem is I’m not sure how can I do this for the jumping part mostly.

When I looked at the documentation for JumpPower, it simply states that it is the applied upwards force for the player to jump. But the weird thing is, if this JumpPower really is a force then it’s simply not enough of a force for the player to actually jump. At least that’s what I tried by applying a vertical VectorForce to the HumanoidRootPart using it’s RootAttachment. Did I miscalculate the player’s mass, is it the fact that JumpPower is based on HumanoidRootPart’s AssemblyMass? I’m not sure.

So my questions are, what exactly is JumpPower and how is it used to make the player jump?

And, NO. JumpPower is not the vertical velocity for sure. It does not return the correct JumpHeight. The actual velocity is around 53,1.

Here’s that documentation I was talking about:

UPDATE
From taking a look at core scripts, JumpPower does seem to be used to set velocity instead of a force. I’m sorry for my mistake.

What I would recommend for the Jumping part is by changing the gravity.

A little off-topic from your post, but judging from what you want which is manipulation of WalkSpeed and JumpPower/Height, you could try tinkering with workspace’s Gravity property.

However, if you dislike this idea, you could try using LinearVelocity to control movement.

I’m trying to achieve this by not changing the gravity, could you explain the idea of using LinearVelocity a bit more?

Sure, although I’m not too experienced in using LinearVelocity so if anyone sees any error with my explanation, please correct me.

LinearVelocity is the application of force on an object to maintain movement or velocity. The “force” of the object can be controlled through it’s property MaxForce, and the direction can be controlled using VectorVelocity.

The idea of using LinearVelocity for your JumpPower would be related to controlling the MaxForce and the VectorVelocity.

We can achieve this by only getting the Y value of a Vector:

local JumpPower = Vector3.new(0, 30, 0); -- Y Value only

Now, only having this code and applying it onto LinearVelocity will cause it to infinitely send you into the air. To achieve our goal of creating a slow-motion jump, we will have to create a decay to lower our Y value back to 0. We can do this by looping:

local JumpPower = Vector3.new(0, 30, 0); -- Y Value only
local Humanoid = YOUR_CHARACTERS_HUMANOID_HERE;
local HumanoidRootPart = YOUR_CHARACTERS_HUMANOIDROOTPART_HERE;

Humanoid.Jumping:Connect(function()
	local YValue = JumpPower.Y;

	while task.wait(.1) do
		HumanoidRootPart.LinearVelocity.VectorVelocity = Vector3.new(0, YValue - 1, 0);
		if YValue == 0 then
			break;
		end
	end
end)

I haven’t tested this code, but this is what I would imagine you can do. Just note that LinearVelocity is an object that you have to add to the character yourself. I hope this helps or gives you a sort of inspiration and idea.