This assignment is very open-ended, and students can create whatever kind of game they want for the final assignment. This game is a fairly sophisticated cooperative experience with two distinct characters who interact with the environment in a variety of ways. It’s fairly short, but they showcase the concept very well.
Our Goal
Our primary goal was to design a game that promotes cooperation between two players by limiting what each character can do individually and encouraging them to rely on each other to progress through levels.
The player characters were built around this core idea of interdependence. Each one not only plays differently, but feels distinct in how they move and interact with the world. The robot, for instance, is heavy and a bit clunky—unable to jump and needing time to slow down, giving it a grounded, weighted feeling. On the other hand, the ghost is agile and free-flowing, capable of flying, dashing, and reaching areas the robot simply can’t.
The player characters were built around this core idea of interdependence. Each one not only plays differently, but feels distinct in how they move and interact with the world. The robot, for instance, is heavy and a bit clunky—unable to jump and needing time to slow down, giving it a grounded, weighted feeling. On the other hand, the ghost is agile and free-flowing, capable of flying, dashing, and reaching areas the robot simply can’t.
This contrast is meant to drive gameplay. The ghost can access elevated switches or platforms, enabling the robot to grapple, swing across gaps, or climb to higher ground. Meanwhile, the robot can traverse areas protected by anti-spirit fields, which need to be disabled so the ghost can follow.
By designing the characters to complement each other in this way, we reinforced the game’s core value: synergy. Progress depends on collaboration, and success comes from leveraging each character’s unique strengths to support the other.
How It was Made
The Start
To start, we had to figure out what kind of game we wanted to make and which game engine to use. Choosing the engine was much easier than deciding on the game itself, thanks to Keagan’s prior experience with the Godot engine and a project he had previously worked on that could serve as a useful reference. Based on this, we decided to use Godot as our engine.
From there, we began planning the game we wanted to create. We quickly narrowed down the genre to a 2D platformer, as we believed it would be the easiest to develop within our time constraints. With the genre settled, we turned our attention to the game’s core values and ultimately decided to focus on themes of cooperation and teamwork.
Setting and Characters
Once we had decided on the core value, we moved on to planning other aspects of the game, such as the characters and setting. We chose a post-apocalyptic world, as it aligned with all of our interests and provided a compelling backdrop for the story.
Next came the character design. To reflect our theme of teamwork, we decided the game would feature two characters, each controlled by a player. We settled on a ghost and a robot—partly because the setting suited these roles, and partly because their contrasting traits allowed for unique gameplay mechanics that would emphasize cooperation.
The Work Begins






Once the planning phase settled and we had a solid concept, we began working on our respective roles based on our individual strengths.
Keagan took the lead on programming due to his familiarity with both C# and the Godot engine, as well as having previous projects to reference. Meanwhile, Tristan and Hunter initially focused on asset creation, which gradually evolved into handling level design as the project progressed.
Development began with Keagan implementing core mechanics such as character movement (left and right for both the robot and the ghost, with flying abilities for the ghost), split-screen functionality, and foundational code frameworks.
While Keagan worked on programming, Tristan started prototyping character designs, researching inspiration for how the characters might look and what unique traits or abilities they could have.
Grappling and Physics
After completing the movement system, Keagan moved on to developing a grappling mechanic, which we decided would be used by the robot to reach higher areas. Because of how Keagan had structured the character managers and the underlying code, we needed to create a custom physics system specifically for the grappling functionality. While this required extra effort, it gave us the advantage of being able to fully customize the mechanic in ways that wouldn’t have been as flexible if we had relied solely on Godot’s built-in physics.
Dashing Grapple points
With the grappling mechanic complete, we decided to limit it so the robot could only grapple to specific points. These points would often need to be activated by the ghost. We made this design choice to encourage cooperation between players—progress would require them to work together, reinforcing the game’s core theme of teamwork.
Blockers, Bounds and Spawn points
After finishing the grapple points, Keagan developed world boundaries that would cause players to respawn at their last checkpoint if they went out of bounds. He also created a “ghost block,” which, like the grapple points that limited the robot’s movement, served to restrict the ghost’s movement. This helped balance the gameplay by ensuring that both characters had obstacles only the other could help overcome, further reinforcing the need for cooperation.
Level Creation
Once the core mechanics and various game elements were coded and made easily placeable within the level, Tristan and Hunter began designing the levels. Keagan provided them with guidance on how to use Godot effectively, helping them learn the tools and workflows needed to build and structure the levels properly.
Finishing Up
The final stage of development involved extensive playtesting to ensure the game felt polished and was as free of bugs as possible. During this process, we also finalized the game’s title, settling on Soul Sync.
Compiled Project
The Compiled game can be found here on keagan GitHub:




