New Platformer Template!

Hello Creators! We are back once again to bring you a brand new studio template, Platformer!

This template follows up on our previous modernized templates, Laser Tag and Racing:

Platformer Mechanics

We’ve created a suite of 3D platformer mechanics including double jump, dashing, rolling, and long jumping.

Jump a second time in the air to double jump.

Press shift (X/Square on a gamepad) to roll on the ground or dash in the air.

longjump

Jump immediately after rolling to trigger a long jump (careful, don’t bump into any walls!)

You can customize aspects such as speed, jump height, and cooldown in the Constants module located in ReplicatedStorage.Platformer.Constants.

Gameplay Mechanics

We’ve also included some gameplay mechanics that are commonly found in platformer games: moving platforms, one-way platforms, and coin pickups.

Moving platforms move sequentially through each of the checkpoints in the Checkpoints folder. Make sure to follow the correct naming conventions: Checkpoint1, Checkpoint2, … CheckpointN.

You can configure variables such as speed and delay at each checkpoint as attributes on the model.

You can jump up through a one-way platform but not fall down through it. Make a platform one-way by adding the OneWayPlatform tag and setting CanCollide to false.

Picking up coins increments leaderstats. Pickups are handled per-player, so all players can pick up the coins without impacting other players.

Template Structure

We’ve heard your feedback about the previous templates being complex and difficult to understand. To address this, we’re including more comments to explain each script in the template, as well as a README file in ServerScriptService that explains the overall template structure.

We’ll also revisit the previous templates to update comments and add READMEs for extra clarity.


We hope you enjoy this new template! Please leave any comments, feedback, or pictures and videos of your creations in this thread.

320 Likes

This topic was automatically opened after 10 minutes.

It’s kool I guess.
I’ll prolly never use, it but thanks for the hard work!

Edit: Why do i have 24 likes this is literally the most low effort reply ever?

68 Likes

me omw to make a celeste clone

54 Likes

It looks like a great template. Can’t wait to check it out and experiment on it! Based on the attached screenshots, the map design seems reminiscent to Roblox experiences that are high-elevated parkours in which you have to be attached to another player to complete. Perhaps an obby template based on that concept could be created in the future as well, I would suggest your team to note this idea down, because two player obby experiences tend to succeed in the obby genre nowadays!

I’ll be back with a new reply in the future after reviewing the template, thank you for this platformer release! I hope a lot of developers utilize it to make good use of it!

EDIT: Here is my review of it.

37 Likes

Its nice, I’ll probably experiment with it later.

23 Likes

Are there any public plans for future templates? With the FPS one and now this, I’m curious if there are more on the way

30 Likes

another cool template, can’t wait to try it!

22 Likes

absolute w template, pretty fun :sunglasses::sunglasses::sunglasses::sunglasses:

25 Likes

This feels very inspired by Find Everything, might just be me

21 Likes

Awesome template, it’s great to see platformers get some love!

With that being said, I do have some feedback.


I noticed a pretty major networking issue with the moving platforms that this template doesn’t account for.

If multiple players are on the moving platform or if another player is blocking its movement (e.g. a client with high latency is standing on a platform that moves up and down), the platform will jitter, get flung to the side, and quite a few other nasty side effects:

For moving obstacles in a platformer, you typically don’t want the obstacles to be purely serversided. Network ownership automatically switching will result in a jittery, non-smooth physics assembly which is gamebreaking in a platformer. This can be avoided by doing the following:

On the server:

  1. Create three physics groups, “PlayerAvatars”, “Obstacles” and “LocalAvatar”.
  2. Ensure “PlayerAvatars” cannot collide with itself or “Obstacles” via PhysicsService:CollisionGroupSetCollidable()
  3. Set all obstacles to be in the obstacles collision group, and all avatars to be in the avatar collision group

On the client:

  1. Clone the physics rig on the client, delete the server’s copy
  2. Reparent the clone to the same parent the original copy was in
  3. Remove the localplayer’s avatar from the “PlayerAvatars” collision group, and set it to be in the “LocalAvatar” collision group.

What we did here:

  • By locally cloning the physics assembly & reparenting it, we’re preventing network ownership from affecting the simulation entirely. Because this is a platformer, we want 100% smooth simulation 100% of the time. If the server had network ownership, there would be replication delay & jittery movement if on an unstable internet connection. With automatic network ownership, the platform cannot support having multiple players standing on it at once.
  • By preventing other player avatars from colliding with obstacles, we prevent other player avatars from affecting the local assembly’s physics simulation. Without this, another player’s avatar falling through your local platform can drag it with them and other problematic behaviors!

Another thing I highly recommend changing - don’t use the humanoid for movement. Instead, use Roblox’s new physics controllers. Utilizing these physics controllers with a custom state machine is infinitely better for the complex custom movement of a platformer. As someone who has made a successful platformer, using the humanoid is going to cost you a LOT of time & headache in the future. You are going to be constantly fighting with its internal states & hardcoded physics behaviors.

47 Likes

So this is what this was for?
https://devforum.roblox.com/t/i-spot-a-luacharactercontroller-actor-characters-character-abilities-and-footplanter/3074054

14 Likes

The most recent templates have been a great resource for people looking to get started in programming. I have a fascinating with seeing how other developers organize their code and design gameplay mechanics.

Kudos to the team(s) working on this kind of stuff.

15 Likes

Thanks, hopefully there will be more templates added!

12 Likes

It doesn’t even use CharacterController

10 Likes

would be cool if line runner template was redone

17 Likes

I’ll add on to this by saying that if you want to keep the platforms in sync with each other across all clients, simply don’t delete the server owned constraints and attachments. Clone only the parts in the assembly and re-parent each attachment and constraint to its corresponding doppelganger in the client owned assembly.

15 Likes

That, or syncing via some timestamp offset. Either approach works.

14 Likes

bro isnt this literally Find Everything’s moveset :sob:

15 Likes

This alone is already more fun than most games in the platform, i think i gotta re-evaluate what i think good games are, it has been a while since i had fun playing a game in Roblox. There is also a lot I can learn from this template.

Now here’s a suggestion for the next template: can you guys make something involving enemy AI, survival mechanics or zombies?

15 Likes