Question: What game engine was used to develop Celeste?
Answer
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?
Other Common Game Dev Questions (and Answers)
- Can I Use an SQL Database for Game Development?
- How are databases used in game development?
- How do you save multiplayer game data, in a database or a file?
- How can you design an efficient database for a game?
- Should I Use Redis or MySQL for Game Development?
- Do Video Games Use Databases?
- Does game development require knowledge of mathematics?
- Should I Use a Game Engine or Not?
- Do you need a game engine to make a game?
- What are the differences between Azure PlayFab and AWS GameLift?
- How can you set up matchmaking using AWS GameLift?
- How can Redis be used for a game server?
Free System Design on AWS E-Book
Download this early release of O'Reilly's latest cloud infrastructure e-book: System Design on AWS.
Switch & save up to 80%
Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement. Instantly experience up to a 25X boost in performance and 80% reduction in cost