top of page
Screenshot_4.jpg

Return to the Skyway

About the game

Traverse through a fantastical island and utilize the local fauna to destroy obstacles. In this 2D platformer, the player controls Ezra, a Skyway pilot, who has crash-landed on a tropical island. You must complete puzzles utilizing the island creatures' unique abilities to fix your ship and return to the Skyway!

​

This game was my Sophomore year game project at DigiPen Institute of Technology. The project itself saw our team create this game, as well as the engine it ran on, in an 8-month time frame. Our custom C++ engine was called "Cloud Engine" and I was responsible for implementing the physics engine which included collider and rigidbody components and a collision management system. Our team consisted of 13 members: 7 programmers (myself included), 2 designers, 3 artists, and 1 audio designer.

Screenshot_7.jpg

Physics Engine

The majority of my efforts on this project were focused on creating and refining our physics engine. I took inspiration from Unity's physics system and attempted to support as many of its features as I could. Axis-Aligned Bounding Box (AABB), Oriented Bounding Box (OBB), and Circle colliders were all fully supported in this engine. These collisions were managed through a collision system that supported layers and layer masking and processed collision events using a queue. Individual collision events were able to be accessed directly which allowed for custom behavior on collisions, such as trigger boxes. Lastly, the rigidbody component supported the simulation of mass, gravity, drag, and friction.

​

One of the trickiest problems I solved was the implementation of OBB collisions. At the time, I had very minimal experience and education with physics as a whole, so much of my time was spent researching. I already had AABB collision detection working using the collider's width and height but with OBB objects supporting rotation, this approach would not be sufficient. To solve this problem, I implemented the Separating Axis Theorem (SAT). At the time, the concept was very confusing to me and it took me around 2 weeks of watching videos, reading articles and posts, and testing code before I had finally figured out the implementation.

Screenshot_2.jpg

This project taught me a lot about physics but I learned a whole lot more about project management and working on a team. For many of us, this was the first time we had worked on a team of this size and on a project of this scale and as a result, there were many things that went wrong.

​

One of the biggest shortcomings was our team communication. We suffered from siloing and would often do our own work in secret and only update the team once we had completed features. As a result, we often ended up with features that went unused or were fairly disconnected from one another. I contributed to this lack of communication myself and suffered greatly as a result. Much of the work I had done for the project went unused in the final product. As an example, we ended up not needing OBB or Circle colliders for our game. My lack of communication with the team cost me weeks, or even months, of work that could have been focused on something more important and useful for the game rather than on something that would never see the light of day.

​

There is much I wish I could have done differently on this team and on this project, however, I am very grateful to have had the experience I did. It is much more valuable to experience failures rather than be told them and this project is a shining example of that. I walked away with a much greater appreciation for team communication and always asking myself the question "Why am I working on what I'm working on?" because I know what it's like to lose weeks worth of work and I have no intention to repeat that same mistake.

Team Experience

Screenshot_1.jpg
This file provides the logic for all Circle and AABB colliders, as well as resolution logic between them.
(It also includes the scrapped OOBB implementation as a nice little bonus)

 
This file contains the logic used to manage and resolve all collision events based off the order of creation
This file has the logic for all RigidBody components with features such as mass, drag, gravity, and friction

Code Samples

bottom of page