Ascension was the result of my Game Behaviour module during my final year at University, where I was tasked with making a 2D platformer using our own Physics Engine and AI Implementation.
I ended up chosing Monogame for my framework, giving me a chance to work with the game's code from the ground up. I went for a very Unity-esque class structure, having a base abstract GameObject class with method stubs for Start, Update, LoadContent, and any other Monogame specific methods.
I had another key class called a Rigidbody2D which contained all the basic physics info that all physics objects would share, this inherited from GameObject. This setup meant that any object that needed physics could inherit from Rigidbody2D and any that didnt could just inherit from GameObject. The Game Manager would hold a list of GameObjects and the Physics Manager would hold a list of Rigidbodies in order to perform the required actions per frame.
The physics engine uses simple AABB collision detection. It has full modelling of basic forces to handle friction, velocity, and acceleration. There are numerous physics related objects in the game including a Moving Platform and a Spring constrained platform modelled using Hooke's Law.
The player must navigate a procedurally generated endless vertical scrolling platformer, and is racing an AI controlled enemy, that uses an A* Search and FSM to continually traverse the generated waypoint grid.
There is a variety of platforms generated, with different frictions and bounciness, which the AI takes into consideration when planning it's route.
Copyright Josh Leland @ All Rights Reserved