It’s no secret that Celeste is a very good game, but why would you say it’s such a good game? Is it the graphics? Maybe for its story? Or is it the game’s challenging nature? Even if all of these reasons are more than enough to love the game, there is a special feature that is commonly underappreciated; the game’s impressively good physics.
When you start playing the game, you can quickly notice its platforming nature as you start climbing through the levels with only 4 movement commands: the run, the jump, the climb and the dash. When used individually, they can seem very simple, but when combined they create a decent amount of possibilities.
But the amount of movement options is not the main topic of this article. We need to focus on why these options are possible and how they take place. To analyze this, we’ll have to divide the objects in-game into two categories: actors and solids.
We’ll start with solids, which are “collidable level geometry” (any object with a shape and that can be interacted with). As disclosed by Maddy Thorson – game programmer in Celeste – solids handle all physics in the game; they possess and pass on velocity, movement and other different forces like gravity. But they also have one movement input at a time and it will move there even if solids are in the way. Thus, they cannot interact with each other.
Then, we have actors, which – pretty much – are every other thing that interacts with solids (players, monsters, treasures…). As solids handle physics, actors don’t have their own velocity, acceleration or gravity. Solids keep track of these variables and pass them on to the next one — think of them as if actors were humans and solids were their vehicle. However, they do have a “counter” that sums up their position number and the future position number. If the rounded solution is not 0, the actor moves where it’s supposed to (unless there is an obstruction in the way, in which case the actor stops when touching it).
Finally, we have some colorful combinations. Simply put, solids will only move or overlap with actors on two very rare occasions: when carrying them (if an actor is riding the solid) or pushing them (when an actor and solid movement results in them overlapping). If both are performed at the same time, the push persists, as the program checks for carries before the actor and solid start moving and it checks for pushes afterward (and that is why moving platforms launch you into oblivion if you jump at the right time). Another important notation is that pushed actors don’t receive full movement amount (only the difference in pixels between our leading edge and the closest one) but they can be squished. Whereas if the actor is carried, it receives full movement amount and cannot be squished.
With these simple mechanics, the game sets up some perfect amounts of gravity, movement, acceleration and velocity and it is still a great inspiration for other indie games. But it does more than that, it makes the player feel in total control of their character, one simply doesn’t think “I’m going to lose control of Madeline” while playing Celeste (unless you press the dash button enough times for it to break). While you play the game, you will most certainly think that Madeline is doing what you want her to do, while in order platformers (such as Super Mario Bros) you may sometimes believe the character is moving on their own. Furthermore, the levels just reassure this feeling, with every surface treating you as you expect it to and giving you some strange kind of platforming satisfaction.