This game is my senior project. My most challenging, ambitious project yet.
We had 20 weeks to make this game, however at first, due to inexperience in working with a big project and a big team, we made every mistakes that a game developer could possibly made.
After 10 weeks, we finally nailed down our design and art direction. Everything that you see here were made in 10 weeks, by me, and 8 other talented individual.
The idea of the game is simple. Set in a diesel punk universe, you play as a man with chainsaw wings. You mission : destroy a giant flying battleship known as a Dreadnought.
The player's most powerful attack is his chainsaw attack, however it consumes fuel. And the only way to regain fuel is by siphoning nearby fuel tanks or fallen enemies. The player can also pick up powerful weapons from dead enemies and destroyed vehicles.
The level progression is linear. The player gain access to the next section of the ship by completing objectives. Ultimately the player would have to destroy the engine and bring the entire ship down.
I was part of the design team, as well as the tech lead of the project. I was responsible of all the enemies in the game. I also created the ship manager, which controls every system related to the ship and the game progression. This includes interaction of ship components, enemy spawning, playing narrative dialogue etc.
We were the finalists in The Rookies competition.
Simon Lauer - Product Lead, VFX Artist
Bradley Pirkle - Lead Designer, System Designer
Jonathan Rey Brooks - Game Designer, Character Programmer
Parker Daniels - Art Lead, Environment and Prop Artist
Alex Sanches - Level Designer, Environment and Prop Artist
Drew Dicenso - Environment and Prop Artist, Tech Support
Justin Graber - Character artist
Tianyi Liu - Concept and UI art
Attack Token System
The attack token system was created as a balancing tool. This allows many enemies to be placed, however limiting the amount of enemies that can attack the player at the same time. The idea came from Doom (2016), where they have an Attack Token system that works in a very similar way.
Each enemy has an Attack Token. The token is a struct variable that contains the following item :
Priority - the importance of the attack token. For example a Gunship would have higher priority than an Infantry.
Count - the weight of the attack. For example a Gunship would have higher weight than an Infantry
Owner - a reference to the actor that owns the token
Every time when an enemy wants to attack the player, it would communicate with the Spawn Manager. This is mainly done through a behavior tree service. Whenever the enemy can attack a player (Has line of sight and within engagement range), the service would start running.
The Spawn Manager is in charge of managing the tokens. It limits the amount of token counts that can be used at any given moment. It can also let higher priority enemies to steal token quota from lower priority enemies.
Below is the Request Attack function in the Spawn Manager. This is what the Process Token service tries to call.
Below is the Remove token function. This is used to remove token from the Spawn Manager token pool. This is used by both the Spawn Manager itself, as well as the enemies when they can no longer attack. (lost sight to player, reloading their weapons etc.)
Below is the Remove Invalid Token function. This is set to run every 2 seconds to ensure there's no token in the token pool that contains invalid owner.
Here are some example videos of the system in action.
First one is with the max token count set to 20. At 20, all enemies can attack the player at the same time. The only time when they are not attacking would be when they are reloading.
Second video has the max token count set to 6. Most high priority enemies (Gunship and Rotorcraft) can still attack the player at will. However, many of the infantries cannot attack the player because the token count are occupied by higher priority enemies.
Third video has the max token count set to 4. Gunship has a token count of 4 and the highest priority. As a result, when gunship is attacking, no one else can attack. When gunship is not attacking, other enemies would have the opportunity to attack.
Last video has the max token count set to 2. Both Gunship and Rotorcraft has a higher count than 2, hence both these enemy types could never attack. Infantry has a count of 1, so at least two of them would be attacking the player at any given moment.