Brand Title

P.A.I.N.T.

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
Trailerhttps://youtu.be/jP_pd79_I98
EngineUnreal Engine 4
Development Time40 Weeks
Team Size~25 People (5-6 Programmers, 7-10 Designers, 6-7 Artists and a Producer)
My RolesScrum Master, Engine Programmer, Tools Programmer and Gameplay Programmer
Languages UsedC++, Blueprints & Python
Target PlatformsPC (Steam) and PS4
Release StatusReleased on Steam

My Work

Scrum Master

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:

  • Planning sprints
  • Prioritize work in the sprints
  • Lead a multidisciplinary team of around 5
  • Review the work of the scrum team
  • Present teams progress
Profiling and Optimizations

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.

Gameplay

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.

Discord Steam Versioning and Branching Tool

To simplify the release and Steam versioning workflow, I developed another tool in the Discord bot. The Steam versioning tool has the following features:

  • View all the current build versions uploaded to the Steam servers.
  • View which build is on each Steam branch.
  • Change the current build per Steam branch
  • Support our QA and release workflow to upgrade builds from one Steam branch to the next.
Online Rich Presence

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.

Split-Screen

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:

  • Voronoi split-screen
  • Dynamic split-screen
  • Simple split-screen

Unfortunately due to time constraints and performance reasons, split-screen did not end up in the final product.

Audio

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:

  • Setting up the sound system
  • Added support for audio volume controls
  • Setup Audio Attenuation
  • Added Reverb effects to the world