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.
Really interesting to see a deep-dive into the systems and mechanics that contribute to the amazing "feel" of this game. And the comparisons to other genre standouts (Mario, Meatboy, etc.) is a great illustration that there isn't a single "right" configuration for these systems, but that it's crucially important to test and tweak and iterate to get a system that feels good in isolation, and then build your world and levels around the fun system you've created.
This is a big part of the reason it's been in the top 3 most active games on speedrun.com consistently for the past year and a half with no signs of slowing down.
Ill watched the video after work but I jjst want to say Celeste is one of my favorite games of all time. From the insanely fun tight platforming to the emotional story to the addictive music. Just such a great package. I pick it up and play random levels all the time. It never gets old.
One thing I got from this is the importance of play testing in an earlier stage -- Matt mentions there was a lot of tweaking on the character's moving, even some majors changes, that came after the tests. Seems like companies have the habit of testing once it's too late for any substantial change (if the tests happen at all).
That's a great video, btw. Thanks for sharing.
Fantastic video. I really enjoyed learning about the small things that they did to make the game more forgiving, such as "coyote time" that let's perform a jump a frame or two after running of a platform. I didn't even notice these things when I was playing the game, and they certainly didn't make it any easier, but the contributed to the game always feeling fair and fluid instead of frustrating. As a developer, I'm really in awe that these guys went through hard-coding in all these special cases. Really brilliant work.
Worth mentioning is that this is one of the best story telling platformers in existence. Feeling good to play comes from the context you have for your gameplay and the first time you get to the second to last and last level you are really feeling what you are supposed to do there and it's amazing. Heyyyy-ya!
This video puts into words why Hollow Knight frustrated me at the start. I played Hollow Knight after Celeste and the platforming just does not compare because of those small details in the code that make the controls a bit more forgiving.
Game Score Fanfare has their own video on Celeste's score that's worth checking out.
In essence, Celeste is a masterpiece. Every bit of it delivers in a big way.
It's interesting seeing this game get so much credit for controls, because I didn't really like them personally. I played it both on PS4 and Switch, and while I do think that is a great game for the most part, the controls on the dash (arguably the most important mechanic in this game) always felt really finicky to me. Whenever I wanted to dash, it always felt like a crapshoot wether I was going the way I wanted or to one of the side directions (so up or down right when trying to dash right, or up or left when trying to dash up-left). I was only able to finish the game by playing with a GameCube style controller that has notches for each direction, so I could always point in the perfectly precise direction.
Maybe im in a minority, but i really got annoyed with the game. Its like trying the same exact jump and move 1000 times before I could pass on many levels. So frustrating but not in a way that challenging and accomplishing, just annoying.