[Release] Platformer character controller

Oh, thank you so much. You’re an angel :slight_smile:

1 Like

Thanks a lot, I see so much Mario 64 references so I might even add this to Mario madness lol.

3 Likes

Awesome! This is great. I will probably look into the code and see how it works. I am pretty new to scripting (2 years) so I am still learning.

1 Like

Does this happen to anyone else?
There’s an object called “(Player)'s Vehicle” that I’m pretty sure is charge of the dive move. Whenever I press play to test my game, this vehicle spawns and rolls away from the player, and causes the player to get shoved away whenever I get near it. However, the vehicle disappears after I do the dive move, and will then only appear when a dive is performed again.
Here’s a video:
robloxapp-20200621-1900008.wmv (3.6 MB)
Is there a way to fix this?

2 Likes

What do you mean by this. you cant even import the ID’S.

2 Likes

See this thread/answer:

3 Likes

Epic dude! good job, really liked this character controller

1 Like

Thank you! I will definitely use this in the future. I have already plans to add this to my game ideas. :grin:

1 Like

Hello, after a while of looking around I finally found THIS character torso “Lerp-like” movement, I’m quite new to scripting so I was wondering if anyone could help.

I need this movement for a game I am attempting to make, however I ONLY need the character moving/leaning, camera look at, Jumping (One jump) also the High jump and falling.
I’ve tried to edit the scripts but after a few hours I still couldn’t get it to work with only those. could anyone help?!

1 Like

How did you do this?
Until now i still don’t know how to do this

EDIT: Nvm i made one
i guess i just have to try

1 Like

I know this is an old, old post, but I’m having an issue.
I reuploaded and changed all the animations, but they all work except for CrouchIdle and CrouchRun. Can someone please let me know what I’m doing wrong?

Edit: Here’s a screenshot of what happens when you hold crouch.
Character just freezes up and stands there.
screenshot

Edit 2: Fixed it! For anyone else having this problem, copy the ID of your reuploaded animation and place it into its respective place in the “Animate” LocalScript under StarterCharacterScripts.

6 Likes

lol this is so awesome! It reminds me a lot of Super Mario 64, good memories :') Really great module btw!

1 Like

I love this! It’s really smooth and I think I may use this for something. :eyes:

Since this work on Computer and on Xbox, how can you extend it for Mobile Users? I know you have to add some Buttons and Stuff like that but im not very well trusted with Stuff like that.

1 Like

Man, do I love that game, It’s the perfect game to replicate in Roblox!

Do you guys think this can still work, I also wonder if this can work on R6?

I will use this for my 2.5D game

Please tell me how im to small brain to know how to…

this didn’t work for me :frowning: still don’t see crouchidle and crouch run

can you tell me which controls the wall jump part?
tried to do it
and got a few errors


local function reflect(v, normal)
	return -2*v:Dot(normal)*normal + v;
end

function moveSet:wallJump()
	local hrpCF = self.hrp.CFrame;
	local ray = Ray.new(hrpCF * CFrame.new(0, self.hrp.Size.y/2, 0).p, 4*hrpCF.lookVector);
	local hit, pos, normal, material = game.Workspace:FindPartOnRay(ray, self.character);

	if not (self.isWallJumpActive and self._canWallJump and self:inAir() and hit and (not self._lastWall or self._lastWall:Dot(normal) < 0)) then
		return false;
	end

	self._isWallJumping = true;
	self._canWallJump = false;
	self._lastWall = normal;
	self._totalWallJumpCount = self._totalWallJumpCount + 1;

	self._jumpCount = 0;
	self:jump(false);

	local move = self.humanoid.MoveDirection;
	move = (move:Dot(move) > 0 and move:Dot(normal) < 0) and move or hrpCF.lookVector;
	self.humanControl:setMode(Enum.HumanoidControlType.Locked, reflect(move, normal));

	local count = self._totalWallJumpCount;
	delay(0.2, function()
		if (self._totalWallJumpCount == count) then
			self._isWallJumping = false;
			self._canWallJump = true;
			self.humanControl:setMode(Enum.HumanoidControlType.Default);
		end
	end)

	return true;
end

self._isWallJumping = false;
self._canWallJump = true;
self._lastWall = nil;
self._totalWallJumpCount = 0;

self.isWallJumpActive = true;

function moveSet:wallJump()
	local hrpCF = self.hrp.CFrame;
	local ray = Ray.new(hrpCF * CFrame.new(0, self.hrp.Size.y/2, 0).p, 4*hrpCF.lookVector);
	local hit, pos, normal, material = game.Workspace:FindPartOnRay(ray, self.character);

	if not (self.isWallJumpActive and self._canWallJump and self:inAir() and hit and (not self._lastWall or self._lastWall:Dot(normal) < 0)) then
		return false;
	end