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.
Lead Programmer
DevOps Engineer
27 people
1 year
Windows
Unreal Engine 5.1
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.
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.