Why Does Celeste Feel So Good to Play? | Game Maker's Toolkit (Patreon)
Content
Celeste is one of the most satisfying platformers released in recent memory. And a big part of that is due to the tight and responsive controls of the game’s main character: Madeline. In this video, let’s look at how designers Matt Thorson and Noel Berry made the hero of Celeste feel so good to play.
As part of this video, I talked a bunch about how platformer characters run and jump - and used graphs like this to illustrate their unique properties.
I didn’t want to bog down the video with my methodology and whatnot, so I decided to put that all in this Patreon post instead! So, here’s how I got the data for these characters...
First, I recorded video footage of a character going from standing still, to running at full speed, to coming to a stop. I then imported this video into Photoshop so I could go through it, frame-by-frame, and make notes over the top of the footage.
The next step was to draw a line over the footage, showing the character’s position on each frame. I chose some part of the character (in this case, Mario’s nose) to be my reference point.
From here, I could measure the number of pixels between each line. This showed me how fast Mario is moving from frame to frame. So, at the start he hardly moves at all - but after a while he’s shifting six-or-so pixels every frame.
I recorded those numbers on a spreadsheet. Each line is a frame, and the number is the pixel difference between the current and previous lines.
I could see when the character was no longer accelerating, but moving at full speed, because the character was now moving the same number of pixels forward each frame. This allowed me to colour code the cells for acceleration (blue), top speed (green), and deceleration (red - off screen).
I then made another column called “curve”. Here, I added the subsequent numbers together while the character is accelerating. I then kept the numbers the same while at top speed. And then subtracted the subsequent numbers during deceleration.
I can then chart those numbers on a graph and get something that looks like this!
I can then compare this to other characters. See how Mega Man accelerates and decelerates incredibly fast, how Meat Boy takes a long time to reach top speed - but stops instantly. And how Sonic takes forever to reach his full potential.
For top speed, I did attempt to measure how fast these characters move by seeing how many pixels they travel across a 1080p screen. This isn’t super accurate, though, as camera size, world size, character size etc are going to skew these numbers. A teeny tiny Sonic would move slower across a screen than a massive great Mega Man.
So I decided to use them to help the final graphs, but not put an actual number on anything.
I used a very similar methodology for the jump. This time I needed two layers of lines - one for the ascent, and one for the descent. For the curve, I just added the numbers sequentially as the character rose, and subtracted as they fell.
I could then create a curve like this to show the climb, hang time, and fall. As Meat Boy is the character with the longest total jump time (about 64 frames), I used him as the baseline to which I could compare the other characters.
Here’s a bunch of other characters. Ignore the height, I’ll deal with that in a sec. But we can see the curves and total jump lengths for Madeline, Yarny, Shovel Knight, and Mario.
As shown in the video, I calculated the character’s jump height by looking at how many times the character can jump above its own body size. It’s still not a perfect representation but good enough.
For both run and jump, I made new graphs that are approximations of the data I recorded. It wasn’t important for this video that the graphs were perfectly accurate: they were more about representing an idea to the viewer. And I think I've achieved that.
Hope that was interesting! Thanks for reading.
Oh, and $5 backers can get the full interview with Matt and Noel right here.
Mark