Question: What game engine was used to develop Celeste?


Celeste, the critically acclaimed indie platformer known for its challenging gameplay and touching narrative, was developed using a popular game engine called MonoGame. MonoGame is an open-source implementation of the Microsoft XNA 4 Framework. It allows developers to create games with rich graphics and smooth gameplay on various platforms.

The creators of Celeste initially built a prototype of the game in only four days during a game jam using the LÖVE game framework, which is a framework for making 2D games in the Lua programming language. However, for the full release, they moved to MonoGame to take advantage of its additional features and broader platform support.

MonoGame provided the developers with the tools needed to bring their vision to life, offering powerful capabilities to handle graphics, audio, and input, which are crucial for a precision platformer like Celeste. Furthermore, being an open-source framework, MonoGame gave them the flexibility to modify and optimize the code as necessary to suit their specific needs.

An example of how one might handle input in a MonoGame project, which would be critical for a platformer such as Celeste, is shown below:

using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; public class PlayerInput { public Vector2 GetMovementDirection() { KeyboardState state = Keyboard.GetState(); Vector2 direction = Vector2.Zero; if (state.IsKeyDown(Keys.Left) || state.IsKeyDown(Keys.A)) { direction.X -= 1; } if (state.IsKeyDown(Keys.Right) || state.IsKeyDown(Keys.D)) { direction.X += 1; } if (state.IsKeyDown(Keys.Up) || state.IsKeyDown(Keys.W)) { direction.Y -= 1; } if (state.IsKeyDown(Keys.Down) || state.IsKeyDown(Keys.S)) { direction.Y += 1; } // Normalize the direction vector to have a unit length, so diagonal movement isn't faster if (direction != Vector2.Zero) { direction.Normalize(); } return direction; } } // In your game's update method, you would use: // Vector2 movement = playerInput.GetMovementDirection(); // to get the current movement direction based on player input.

This simple input handling allows a character to move in response to player inputs from the keyboard. The PlayerInput class method GetMovementDirection returns a normalized Vector2 representing the direction the player character should move based on which keys are pressed.

Overall, MonoGame's flexibility and cross-platform capabilities were instrumental in the development and success of Celeste. Developers Matt Thorson and Noel Berry, along with their team, were able to leverage MonoGame's features to craft a game that feels great to play on multiple systems and received widespread acclaim for its tight controls and striking pixel art visuals.

Was this content helpful?

White Paper

Free System Design on AWS E-Book

Download this early release of O'Reilly's latest cloud infrastructure e-book: System Design on AWS.

Free System Design on AWS E-Book

Start building today

Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement.