Noel Berry is a developer who, with Matt Thorson, built the hand-coded movement behind Madeline in the 2018 platformer Celeste. The most useful thing to learn from his work is to tune a character to read the player's intent, so a miss feels like the player's own error and never like a swallowed input.
you don't want that, you want to feel like you're in control of your character
Why Does Celeste Feel So Good to Play?
Berry and Thorson hand-coded Madeline's movement without engine physics. The movement is hard-coded in Visual Studio with Microsoft's XNA framework. They skipped the built-in gravity systems in engines like Unity and Game Maker.
They wanted precise control over how input becomes motion. The numbers came from intuition, experience with many platformers and constant playtesting.
The result is a hero who does what you tell her almost instantly. Madeline reaches full speed in about six frames and stops in three. That is about four times faster to full speed than Super Meat Boy, and stopping is about nine times faster than Mario in New Super Mario Bros U.
The curves are still long enough to feel human and to prevent huge standing jumps. Players rarely slip off a platform edge by accident.
Control was the goal, so top speed stays low and there is no run button. Celeste has no run button, unlike Mario and Super Meat Boy. Madeline's speed is fast enough to feel fluid and slow enough that the player feels in total control.
Berry says a swallowed button press feels like the game missed your input. A jump pressed a frame before landing is remembered and runs on touchdown. Without that buffer, the player feels the game ate the input.
The aim is that failure feels like the player's own mistake to fix, not a frame-off punishment. Players then ask how to execute better, not whether they were one frame off.
Celeste hides forgiveness in many small special cases. Coyote time lets you jump a few frames after leaving a ledge. Spikes have small hit boxes, and dashing into a corner sails you around the edge.
Traffic light blocks still give momentum on a slightly late press. A climb jump followed by a quick push away from the wall becomes a wall jump and refunds the stamina. The code holds an "untold number of hacks and special cases" that make the hard game less punishing.
The same leniency that helps casual players raises the ceiling for experts. Speedrunners spend the spare frames to cross gaps they are not supposed to cross and to chain dash-cancels, hyperdashes, ultradashes and wallbounces.
Most of these tricks were intended and fit the level design. Thorson describes the approach as working on the player's intent rather than making a precise simulation of pressing buttons at the right time.
Each of the three moves was given a different feel. The climb is methodical and precise, and the dash was always meant to be the more chaotic option. Rooms often allow either move or a mix, which turns platforming into a fast puzzle.
The dash gives full max-speed control for only the first 0.15 seconds, then hands control back so players can cancel its momentum before flinging into spikes.
Feedback effects are short and subtle, not a juice fest. Jumps squash and stretch Madeline, and landings kick up dust and rumble the controller. Every dash has a four-frame pause, a tiny screen shake, shadow trails and a white contrail.
Celeste is not a Vlambeer-style effects showcase. The effects are short-lived but do heavy lifting as feedback on inputs.
A static, zoomed-out camera helps precision as much as the numbers do. Often the whole room is in frame, so Madeline is the only thing moving and is easier to place where you want.
The cost was less detail in characters and environments, which the designers judged worth it.
Berry says movement should feel good even in an empty room. The room could be empty and moving around should still be fun, before any goals are added. Thorson recalls running around Delfino Plaza in Super Mario Sunshine for hours.
The player can also do small interactive things that just feel fun, like flipping off objects.
Character and levels were tuned together, and work was thrown away. Pinball bumpers, trampoline clouds, moving blocks and wind sent the team back to the movement code. Changing the player could force changes to 20 levels.
What Madeline could do was decided early, but the numbers kept changing. Discarded work still added knowledge that went into the rest of the content.
Tight control is one choice, and the curves should fit the game. Different curves give very different characters: realistic animation in Inside, intense air control in N+, and a long acceleration curve in Sonic that suits a game about momentum.
Shows how a platformer hero gets tight, responsive controls through short run and jump curves, subtle feedback, hidden forgiveness and constant tuning. The worth-watching part is the frame-level breakdown of Madeline's movement against Mario, Super Meat Boy and Sonic, plus the developers explaining their forgiveness hacks.
Berry and Thorson hand-coded Madeline's movement without engine physics. The movement is hard-coded in Visual Studio with Microsoft's XNA framework. They skipped the built-in gravity systems in engines like Unity and Game Maker.
They wanted precise control over how input becomes motion. The numbers came from intuition, experience with many platformers and constant playtesting.
The result is a hero who does what you tell her almost instantly. Madeline reaches full speed in about six frames and stops in three. That is about four times faster to full speed than Super Meat Boy, and stopping is about nine times faster than Mario in New Super Mario Bros U.
The curves are still long enough to feel human and to prevent huge standing jumps. Players rarely slip off a platform edge by accident.
Control was the goal, so top speed stays low and there is no run button. Celeste has no run button, unlike Mario and Super Meat Boy. Madeline's speed is fast enough to feel fluid and slow enough that the player feels in total control.
Berry says a swallowed button press feels like the game missed your input. A jump pressed a frame before landing is remembered and runs on touchdown. Without that buffer, the player feels the game ate the input.
The aim is that failure feels like the player's own mistake to fix, not a frame-off punishment. Players then ask how to execute better, not whether they were one frame off.
Celeste hides forgiveness in many small special cases. Coyote time lets you jump a few frames after leaving a ledge. Spikes have small hit boxes, and dashing into a corner sails you around the edge.
Traffic light blocks still give momentum on a slightly late press. A climb jump followed by a quick push away from the wall becomes a wall jump and refunds the stamina. The code holds an "untold number of hacks and special cases" that make the hard game less punishing.
The same leniency that helps casual players raises the ceiling for experts. Speedrunners spend the spare frames to cross gaps they are not supposed to cross and to chain dash-cancels, hyperdashes, ultradashes and wallbounces.
Most of these tricks were intended and fit the level design. Thorson describes the approach as working on the player's intent rather than making a precise simulation of pressing buttons at the right time.
Each of the three moves was given a different feel. The climb is methodical and precise, and the dash was always meant to be the more chaotic option. Rooms often allow either move or a mix, which turns platforming into a fast puzzle.
The dash gives full max-speed control for only the first 0.15 seconds, then hands control back so players can cancel its momentum before flinging into spikes.
Feedback effects are short and subtle, not a juice fest. Jumps squash and stretch Madeline, and landings kick up dust and rumble the controller. Every dash has a four-frame pause, a tiny screen shake, shadow trails and a white contrail.
Celeste is not a Vlambeer-style effects showcase. The effects are short-lived but do heavy lifting as feedback on inputs.
A static, zoomed-out camera helps precision as much as the numbers do. Often the whole room is in frame, so Madeline is the only thing moving and is easier to place where you want.
The cost was less detail in characters and environments, which the designers judged worth it.
Berry says movement should feel good even in an empty room. The room could be empty and moving around should still be fun, before any goals are added. Thorson recalls running around Delfino Plaza in Super Mario Sunshine for hours.
The player can also do small interactive things that just feel fun, like flipping off objects.
Character and levels were tuned together, and work was thrown away. Pinball bumpers, trampoline clouds, moving blocks and wind sent the team back to the movement code. Changing the player could force changes to 20 levels.
What Madeline could do was decided early, but the numbers kept changing. Discarded work still added knowledge that went into the rest of the content.
Tight control is one choice, and the curves should fit the game. Different curves give very different characters: realistic animation in Inside, intense air control in N+, and a long acceleration curve in Sonic that suits a game about momentum.