Rift City Rebels

Rift City Rebels is a Platform fighter set in a near-future Winnipeg. It is the final group project in my college program, developed by 6 Developers and 12 Artists over the course of 4 months.
As this game is currently being developed, this page is still a work in progress. Working with a team of this size on a larger project has been a very challenging but rewarding experience so far, with many opportunities to develop our skills in terms of keeping the scope of the project reasonable while still making something we are proud of.

Role

Developer, Designer

Year

2024

Software

Unreal Engine 5

Genre

Platform Fighter

Languages

Blueprints

Platform

PC

Project Type

Student Project (Group), Prototype

Warden

Each programmer was paired with an artist to develop and design one of the playable fighters in the game. The character concept I pitched is Warden, folk horror inspired Monster with nature themes. Together with the artist I was paired with, we further developed his look, moveset and personal history. His physique informed a heavy hitting playstyle with moves influenced by professional wrestling, with some more fantastical abilities added to showcase his plant based powers. To tie in his Folk Horror inspiration, his backstory positioned him as the "boogeyman" of the games world, punishing those who wander into his territory.

Dynamic Camera

One system I was in charge of developing was the in match camera. As there are multiple players moving around the screen during a match, this system needed to move the camera to follow the action of the match, zoom in and out to best fit all characters on screen, and constrain the camera to the bounds of the level. To do this, I calculated a value between 0 and 1 to represent how far apart the players were from each other (0 being right beside each other, and 1 being at opposite ends of the map). Using this value, I was able to determine how far to zoom the camera out, as well as recalculate where the level bounds for the camera should be. With these set, I would continously move the camera toward the centrer point of all players, while keeping it constrained to the bounds calculated before.

Cinematics

Another feature I worked on was the integration of the cinematic sequences that would play at the character select screen and the results screen after a match. This system needed to determine which sequence to play based on which character it was for, as well as reflect which colour scheme the character was currently using. To do this, I created a Map which used the different character classes as keys, and their sequence for the character select or results screen as the value. When a character was selected, or a match was over, we would reference a struct of the player data which showed which player selected which character, and which colour variant they were using. With this we could easily look up which sequence to play, and change the material used by the character in the sequence to match the player's colour.

Manager Systems

A major system I worked on for this project was the Game Manager systems, or 'Game Modes' in Unreal Engine. These consisted of two major Game Modes; the menu game mode and the match game mode
The menu game mode handled all of the player selections in the menus leading up to the match itself. To handle this, I created a struct to track which character the player selected, as well as any in game statistics that could be used for balancing, or the players score. In the game mode, I then used these structs in a Map with the players controller ID as the key. This way, I could make sure the data in the struct was assigned to the correct player. This map was then transferred to the Game Mode for the match once it started. The Game Mode for the matches would track all of the players statistics. This included how many times they were knocked out, how many other players they knocked out, the damage they dealt, etc. This information was very useful after playtests, as we could compare how much damage the characters dealt, who won the most, and any other relevant comparisons to inform game balance. We also displayed some of this information to to the player after each match, so they could see how well they did.