Savage
Savage is a 2-4 player, fast paced action-party game where up to 4 teams compete against each other in a number of different game modes. Using combo attacks and a number of movement abilities players must outwit and out manoeuvre their opponents in order to secure victory.
In this project the majority of time was spent achieving alignment between the physics of the player’s movement and the animations of the character. This was my first time using 3D animations in an environment that required quick visual feedback to the user.
As the only programmer on the team I designed and implemented the systems for the player, gameplay and the UI elements that are visible to the player.
It was a fun project to work on and it was made easier by the great team with whom I worked as we were aligned on our goals for the project, yet were able to utilise our diverse ideas and skill sets to create a product of which we were all proud.
The application can be downloaded here to try (Requires at least 2 controllers to play).
Bomb Squad (Utilising Objx: Simplifying User Generated Content)
Based on a previous project, this version of Bomb Squad was built to demonstrate the library “Objx: Simplifying User Generated Content” that was created for my Final Project subject of my bachelor’s course.
The library aimed to simplify the process of including user generated content into new games, through several inbuilt features aimed at assisting both the developer and end user.
Developers | End Users | ||
Typed Values | Types are included as part of the syntax for easier integration into C++ | Comments | Comments are ignored by the parsing process, allowing for detailed instructions to be left |
Templated API | API is templated to ensure the expected value type is received | Error Detection | Basic syntax error detection used to highlight errors to the end user |
Runtime Error Handling | Mismatched types and values are replaced with defaults to prevent runtime errors | Document Grouping | Related objects can be contained in a single file to encourage sharing of content |
The functionality of the library was included throughout the game, allowing for user defined in-game powerups, control schemes and UI.
Making use of the XInput windows library, this game can be played with up to 4 supported gamepads or the option to use a combination of keyboard keys to allow for players to battle it out on a series of procedurally generated maps with a wide variety of modifiable game options that can provide some good ol’ couch gaming competitive fun.
Both “Objx: Simplifying User Generated Content” and “Bomb Squad” can be downloaded to try.
The images used in this project were not created by me, they were found on Google Images.
JavaScript Playground (Based off my JS_Framework)
Developed as a means of learning and teaching, the JS_Framework has become the basis of all games that I have created that utilise JavaScript. I started developing this framework during my time teaching the Certificate 2 Game Programming Foundations course at the Academy of Interactive Entertainment. These courses introduced high-school students to game programming through JavaScript and HTML5 Canvas games. The framework was developed as a means of demonstrating what was possible and to create tools that could be given to students that were out of scope for the course, allowing them to focus on creating games that they enjoyed.
The JS_Framework can be viewed in full in its GitHub Repository and the demonstration projects that are displayed in the slides can be viewed in browser at here.
The images used in this project were not created by me they were found on Google Images.
Graphics Rendering
This was a large and complex project that took place over an entire semester. In this project we were asked to implement our own basic rendering engine using OpenGL and C++. I was proud of my ability to achieve the outcomes required and learned a great deal during this project. Given I had never designed or implemented anything like this before there are a number of things that I would do differently if I was given a similar brief, however, I managed to create a working pipeline that included:
- Deferred Rendering - Allowing for as many lights within a scene as I wished, without having to write new shaders.
- Multi-threaded Resource Loader – For loading any size of resource in the background without freezing the application.
- Object/Components Layout – Based on Unity’s model, this allowed me to populate the scene with various objects with different characteristics.
This was an incredible learning experience which gave me a new found respect for the work that is involved in developing modern engines.
Network Lag Handling
For this assignment we were tasked with handling information sent from a server, which would emulate anything from a perfect to nightmarish connection. We would have to devise a way for receiving the packets from the server and displaying the information that was contained to the ‘player’ in a way that was not visibly effected by the connection.
This task provided an interesting and different challenge. Although the information being sent by the server was at times disrupted, I was able to make the client maintain believable movement with upwards of 90% information loss and/or delay.
The applications can be downloaded here to try.
AI Pathfinding and Behaviour
This was completed as a part of our AI course and implements both A* for the pathfinding algorithm the agents use; and seek, arrival and avoidance behaviours in order to move them through the environment. The player can place and remove obstacles wherever they wish while telling the agents where to go. The agents make use of special partitioning in order to check collisions against their immediate surroundings and reduce unnecessary calculations.
The application can be downloaded here to try.
Snuglife
This was the first group project that I worked on in order to develop a cross platform game that was playable on both the PC and Sony’s PlayStation 4. Snuglife is a single player infinite runner where you play as Snuggles the tiger as he tries to navigate through the treacherous environment between him and his home. For this project I worked with another programmer who was responsible for the player, while I focused on the terrain generation and selection, and the tools used to build the terrain chunks and swap out the textures for them.
Having never developed for a console or multiple platforms this was a great introduction to learning to account for different input types and different platforms.
Flight
This game was made at the same time as I was working on Snuglife, for the same course and as such was required to work on both the PC and the PlayStation 4. For this project I took inspiration from Star Wars: Jedi Starfighter on the PlayStation 2 environments and implemented procedural map generation to create different terrain every time the player started a game.
This was my first introduction to procedural level generation and it was an interesting way of learning how to read the unpredictable data and setup the game environment suitably.
The application can be downloaded here to try.
GitHub
You can also find other small projects that I am currently working on by visiting my GitHub profile at https://github.com/MitchCroft