Poly-Vinyl Pests!
Role: Lead Programmer
Team Size: 9
Project Length: 12 Weeks
Genre: Twin-stick shooter, Co-op
Engine: Unity
Attention ants of the colony, we are under attack! Monsters mutated by microplastics have invaded our realm and it's up to you and your friend to defeat them! Poly-Vinyl Pests, or PVP for short, is an arcade action style game where you and your friend take the roles of the champions from competing ant colonies. Together you’ll defeat deadly decomposers and compete for glory as only one of you can declare yourselves the queen of the anthill.
What I Did
In this project I was tasked with the creation of many systems for our game to function. I mainly focused on the AI and UI of the game while still working in many other areas. I created our two unique boss fights and all the game’s UI in collaboration with our dedicated boss and UI designers respectively. Besides my main focus, I maintained the codebase for our local multiplayer, narrative, and player systems.
My main goal of this project was to get a minimum viable product working for the end of the semester, but also help create a polished product. This project, if our team got through greenlight, would get another semester of development in the spring semester, so showing a core game loop with a lot of polish was the main priority.
What is the game?
In Poly-Vinyl Pests you and one of your friends take the role as champions of warring ant colonies. You and your friend are tasked with defeating different boss monsters that have fused with various pieces of trash and now use it to their benefit. These monsters are known as decomposers and have the unique ability to break down the plastics that we humans littered throughout the earth. To fight these monsters you must put aside your differences and work together to defeat the bosses, but after the fight is over you will begin pvp combat with your former ally. At the end of the game the winner is determined by the amount of score each player has. Players can gain score by hitting bosses and the other player.
Bosses
We were able to implement two unique and fun bosses into our game for this semester. The first one is the laundry snail, a slug that made a laundry detergent bottle its shell and shoots poisonous laundry detergent and (non-branded) tide pods at the players.
Score System
To determine which player is the Poly-Vinyl Best at the end of the game we needed to keep some kind of score. Our team decided on an arcade style of score which would increase whenever a player hit a boss or another player. Players cannot shoot their “teammate” during boss fights, but can during the pvp sections of the game. The score is always displayed on the screen and a final score will be shown at the end of the game. Players will also lose score when they die during a boss fight. If you win a pvp combat round then you will be awarded with a large amount of points. We did this to prevent one player that got ahead in the PvE round running away with the game.
Bullet Hell
Poly-Vinyl Pests takes heavy inspiration from bullet hell games, so a robust bullet hell system was mandatory. I collaborated with one of our designers to design and implement a bullet hell system that all current and future bosses could use. The bullet hell system uses an object pool to store all gameobjects for efficiency and will spawn them with custom rotation and direction based on the pattern. Using this system our team was able to easily implement new attack patterns in a short amount of time.
Boss AI
When we were in the early stages of development I needed to quickly create a boss AI that was able to switch between two targets. I wanted to create the boss systems to be accessible to all disciples that would need to work with it so I decided to utilize Unity’s animator as the state machine for the boss. After a lot of experimentation I was able to get the state machine working with easily accessible values to change things about the boss. Another benefit of using the unity animator was that our team’s animator could easily add animations into the boss without having to ask someone else to do it and bottleneck our art pipeline.
There was definitely some getting used to working with the animator, but after a few weeks of development the entire team was glad to be able to utilize a feature that was built into the engine and have very accessible systems. The way the boss AI is implemented would allow designers and artists with less programming knowledge to easily work with the AI.
The way the Ai works is in a state that determines which attack it will perform based on the game state, then moves to that state. After the attack is done it will move back to the atack decider state and repeat this loop until the boss is dead. This simple implementation allows for a rapid iteration which was necessary due to the amount of balancing and testing we had to do for each boss fight.
Our second boss is the bottle mushrooms, a hivemind of mushrooms that took residence in plastic water bottles that shoot spores at the players. Alone each mushroom isn’t very strong, but when they all work together it can be very challenge to avoid all of their attacks.
Boss Challenges
When designing our first boss we had a lot of time left in the semester to work, but when we wanted to add a second one that was when we had to start really thinking about how much time we had left. The way we designed the second boss made use of existing systems to create a unique boss fight without the creation of new massive systems to save time and energy. We made sure to reuse the bullet hell system and designed the second boss to require little to no animations but still feel alive. Our final product was the bottle mushrooms, a hivemind boss that would spawn mushroom enemies that did not move around the arena. This design took care of most of the risks involving implementing a second boss in such a short amount of time.
Pvp
The other part of Poly-Vinyl Pests is the pvp combat. To make this combat feel more interesting, our team designed and implemented two different arenas with separate environmental mechanics to make combat more dynamic. I implemented both of these arenas with the help of our designers and artists to make sure we stayed on theme.
The first arena was the pvp combat after the laundry snail. To help us make the art scope smaller we used the same environmental assets as the laundry snail’s arena with a few new props added in for the arena’s mechanic. The mechanic of this stage is the sludge that spawns in the four corners and will slowly encroach until the arena is almost completely covered. Walking into this sludge will deal damage to the players and forces the players to get closer to each other. Another mechanic is the red solo cups that players can dash through.
The second arena is after the bottle mushroom fight. Using the same tactic in reusing the boss’s arena assets, we were able to quickly create an arena for the players to fight in. The mechanic of this arena is the destructible trash bags that are scattered throughout the arena. The players can shoot them to destroy them after a varying amount of damage.
UI Implementation
One of my favorite parts of game dev is designing and implementing UI. That is why I was more than happy to take on the role to implement all our game’s UI. I worked with multiple designers to create UI for the different parts of our game which includes but not limited to: narrative systems, boss UI, player UI, end result screens, and more.
Narrative
One big thing our game is currently lacking is a narrative, so our team made the decision to give the players and bosses unique barks that would play before, during, and after combat rounds. These barks are meant to give more character to each of the bosses and players. To implement the barks I would need two things, the UI itself (speech bubbles and icons) and a UI manager that could play the barks. To accomplish this I created a structure that takes in a speaker and bark that will allow our designers to easily add barks with no programming needed. This approach allowed for rapid prototyping and testing to find out which barks suited our game the best.
Boss Fight
During an intense boss fight the last thing you want is something in the corner distracting you from the action. To combat this issue our UI designer and I were very deliberate with what information is shown during gameplay. We wanted to show the bare minimum but still convey all the information the players would need to know.
Results
To really emulate the arcade feeling in Poly-Vinyl Pests our UI designer and I created a score screen for the end of each PvE and PvP round that would display who won and the total score. I spent a lot of time adding animations and transitions to these score screens to add polish and character to our game’s UI. We made sure to convey who was the winner of the round by adding in little character portraits of each ant in either a winning or losing state.
In this example the only information that is shown is the boss’s health bar and the player’s info. The player’s info contains their health and score. All this UI is updated by a boss UI manager and a player UI manager during gameplay.
We also create a final score screen that will show much more information about who won each round. This final score screen is the end of the game and allows players to play again to contest the winner.
Highscore
Another piece of UI I implemented was a high score screen that is right after the final score screen. The UI will allow only the winning player to enter five letters to the high score leaderboards. In the future our team wants to create an arcade cabinet for our game, so adding in leaderboards is essential for making players feel great when getting a good score.
Balance
For our game, a big focus of it was the balance of the players and bosses. With external and internal testing throughout the entirety of the project we were able to balance both players and bosses to make a fair and competitive gameplay experience. I would often attend the game testing lab (GTL) sessions to watch testers play and ask questions relating to what feature we were testing that session. Our team also attended multiple smaller testing sessions that only included other students from our year's capstone. These smaller testing sessions gave very focused and important feedback.
Finally, the most important feedback we received was from our industry review from Champlain alumni at Bungie. Having Champlain alum with experience in not only Champlain’s game studio capstone, but also in the game industry was great in terms of feedback. Our most critical and helpful feedback came from the two sessions we had with the alum.