Retro Rockets is the project I worked on for my graduation internship. It's a 1v3 1st person multiplayer game set in a 70's style future. The game draws inspiration from the multiplayer horror games "Friday the 13th" and "Death by Daylight". Retro Rockets uses their hide and seek gameplay mechanics. However, Retro Rockets is not a horror game aiming more for a casual competitive atmosphere. The Retronauts "70's Astronauts" start weaker than Destructo "The killer robot" but over the course of the game when the Retronauts are eliminated they come back as Securobots "Indestructible defense robots". While with the Securobots the power balance shifts towards the larger team Destructo gets closer to winning.
When I joined the team, they were in a pre-alpha state. They had recently shown the game at a small event and gathered a lot of feedback. This meant the game was undergoing major changes to its design. It took me a couple of weeks to find my way around in the project. This went pretty fast due to my previous experience with Unreal and the project adhering to UE4's gameplay structure.
My first task in the project was to design and implement an inventory and item system. The existing item system was quickly implemented to get to a demo-able state and was not extendable.
Over the development, the inventory system needed to be extended several times. For replication and visual reasons but also to support new kinds of items.
Halfway through implementing items for the new inventory system, I got tasked to redo the projectile system. The existing projectile system was rushed for demo purposes. It was implemented across different classes and it ran into a bug in the UE4 engine that caused crashes.
During research and prototyping, I found a way to implement the system requiring minimal replication and utilizing lag compensation. We decided to go for a "favor the shooter" system inspired by overwatch and CSGO. For the lag compensation, I implemented a system to rewind the characters hitboxes. The projectile system utilizes two different projectiles one for hit detection and another for the visible representation.
Looking back I learned a lot and I would change certain elements of the implementation to increase the accuracy of the hitboxes and to aid ease of implementation. I would create a synchronized clock for hitbox rewinding to increase rewind accuracy. And rather than having the hitboxes as a separate actor I would use an actor component to record the hitbox position history. This implementation would eliminate the need to create special cases for hitbox interactions.