Home Artists Posts Import Register

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

Files

Why Does Celeste Feel So Good to Play? | Game Maker's Toolkit

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. Support Game Maker's Toolkit on Patreon - https://www.patreon.com/GameMakersToolkit Have Mark talk at your studio, university, or event - https://gamemakerstoolkit.tumblr.com Join the GMTK Game Jam - https://itch.io/jam/gmtk-2019 Find out more Celeste Player Code | GitHub https://github.com/NoelFB/Celeste/tree/master/Source/Player Celeste | Speedrun.com https://www.speedrun.com/Celeste Celeste’s stamina mechanic. explained | Reddit https://www.reddit.com/r/celestegame/comments/c17vpr/celestes_stamina_mechanic_explained/ Why Celeste’s dash feels great | Rock Paper Shotgun https://www.rockpapershotgun.com/2018/04/03/celeste-dash/ TowerFall Physics | Matt Makes Games https://mattmakesgames.tumblr.com/post/127890619821/towerfall-physics Celeste Developer Commentary Livestream | Matt Thorson https://www.youtube.com/watch?v=u-nSjhIgmXc Level Design Workshop: Designing Celeste | GDC https://www.youtube.com/watch?v=4RlpMhBKNr0 Celeste's Movement | Mix and Jam https://www.youtube.com/watch?v=STyY26a_dPY Games shown in this episode (in order of appearance) Super Meat Boy (Team Meat, 2010) LittleBigPlanet (Media Molecule, 2008) The Swindle (Size Five Games, 2015) Bubsy: The Woolies Strike Back (Black Forest Games, 2017) The End Is Nigh (Edmund McMillen & Tyler Glaiel, 2017) Celeste (Matt Makes Games, 2018) New Super Mario Bros. U (Nintendo, 2012) Mega Man 11 (Capcom, 2018) Super Mario Bros. 3 (Nintendo, 1988) Shovel Knight (Yacht Club Games, 2014) Unravel (ColdWood Interactive, 2016) Sonic Mania (Sega, 2017) Nuclear Throne (Vlambeer, 2015) Super Mario Sunshine (Nintendo, 2002) Inside (Playdead, 2016) N++ (Metanet Software, 2015) Music used in this episode Celeste soundtrack - Lena Raine (https://radicaldreamland.bandcamp.com/album/celeste-original-soundtrack) Other credits 2D Platformer Character Controller - Scripting Gravity | Unity https://www.youtube.com/watch?v=hn9lkAua3Vk Celeste All B-Sides Speedrun in 26:46 | TGH https://www.youtube.com/watch?v=I76TcmlsRIk Looney Tunes © Warner Bros

Comments

Jonathan Forney

This is super interesting. I'm excited to watch the video. Thanks for sharing!

Anonymous

This my first comment. That's amazing dedication to the work you produce. More than I was imaging by being just a YouTube subscriber.

Anonymous

This is quite an animation-y topic for you, Mark! We'd call this easing in animation, Mega Man with practically no easing and Sonic with loooooads.

Anonymous

Based on the graph, Sonic never slows down. Gotta go fast, indeed.

GameMakersToolkit

It took so long to chart Sonic's acceleration, I just gave up on doing his deceleration. It takes forever, let's leave it at that :P

Anonymous

Reminds me of this talk by a designer on Limbo about jumps in different games: https://www.youtube.com/watch?v=zK6MNPhwndM

Anonymous

This is great! Seems like an especially large amount of work & research went into this one. Lovely job.

Anonymous

I loved this video! One of your best

Anonymous

Great content on one of my favorite game so far! I'm gonna upgrade my patreon right now!

Anonymous

This is one of your best videos Mark, and this is saying a lot.

Cam

Great video, Mark! I love animation and movement analysis. I've never heard of the term 'coyote time', it's always been called a 'ghost jump' to my knowledge. If you're a developer and you google 'ghost jump' you'll find some great tutorials on how to achieve it!

Anonymous

Not mentioned here or in the video, we can clearly see that falling down is always faster than jumping up (less points on the downward curve). If your platformer feels floaty to players it's because your rise and fall times are equal.

OSW Review

Hey Mark! Saw you changed your Twitter handle after all this time, how come? As an aside, consider creating a second Twitter account with "@britishgaming" so you can 'park' that username (and someone else doesn't use it!) Also @GMTK is available and is a bit snappier than @GamemakersTK. Just thought I'd mention it!

GameMakersToolkit

Whoops, I should have parked britishgaming earlier - looks like someone's snaffled it. D'oh! Sadly, you can't have a 4 character Twitter account. And I changed just to better fit the brand!

Anonymous

Loved this video Mark. The depth of research was great, maybe one of your best videos yet!

Ryan Gatts

This is a lovely video. I'm not sure where I first ran into Coyote Time as a term, but I was definitely familiar with it. I thought it was mentioned in Martin Fasterholdt's Jump Physics Thesis paper (http://martinf.dk/jump/) , but he calls it an "edge jump" in the paper and cites Mark Venturelli's usage of Ghost Jump in a 2014 Gamasutra Article and Yoann Pignole's article on platformer gamefeel which generically calls it a "time delay". I would be shocked if the term existed at the time and he hadn't come across it (his research seems pretty exhaustive).

Anonymous

Hey, Mark! Kudos for all the research and investigation you poured into this video. Really AWESOME job. You keep innovating both in presentation and content, which makes your videos completely unique between them and makes your channel one of the very best. Some channels do suffer from overused frameworks. Always the same backgroudn, the same transitions, same everything. Thanks for putting one of the best shows in Youtube!

Anonymous

I have just discovered your YouTube channel. It’s really great and I’m looking forward to digging in. One question about these measurements and charts: do you know the relative frames per second of the various games? Because six frames in Super Mario on NES may represent a very different amount of time than six frames in Celeste on switch. Thanks!