Demo Reel – Video
Demo Reel – Breakdown
Section 1 (0:00 – 0:40) :
This project served as an introduction to a custom, restricted, Raylib C# wrapper, designed by the college. For this specific assignment, I was very limited on the code I was allowed to write, e.g. no classes, switch statements, etc.
I originally designed a very basic collision system using single point collision, and checking if either sprite overlapped its center point within a given radius around another sprite. However this did not provide the effect I was looking for and eventually I swapped the one point collision system for a hand written box collider, resulting in a more accurate collision system..
As for the enemy movement, I linearly interpolated the center point of the enemy towards the player. When the player attacks, the weapons collision box is activated for a few frames, and should the enemy’s collision box overlap the weapons collision box, the enemy is repositioned to the top of the screen, and the process is repeated.
Section 2 (0:40 – 1:23):
For this project, I decided to create a level editing system to make the level design portion of the game easier.
For this I created a Tile class that holds its position, size, and an int variable for the individual tiles “sprite index”. I divided the resolution of the window by the amount of tiles I wanted, and populated the screen with a matrix of tiles. Having access to the individual positions and size of the tiles, I was able to check for collision with the position of the mouse cursor, allowing me to increment an individual tiles sprite index variable.
The sprite index variable allowed me to quickly swap the image used for rendering the tile, and perform unique logic when the player collides with tiles of specific indexes, such as power ups and spikes. I was then able to use C#’s streamwriter to read and write the size of a given level, alongside every tiles sprite index to a text file for ease of level saving and loading.
As for the player’s movement, I took inspiration from the original Mario Bros, and created two invisible bounding boxes on the left and right side of the screen. When the player makes contact with the right bounding box, every tile in the matrix is moved to the left. This results in a faux camera movement, as the player can move in the middle of the screen freely, and progress the level when moving to the right.
Section 3 (1:23 – 2:00):
This is a personal project of mine, in which I’ve decided to focus on the cinematic appearance of the game, whilst expanding my familiarity with the Unity game engine. One of the main goals of this game is to incorporate what I’ve learned during my studies to clearly identify when a player is in an important area, or encountering a boss battle. For the boss encounters, I’ve accomplished this by designing a game manager that checks for enemies for a unique “boss” tag, within a specific range of the player. When the game manager detects this tag, the camera target is linearly interpolated to the midpoint between the player and enemy, alongside scaling the camera out. For cinematic effect, I’ve added black bars that move into place to effectively change the aspect ratio of the screen. Achieving this effect in this fashion enables me to add unique logic to specific enemies, such as checking a color variable in the enemies class, allowing for scene lighting to be adjusted.
Section 4 (2:00 – 2:46):
This project is the result of my Game Design program’s “Design Week’. In which teams are randomly selected and we were tasked with designing, producing, and presenting a digital game with a unique controller in 5 days. My team decided to create a safe cracking game, where the player is tasked with cracking a safe, using the haptic and audio feedback present in our safe controller. I was the sole digital designer, while my teammates focused on the arduino setup and controller creation. For ease of workflow, I decided that the Unity game engine would fit our needs. Within the time constraints we had, I designed two gamemodes, one in which the player attempts to crack a singular safe as fast as possible, and another in which the player has a designated time limit to crack as many safes in a row as possible.