Momentus Game - University of Chicago Game Design Club

Autumn 2022 - Present

Note: This project is still in progress and is far from completion. If you would like to see code segments, such as my implementation of a raycast-based 2D physics engine, please contact me at jserf02@gmail.com.

What is it?

Momentus is a Metroidvania precision-platformer game I am developing through the University Game Design Club. The game's purpose is to combine the exploration and combat of Metroidvanias with precise, fast-paced movement to create an experience unlike any other on the market. This game is programmed using the Unity game engine, though nearly all of the logic is programmed from scratch in C#.

What do I do?

As a lead developer of the game, I have a pivotal role in designing game mechanics and helping our team function. I've spent many hours programming our game's systems (detailed below) and composing music for the various regions in the game. In addition to working on the game myself, I also organize the duties of each of the four members of our team and help keep the development cycle running.

Progress

Below are a few of the large accomplishments we have made so far. Note that this is only a small portion of what we have completed. Every feature listed below is something I have worked on.

2D Physics

Instead of using Unity's Rigidbody2D physics system, we opted to create our own to allow more precise control over every aspect of movement across our game. After some research, we decided to implement a raycast-based physics system. Essentially, whenever a physics object wants to move, raycasts are shot along the movement path to simulate moving from one position to the next which helps detect any collisions along the path. This simulation prior to movement is necessary to prevent collision issues when moving at high speeds (such as teleporting past objects Mario 64 style).

Forgiving Controls

Games that require precision often feel terrible without countless behind-the-scenes mechanics to tip the scales in favor of the player. Here are a few mechanics we implemented to make the game more forgiving:

Input Buffer System: Inputs can be pressed a couple of frames early while maintaining proper functionality.

Coyote Time: Inputs can be pressed a couple of frames late while maintaining proper functionality (note that this term typically refers only to jump inputs, but we applied this concept to all inputs).

Edge Detection: If the player is moving past a wall or ceiling and misses by only a few pixels, the game will teleport them those few pixels to correct the positioning error.

Other Notable Features

  • Simple enemy AI + combat system

  • Collision callback functions

    • Allows for easy creation of new objects and new object types, such as triggers

  • Moving platforms + velocity preservation when jumping off