P.A.I.N.T. is an online cooperative third-person shooter where you join the P.U.N.K.S. The P.U.N.K.S are a bunch of rebels that hang around in their ultimate hideout. They despise order and structure thus try to correct the world with their paint blasters.
There is just one thing standing in their way, the sinister S.U.I.T.S. corporation. They manufacture their mundane suits in their massive grim factory.
Together with the P.U.N.K.S. you forge a plan to invade the S.U.I.T.S. factory. You penetrate the factory door with your badass minivan and armed with your paint blaster you cover the environment in bright colours.
Project Information | |
---|---|
Trailer | https://youtu.be/jP_pd79_I98 |
Engine | Unreal Engine 4 |
Development Time | 40 Weeks |
Team Size | ~25 People (5-6 Programmers, 7-10 Designers, 6-7 Artists and a Producer) |
My Roles | Scrum Master, Engine Programmer, Tools Programmer and Gameplay Programmer |
Languages Used | C++, Blueprints & Python |
Target Platforms | PC (Steam) and PS4 |
Release Status | Released on Steam |
During half of the project I worked as a scrum master and had my own feature team.
Some of my responsibilities while I had the role of scrum master:
During the project I have worked on optimizing the game and networking performance.
For most of the performance issues I started with profiling the point in the game where the issue lies.
For the networking performance issues, I used the Unreal network profiler to find the places in our game that cause the network issues. From the profiling I found various issues in the game regarding our networking and focused on fixing these issues from the places that had the biggest impact to the lower ones. After optimizing our network performance, we saw a huge improvement in-game and this reflected back in the network profiler data. From improving the network performance I also learned more best-practices regarding networking in Unreal.
During the development of our game, I worked on various gameplay elements of the game.
One of these gameplay aspects is the Player. I implemented the player movement and dashing functionality according to the design specifications. I implemented various visual and audio effects to the player and I massively improved the player code structure. Some of the player functionality also required to be replicate across the multiplayer session and I also integrated this.
I also worked on the functionality of the weapons. I worked on the weapons system with shooting, aiming, reloading and any other effects that were required by the design specification. I also implemented the networking aspects of the weapon. For example I implemented the networking side of the shooting of the weapon, making sure the server has authority over what the client does, without having a negative impact on the client. The reloading also needed to be networked properly as the server has authority over the amount of ammo for example, and other players should see and hear the reloading effects on that player in their game.
Another system I worked on is the pickups system. The pickups system I developed has functionality so the pickup only works for 1 player, so every player can pick it up, or one of the player can pick it up. This was according to the design specifications of the pickups we designed for the game. Unfortunately in the final product we only used the health pickup as a pickup in the game.
To simplify the release and Steam versioning workflow, I developed another tool in the Discord bot. The Steam versioning tool has the following features:
I integrated Steam rich presence into our game. Unreal still used outdated parts of the Steam SDK that make the rich presence work. This meant I went through the Steam SDK and the Unreal Engine source to find the current implementation, how it's supposed to work and make changes to the Unreal Engine source code to update the Unreal Steam Rich presence to use the features of the latest SDK. In-game we now show what the player is doing in the level and with how many people they are playing.
I have also integrated Discord rich presence into our game. Unlike Steam rich presence, there was no support for Discord functionality in the Unreal Engine. I developed a Unreal plugin that implements Discord's game SDK features into Unreal. Currently in our game we use this to update the player's status to show what they are doing in-game and with how many people they are playing.
As a partly coop game, I investigated other ways of implementing split-screen. I researched some different split-screen implementations to find the best functioning and performing option. The different types of split-screen I researched are:
Unfortunately due to time constraints and performance reasons, split-screen did not end up in the final product.
Due to a general lack of audio knowledge in our team, I worked on learning about and implementing the Unreal audio features. Some of the features of Unreal audio I implemented into our game are: