RIT Master’s Capstone

Digital Game - Grim’s Coffin

In Grim’s Coffin, you play as the Grim Reaper, who after a shocking revelation, must find lost spirits and cut down foes in order to come to terms with their true nature.

My Contributions:

  • Was the lead Gameplay Developer and Designer focusing on player controls, combat, and AI for a 2D Metroidvania

  • Created a refined and polished player controller. Leveraged data driven principles and scriptable objects to create tools for the team quickly iterate on movement feel

  • Implemented enemy framework to interact with the player and navigate the scene, while using polymorphism principles for reusability and consistency between all enemies

  • Develop custom and reusable actions and conditions for a behavior tree system allowing for enemy consistency and quick iteration and implementation for enemy behavior

  • Designed player feel and enemy behavior for engaging combat and interactions using tools I developed

  • Researched and wrote a ~30 page paper on Choreography of Engaging Combat in Games

Tools Used:

  • Unity (C#)

  • Behavior Designer

  • A* Pathfinding Project

The Challenge:

After my four years at RIT, this Masters capstone was a culmination of all my skills. To graduate with my Masters, my team and I selected a team of 3 professor to mentor us, while at the end of the year, prove to them that our game and effort is worthy of a graduate degree. There were no extra rules or limitations on what our game had to be, which was a blessing and curse to make sure we stayed ambitious, but kept well in scope and curbed expectations.

Game Requirements:

The Process

  • Collaborate with a core team of 5 Game Design and Development MS students

  • Work on a 10 month long project, starting from scratch, through ideation and pre-production

  • Collaborate with 6 external members, creating extra assets like

  • Keep 3 professors/committee members updated with progression and prove our work as master level work

Implementing The Player:

The main goal was to have an engaging and satisfying combat and movement system. We wanted the player to feel connected to the character as this is the thing they interface with the most in our game.


After research, I made sure my implementation was data-driven and force-based. Having the force based movement allowed for responsiveness and allowed for tweaking forces like gravity and momentum manually to get the correct player feel. Making the controller data-driven was very important for iteration. Although the force-based system allowed for the controller to feel good, it didn’t start off that way. Having the controller be data-driven allowed us to easily and quickly modify the controller after each weekly playtest to eventually hone in on the feel that was most effective for the game.

Implementing the Enemies

Since I was focused on enemies as a whole, I had to be very aware of my time to make sure I could quickly build and iterate enemies. To make sure I had a solid structure, I created a base enemy class and had to rely on the principles of polymorphism and abstraction to allow for unique aspects, while standardizing how the enemy thought and interacted with the player. To go along with this, there was an overarching state machine that would impact how the enemies behaved, which included if it was low health, staggered, and so on.

The the fine tuning came down to behavior trees. Although I had a library for the actual structure of the behavior tree, I implemented each action. I tried to break actions down to simple states. With this, I could use it across enemies without having to make too many unique actions. Having a behavior tree with actions like this helped me quickly iterate on behavior to fine tune the challenge and make sure the enemies were engaging for the player.

Next
Next

Rope Tool