A, D, Space, and Shift 

You can run, jump, dash, double jump, wall slide, and wall jump.

What is This?

This is a flexible, and easy to implement platformer template, that gives you all the tools to make your own platformer game.

Life long support

 if you ever struggle to understand a line of code, comment, or need help implementing this template. Comment down below, and I will personally see to it that your problems are solved


  • Coyote Time, add a window of time where you can still jump if you click the jump button in the air.
  • Jump Buffer, add a window of time where you can still jump if you run off a platform.
  • Variable Jump Height,  if your characcter lets go of the jump button mid air they will start falling
  • Configurable Jump Heights, no more tinkering with jump power, and gravity values!
  • Acceleration, and Decceleration, make your characters feel more human
  • Air Friction, make your characters feel less floaty.
  • In code squash and stretch animations, to add punch to your animations
  • Made with a finite state machine (which you can find here)

Art assets can be found here 

Rated 5.0 out of 5 stars
(2 total ratings)
AuthorSaif Amer
Made withGodot
TagsGodot, Project template


Download NowName your own price

Click download now to get access to the following files:

PlatformerTemplate(v2).zip 98 kB


Log in with to leave a comment.

This is so amazing, thank you.

how do i do the camera?


i was struggling to do a good platformer movement this will really help me . Thanks !


how can I add new states like an attack state, im a little lost

(1 edit)

Yup, to add new states you just need to create functions for the enter, exit, and step logic an example for an attack state would be 

func attack_emter_logic():


func attack_logic():


func attack_exit_logic():


Hi, one question for the airFriction. If i increase the number or lover the number nothing changes. How could i change the air movement speed of the player? Thank you in advance. 

Holy, your completely right I cant believe I didn't catch that. I've updated the files in the GitHub and itch, but if you don't wanna go through the hassle of re downloading it just swap out this line in the move horizontally function:

"currentSpeed = move_toward(currentSpeed, maxSpeed , acceleration"

to this

"currentSpeed = move_toward(currentSpeed, maxSpeed - airFriction, acceleration)"

can I use animated sprites instead of the animation player?

Im sure you can, but I'm not really experienced in using the animated sprite node


I finally had time to actually try this one

My goodness, I like how clean and easy to understand AND extend this template

I added sprinting, then extended double jumps to allow multiple jumps but with a limit. Actually finishing on time for game jams is gonna be cinch... if I stop procrastinating, just maybe. Cries in a corner. 


You are a fucking god my man, I am so sick of creating basic state machines and player controllers at the start of every game prototype <3


I cannot download the asset--- when I click "Download Now" it opens this same page in a new tab.

If your your having trouble downloading the template from itch you could try the github

Thank you!!

(1 edit) (+1)

This is very nice of you to do, keep up the good work! Also is there a way to make the character squash when falling down?

Thank you so much for your kind words. The character already does squash on landing by calling the squash_stretch() function in the fall state when checking if you are on the floor. You can change the amount it squashes, and stretches by changing the landingSquash, and landingStretch vars

oh ok, I get it now thankyou for your respond!

(2 edits) (+1)

hi how do i add a new sprite sheet (nice template i really like it)

To change the sprites on the player first you need to go to the player.tscn file, then click on the sprite node, and change the texture property. 

Next you need to adjust the hframes, and vframes values to the amount of rows and columns your sprite sheet has. 

Lastly you need to click on the AnimationPlayer node and remake the animations to fit how many frames your spritesheet has.

This video goes over the whole process: 


I cant run the code, the error I'm given is that it can't find the function move_towards. Am i missing something?

What version of Godot are you using?


Ah, I was using 3.1, it fixed itself once i tried running it in 3.2!