Attic-Panic screenshot
Attic-Panic screenshot
Attic-Panic screenshot
Attic-Panic screenshot
Attic-Panic screenshot

Attic Panic

Attic Panic is a 2-4 player top-down supernatural rogue-lite shooter where you play as possessed toys that battle each other to entertain the Entity, which grants players unique powers and abilities at the end of each round.

The game has been in development for a year with a team size of 27 people to simulate an indie studio environment.

The goal for this project was to tackle the 4 stages of game development and to release the final product on Steam.

role icon

Lead Programmer
DevOps Engineer

team icon

27 people

time icon

1 year

platform icon

Windows

platform icon

Unreal Engine 5.1

platform icon

Steamworks
Discord SDK

Lead Responsibilities

Throughout the entire year long project, I was assigned as Programmer Lead of Team Tonk. Some of my responsibilities as PR lead included: Keeping track of all programmer tasks, ensuring code standards are upheld, putting the right people on the right task, risk management and main line of communication with other leads.

Due to all the PR lead responsibilities, I wasn't able to work much on the project directly myself. however, being able to have a high overview of the project and delegating work was a unique experience I otherwise wouldn't have gotten to experience.

One of my biggest struggles with being the programmer lead was to find the balance of programmer and lead. To tackle this, I would make sure to put my programmers on tasks that had no direct influence on my role as lead.

This resulted in me still having a small bit of time to work on tasks myself, like implementing the Jenkins build pipeline, Upgrades and the Analytics Tool.

Attic-Panic picture

Jenkins

Besides my responsibility as programmer lead, I was also responsible for the Jenkins pipeline within the project. Since I was the only person in the team with knowledge about Jenkins and Groovy, I was tasked with setting this up.

Starting off with the project, I first created a simple pipeline that would allow us to build our Unreal Engine project. Throughout development however, the pipeline expended to allow for pushing to Steam from Jenkins.

After adding the Steam upload to our groovy script, I also began with running tests from Unreal Engine. To make sure no unstable build would be pushed to Steam, we would first run the test and skip the Steam upload if the project was unstable.

To know what went wrong whenever our build was unstable, I decided to add functionality to push the test results to Google Drive. And as both my programmers and I wanted to have easy access to the drive, I made custom discord messages that would directly link to the drive.

Jenkins pipeline script for the release branch written in Groovy

Upgrades

Besides my responsibility as PR Lead, I also contributed to the project by creating upgrade prototypes. As we had too few prototypes to work with, we decided to just create a lot of upgrades to see what sticks. 

One of the upgrades that I made was the thorns upgrade. When chosen, the upgrade would attach a collision sphere to the player that when collided with another player, will damage them continuously until they move out of the way.

This would create a sense of danger towards to the other players as they now had to watch out for not only the bullets, but also the hull.

I also worked on the fire track and ice track prototypes. When a player obtains one of these two upgrades, a trail of collision boxes would spawn behind them and would destroy itself after a certain amount of time had expired.

When a player would drive over the ice tracks, their movement would be slowed and they would become more slippery. When driven over the fire tracks, the player would take continuous damage until they moved out of the fire tracks.

As both systems work very similarly, I decided to create a track base blueprint where both upgrades could inherit from. By doing this, I both reduced my time developing the prototypes while also allowed expansion of other track based upgrades.

Discord

Attic Panic is an online multiplayer party game, and because of this, it is important to keep the community that plays the game alive. One of the ideas that I came up with was to implement discord activity of our game, so that others can see when our game is being played. This would help people engage with each other more, trying to host lobbies and join them, resulting in more longevity of our game.

The Discord Activity status was implemented by me within UE5 using the Discord SDK. Using the small UE4 example provided by Discord, I was able to link the SDK to our game in UE5 albeit with some trouble regarding the limited documentation and outdated example.

Once the Discord SDK was linked to our project, I made some functions regarding the initialization, updating and activity changes of Discord. To be able to call these functions, I created an actor that could be placed in each level that would change the discord status of the players in that level. By doing this, the activity of the players would always be correctly displayed.

Discord functions for UE5 written in C++