Expandable Platformer Controller 2D - Godot
Expandable Character controller for 2D platformers based off the work of Noasey.
Godot Asset Store:
Github Repo:
Source material:
- https://github.com/Noah-Erz/Ultimate-Platformer-Controller-2D
- https://noasey.itch.io/ultimate-2d-platformer-controller
Pig assets:
In addition to the amazing parametrization on the base project by Noasey now movement modes are modular. So unneeded code does not live in the character script and so expansion is easier since the code doesn't have to be touched.
There's an included demo that uses all the previously included movement types now made into modules. The debug menu used in the demo can be expanded easily for extra modules, just use the included SpecialMovementSample.gd file to add new movement modes.
All the code is commented and sample movement types have been provided in the source code so you can expand the controller easily.
Default controls for the demo:
- Arrow keys for movement
- Z for jumping
- X for dash and roll
- C for latch and ground pound
Expandable Platformer Controller 2D © 2024 by Messy Bytes is licensed under CC BY 4.0
Status | Released |
Category | Tool |
Platforms | HTML5 |
Rating | Rated 5.0 out of 5 stars (1 total ratings) |
Author | Messy Bytes |
Genre | Platformer |
Made with | Godot |
Tags | 2D, Controller, Godot |
Comments
Log in with itch.io to leave a comment.
Hi! I found your tool on the Godot AssetLib and had tried to download from all sources (GitHub, Itch and Godot Asset Library). I have found that your demo works as expected but I have not been able to extend it to my own projects.
I'm not sure what's the exact cause of the problem, but I can't seem to expose the export_custom for the Inputs and Animations to the editor. Your demo with the character already set up has them on the editor, but if I try to make a new character using the same script, they don't have the inputs and animation exports. If I detach and reattach the script to the character in the demo, it wouldn't show up as well. If I change the PROPERTY_USAGE flag to something like PROPERTY_USAGE_DEFAULT, it would expose the Dictionary object, but not the list of button like yours has. Adding key/value to the Dictionary don't do anything either.
Editor Images link
Other weird errors also pop up like the AppliedValues object is instantiated but not assigned to the variable in the Controller object. I'm still trying to figure out how I can use this tool in my own projects. Any help you can offer is appreciated.
Hey there. Thanks for checking out this project.


I just downloaded the project from the asset lib in one other existing project of mine in 4.4.1 and had no issues.
The export_custom is there only to store the values you set up on the property list, in latest versions it would be the same as export_storage. The property list is populated on _get_property_list().
You can see here that it gets the list of animations to populate the editor with and it shows them one by one. That's so the editor shows you all required buttons or animations but they are stored in a packed manner instead of a thousand variables.
In your screenshots you can see the Input and Animation group of parameters, those are where you set up.
Hi, thank you for replying to me.
I currently still couldn't quite use it as intended, as there are strange bugs. But I'll keep investigate.
In my current project right now, I decided to implement my own custom player controller. Your tool (and the original one from Noasey) gave me some good ideas on how I can implement my own, so even if I don't end up using your tool, it was valuable, so I appreciate your work.
Amazing! Yes, in my opinion that's the end goal. I believe these modular tools are more of a teaching implement rather than the final solution. Use it to learn how you want your game to behave then make it your own. You rock!
Thank you for your kind words. Partly thanks to your encouragement, I have also shared one of my tools I'm using to develop my project on my page. It's a tool to create pathfinding behaviors in a 2D platformer (that I also extend from the work of another creator, TheSolarString on YouTube). I hope that it can also help other people in developing their own games.
Godot Asset Lib asset is approval pending.
Congrats! I took a look and left you a comment. Great work :D
i just went to try this out but i get a shed load of errors on 4.2.2 any chance you can check to see if works with the stable version, tried to fix with gpt but just adds more errors.
e.g.
In Godot 4, the
@export_custom
function has been removed, and the@export
annotation is now used for exposing properties to the editor.then also the testscene does not work says it has parsing issues, i checked scripts seems debug got loads of errors.
im very intrested in getting this working for my project if you can check would be great, Ultimate-Platformer-Controller-2D seems to work fine
That's weird. This was created on 4.3 so no issues Should be there. Also Godot 4.4.1 100% supports #export_custom. I just ran the project as is in 4.4.1 and had no issues. Have you tried downloading from the AssetLib? Don-t forget to set up all requested button inputs.
Hey, I really like what you’ve done with this controller! However, I’ve noticed a bug with the wall jump. When jumping off the left wall, everything works fine, but when jumping off the right wall, the jump feels significantly more powerful. You can see this issue in the demo you posted.
Ooooh. I'll look into it! Thank you for checking it out and letting me know :D
With pleasure! Let me know if you find any solution. 😊 However, I wanted to ask you something: how can I add another animation? I’ve been trying for 3 hours, but I just can’t get it to work. ^^
Your animations should be defined in the animated sprite. Animations will appear on the animation section of the inspector (that section can be seen in the screenshot I included in this page, itch isn't letting me add it to this comment).
If you are not seeing it there after adding them to the animated sprite then it might be some issue with the refresh function, reload the scene and it should be there.
The way those dropdowns world is each movement type has some animations defined. When those movement types call for an animation they use the animation you define on the inspector. So for example, if you make a new animation in the animated sprite for running you can set it for the run variable in the animation section and you will see it when you start running.
Hey there! I like what you did here. But I think you forgot about wall jumping which is one of the most important aspect of a platformer.
There's wall jumping included! It should be turned on by default. Check the wall jumping section of the settings. It works like in megaman x and you can latch to the wall with C.
Niceeeeee! Thanks for contributing!
No, thank you for sharing your work. All I did was make it modular and expandable. Your work inspired me :D