If you’re making a platformer, you’ve got to get your main character feeling good. Because sloppy physics, unresponsive controls, floaty jumps, and imprecise movement are completely toxic in platformer design. So it’s vitally important that you get this stuff right.
And if you wanted a character to learn from, you could do a lot worse than looking at Madeline - a twenty-something wannabe mountain climber, and protagonist of 2018’s award-winning platformer, Celeste. Her controls are tight, precise, and responsive. You can put her exactly where you want, and ping from platform to platform with fluidity and accuracy.
And the game not only works at a super casual level, but it even holds up when you delve deep into Celeste’s toughest challenges. So how, exactly, is this achieved? Well, to figure it out, I went on a bit of a journey.
I pulled apart the game’s code. I went frame-by-frame on Madeline’s animation. I chatted to Celeste speedrunners.
And I spoke to a couple people who know the game better than anyone else… MATT: I’m Matt Thorson, director and co-creator of Celeste. NOEL: I’m Noel Berry and I’m programmer and co-creator of Celeste. And so, after all that, here’s what I learned about the killer controls of Celeste.
So let’s go back to the very beginning and look at Madeline’s most basic move: her run. A character’s run can be split into three parts: acceleration, top speed, and deceleration. As in, once you start moving the stick, how long does it take the hero to get up to top speed?
And how long does it take to stop, when you let go? Getting these two curves right is especially important. Keep them short and the character will feel stiff and robotic - like in Mega Man 11.
Make them long and the character will feel heavy and lumbering to set off, like in Super Meat Boy - and slippy and uncontrollable to stop, like in Super Mario Bros 3. That game generally feels great to play, but Mario does feel like he’s running on ice at times. In Celeste, Madeline has ultra short acceleration and deceleration curves.
It takes her about six frames to get to full speed - which happens roughly four times faster than Super Meat Boy. And she comes to a stop in just three frames - about nine times faster than Mario in New Super Mario Bros U. Those digits are just high enough to make Madeline feel human, and to stop you from being able to do huge standing jumps - but short enough that she almost instantly does what you tell her to do.
You’re very rarely going to slip off the edge of a platform, in this game. Her top speed is relatively low, too. And unlike Mario and Meat Boy, there’s no run button to get even more speed.
I think this is just fast enough to feel fluid, but slow enough that you feel in total control at all times. We can do a similar process with the jump. First, we calculate the character’s jump height by looking at high they can jump - compared to their own body size.
So in New Super Mario Bros U, Mario can jump to a point that’s four times his own height, while Meat Boy can jump massively high, to about six times his own height. And then we can look at each character’s jump curve, noting the climb, hang time, and fall. This also gives us a total jump time.
So Meat Boy has a tall and lengthy jump, making the character feel rather floaty. Yarny from Unravel, on the other hand, has a really short jump, and not much hang-time, making this wooly rag-doll feel surprisingly heavy, and leaden. Madeline, again, sticks to the short end of the spectrum.
She goes up and down very fast, but with quite a lot of hang time so you can line up your landing. And she can jump to about three times her own height - giving her one of the shortest jumps around. Like her run, these numbers are enough to make her feel bouncy and animated - but about as far from floaty as you can get.
There’s more that makes Madeline’s basic movement feel good, of course. There’s the fact that she can change direction very quickly, with no skidding. And how she has massive amounts of air friction, which means if you stop moving the stick in mid-air, she’ll almost instantly fall straight down.
That makes it easier to land precisely where you want to. And then there’s the more fundamental design of the game’s camera. Celeste is a zoomed-out game, where - at times - the entire room is framed by a static viewpoint.
This means that the screen isn’t flipping out all over the place, which makes it easier to be precise with your runs and jumps. If Madeline is the only thing moving, it’s easier to put her where you want to. The devs did have to compromise on detail for the characters and environments, but I think it was worth it.
Now, Madeline’s movement is entirely hard-coded, and written in Visual Studio, with the help of Microsoft’s XNA framework. So the devs didn’t use the built-in gravity or physics systems you sometimes find in game engines like Unity and Game Maker, as they preferred to have precise control over the player’s input. So I asked Matt and Noel how they came to these numbers for Madeline’s movement.
MATT: A lot of it was intuitive, a lot of it was just from making a lot of platformers. To get a sense of what you want a platformer to feel like and what works. NOEL: And a lot of it was just experimentation, right?
Like trying things and getting people to playtest it, and seeing how it feels and watching them and seeing like "oh that did not work as intended", so this needs to be toned down, this needs to be better. MATT: And it changed a lot through development too. Lots of little changes - even big changes.
NOEL: And like in regards to how the pacing feels when you’re platforming, like when should you be stopping and when should you be more flowing. The mechanics changed to kind of like make that all feel better. So those are the basics, but there’s way more to Madeline - in the form of two extra moves you can use when scaling the mountain.
One is the climb. Hold the trigger and Madeline will snap to a wall, and then can climb up it, and bounce off for a springy wall jump. Unlike Meat Boy, who slides up walls uncontrollably, Madeline sticks to surfaces like glue.
Climbing is dictated by a stamina system - Madeline’s got 110 stamina points, though that’s not shown to the player, and they depreciate at different rates depending on whether you’re holding still, climbing, or doing a climb jump. The other move is the dash. Hit the dash button and Madeline will fire off into the direction you’re holding.
She can only dash once in mid-air - elegantly represented by her hair turning blue - so you’ll either need to touch the ground or grab a crystal to replenish your stock. The dash does take control away from you, because Madeline fires in one direction at max speed. But that’s only for the first 0.
15 seconds of the move. From there, she slows down and you’re given control back, meaning you can cancel the momentum of the dash to stop yourself flinging into spikes. This gives the move more nuance and expressiveness, compared to the same, more static move in Celeste’s PICO-8 precursor.
With these three mechanics - the jump, the climb, and the dash - Celeste becomes a rapid-fire, resource-management puzzle of managing vertical space, and picking when and where to execute different moves. A jump here, a dash there, on to the wall, then back off to regain stamina and replenish your dash, before jetting off again. Each move has its own feel, speed, and level of control - giving the game an exciting, ever-changing pace.
All part of the developer’s plan, as it turns out. MATT: Like, a lot of problems in Celeste can be solved in multiple ways. Like you could either dash or you could climb.
There’s some where you could only use one or the other, or you have to use both in different combinations. But the dash was always supposed to be the more chaotic option where it’s kind of harder to control, whereas the climb is more methodical and you have more precise control of it. It’s not just the numbers that makes Madeline’s moveset feels so good: art, animation, and sound effects help sell the feeling, too.
Like the squash and squeeze on her jump, which really emphasises the movement in her body. The way tiny dust particles kick up, and the controller rumbles, when you hit the ground, to sell the impact. The four-frame pause and microscopic screen shake whenever you dash, which makes the jolting movement feel even more heightened.
And the trail of shadows and the blazing white contrail, which emphasise the speed and direction. Celeste isn’t a bonkers Vlambeer-style juice fest, but these subtle and short-lived effects do a lot of heavy lifting in making the game feel better - and giving feedback to your inputs and actions. While Celeste is a very hard game at times - and gets even harder if you go for the strawberries, and cassette tapes, and B-Side levels, and so on, the developers are actually extremely generous to the player, with an untold number of hacks and special cases in the code that make the game way less punishing.
The most famous, perhaps, is the way you can jump a few frames after leaving a platform - and still spring into the air. This is called Coyote time, named after the bits in Loony Toon cartoons where characters run off platforms and keep sprinting in mid-air. But there are loads of others hidden in the code.
Dashing into a corner won’t bonk you into oblivion, but you’ll merely sail around the edge of the platform. Spikes have a small hit box, so you won’t die if you touch the very tip. These traffic light blocks will still grant you momentum, even if you’re a little late on the button press.
If you do a climb jump but quickly push away from the wall, the game switches to a wall jump and refunds the stamina. And if you jump just before touching the ground, the game will remember that and execute the command when you land. NOEL: Because it feels bad if you press jump the frame before you touch the ground and just touch the ground and there’s nothing.
You want it to feel like "no, I pressed the jump button, I was right there. . .
". It feels like the game messed up, like the game missed your input or something - it got eaten. And you don’t want that, you want to feel like you’re in control of your character and it’s doing what you want it to do.
And when you do mess up it’s more on the player figuring out like “how do I solve this problem and execute it better" and not "I was one frame off and the game's has killed me". MATT: It’s like working on the player’s intent rather than making it a precise simulation of pressing buttons at the correct time. NOEL: And the cool thing too about that is for actually really pro players, people who get really really good at it, it does come down to those frames.
Even if you say "you get three frames off of a ledge, and you can still jump" - for a normal player that just makes the game feel better. But then for pro players who actually are trying to get through each level super fast, or trying to execute something perfectly, then they get down to the frames, like "no, I have three extra frames so I can use those to get across a gap I’m not supposed to get across" MATT: They abuse it NOEL: Yeah. So you still get that frame perfect play that’s possible but then for casual players it just feels better.
It’s a good point, and boy have players found ways to get the most out of the game’s movement code. I asked TGH, the world’s top-ranking Celeste speedrunner, to explain some of the advanced techniques he uses to turn the game’s toughest stages into graceful, effortless dances. First, there’s the dash-cancel, where a forward dash can be cancelled at the last second and turned into a massive jump that flings you through the air with all the momentum of the dash.
Do this while crouching and you’ll get the hyperdash, which is a lower but faster jump. You can extend these two moves by separating the dash and jump inputs slightly more, so Madeline regains her dash in mid-air. And “for even more speed”, says TGH, “after extending a hyperdash you can dash diagonally down-forward to chain momentum, and in some cases you can gain ludicrous speed".
This is known as an ultradash. You can also dash cancel upward along a wall for boosted height and vertical speed. Which is called an up-hyper or wallbounce.
There are other techniques too, and TGH says “it’s amazing just how fluidly all these techniques come together and work so well with the level design. ” That’s likely because almost of them are actually intended by the developers and some are even taught to you in the game. Not that I can actually perform them, mind you.
It was important to Matt and Noel that Madeline’s movement felt great, even if you don’t have tricky, well-designed levels to explore. After all, this was one of the key suggestions they had when I asked for the tips they might give to someone making their own platformer character. NOEL: Just make sure that the moment to moment feels good so that when someone’s just sitting there with a controller, the room could be empty but they can move their character around, make that feel good MATT: With no goals or anything, just make sure it’s fun to be that character.
I remember playing Mario Sunshine and just running around Delfino Plaza for hours beause it was just fun. NOEL: You can flip off stuff and all these things. Just the player itself can do all these cool interactive things that just feel fun.
But making levels - and adding in new mechanics like pinball bumpers, trampoline clouds, moving blocks, pelting wind, and kamikaze hotel owners - can actually force you to go back to the movement code, and change how things work. MATT: We decided early on what we wanted Madeline to be able to do, but the details of the numbers defintiely changed, and then the levels also changed, in tandem with that. So you basically get the player character to where it feels alright, you know it’s not perfect, you know you have to do testing and stuff, but you need levels to test too.
So you make a bunch of levels and then you test, and you find out "oh the player character has to change", and then you have to change 20 levels. You have to let different parts change other parts of the game, and let it slowly reveal what it wants to be. NOEL: And you have to be willing to throw away stuff sometimes too.
Like "this is a cool idea and a cool direction but it wasn’t working". It’s progressing what the game is because you’re learning about what the game actually is and figuring things out so even though you’re throwing work away, it’s a learning experience that ultimately makes the game better. MATT: Yeah, it’s still work that goes towards completing the game, even if it doesn’t manifest as content.
It becomes part of your knowledge that you use to make the rest of the content. Now, Celeste shows a great way to do very tight and responsive controls - but that’s just one way to do a platformer. Tweak those curves and you can get very different results, like the realistic animation of Playdead’s Inside, or the intense air-control of N+.
Or Sonic games, which are all about building and maintaining momentum, so it’s suitable that Sonic has a ridiculously long acceleration curve - and, likewise, struggles to come to a complete stop. Still, I think Madeline’s a really good place to start when thinking about platformer character design. Matt and Noel’s work shows the importance of getting the curves right when building basic movement.
Adding mechanics that introduce very different ways to navigate the space. Using feedback to emphasise movement. Being forgiving about pixel precision.
Increasing the skill ceiling with advanced movement. And not being afraid to test, tweak, and toss away work throughout the lengthy process of getting this stuff right. Thanks so much for watching.
There's a post on my Patreon now where I talk more about the run and jump graphs in this episode, and those who back the show at $5 or more can watch the full interview with Matt and Noel right now. MARK: Did you come up with the term Coyote Time, Matt? Was that your invention?
MATT: No, that was a player, I think. Wasn’t it? NOEL: I don’t know, actually MATT: I think it was in the PICO-8 one, a player called it Coyote Time and we were like that’s a good name.
NOEL: I’ve heard it used for other platformers too. MATT: Okay. I think it comes from players.
I don’t think developers made that term up. Which is cool, I think developers should take it. NOEL: Yeah, it’s a good word.
Sounds like we need to do some detective work. Please remember that the GMTK Game Jam begins this Friday, so keep an eye on itch. io and this YouTube channel for more info.
And don’t forget to subscribe and hit the bell button if you want new game design content to keep appearing in your sub box. See ya later.