Boot Sequence is a 2.5 Dimension Rogue-lite game for up to four (4) players. The player can augment his/her boots by picking up different chips that randomly drop from enemies. The augmentation will give the player powerful upgrades from fire spitting out of his/her boots to wind power for extra kick knockback. There are some neat movement abilities as well, and of course they apply to the player’s boots. These are the hover and dash abilities which can be used in or out of combat.
I worked in a team of nine (9) on this project over a semester of about 3.5 months. I worked with two (2) other programmers on this project. Jimmy Griffiths, the procedural generation guy, Avery Dibble, the AI guy, and myself, the AI/UI guy.
The map is procedurally generated with a different experience every play through. We use a version of Wave Function Collapse to do this map generation by comparing colors of three (3) parts of the edges with each other. Although it is done for 2D right now, we can expand this algorithm to work for 3D to include verticality in the floors. This was not in scope for this project.
The AI in this game was developed by Avery and I. We used his Informed RRT* pathfinding algorithm with my implementation of a state machine to complete this.
The AI in this game include four (4) different archetypes of enemies. The enemy types are:
- Walker enemy
- Bomb enemy
- Turret enemy
- Shock enemy
Each enemy has a special feature to it and is all handled in a dynamic State Machine implementation that I designed. We’ll go one by one explaining each state for each enemy.
Note: These functions are very long and would clog up the page so if you’re interested in looking at them more in depth I can definitely send them your way. For now I made videos for each enemy type.
- Idle State – This is the starting state of the walker enemy where it moves to group up with other like-minded enemies to form mobs
- Chase State – This is when the enemy aggros onto one of the players. If it’s in a mob, it will do one of two random actions. This will be discussed in detail later.
- Attack State – This is when the enemy is in range of an attack. The walker enemy only has one attack, but that can change by simply adding to a .txt file and doing some basic code. The combat will also be discussed in detail later.
- Idle State – Like the walker enemy, this is the starting state where the bomb will group with other walkers and bombs around it.
- Chase State – Also like the walker enemy, this is when the bomb aggros onto a player
- Attack State – The bomb attack is a bit different from the walker enemy’s. While the walker enemy will constantly bombard the player with melee attacks, the bomb explodes for massive damage, killing itself and half the health of any players in range.
- Idle State – The turret is a stationary entity in levels. This will play the idle animation for it, but nothing else happens while in this state.
- Attack State – This is the only other state the turrets can be in because they cannot move. The aggro and attack are dealt with in this state with a simple Coroutine.
- Wander State – The starting state of the shock is a bit different from the rest of the cast. While in this state, the shock enemy will try to find a pit by Wander Steering. The shock enemy knows nothing about the world around itself, just like the player. After it finds a pit, it will look for other edges of that same pit to patrol. Currently, the shock enemy wanders around the pit until it finds four (4) waypoints.
- Patrol State – Once it finds four (4) waypoints to patrol around, it enters the patrol state. This state makes it follow the waypoints in a circular fashion until a player comes in range of an attack.
- Attack State – The shock enemy also has a unique attack. It will windup a charge and then dash at the player it’s targeting. If the attack is successful, it will stun the player for a long time. However the attack turns out, it will stun itself as well.
Mobs are any number up to four (4) of any combination of walker enemies and bomb enemies. Depending on the number of each enemy, there is a certain mob type that the whole mob will follow.
The first one is the Flank mob. This can be accessed by any combination of the walker and bomb enemies. Once the player comes into range of the flank mob group, they will split in 2 and 2 or 2 and 1 formations to go on either side of the target player. Once both sides reach their respective places, they will collapse on the target player, surrounding him/her with their brutal attacks.
The second one is the Push mob. This can be accessed by 3 walker enemies and 1 bomb enemy. Once the player comes into range of the push mob group, they will split into 3 and 1 formations, with the 1 being the bomb. They will do something similar to the flank at first, but will then leave the bomb at its respective position and the 3 walker enemies will push the player into the bomb.
Combat in this game is done by a three (3) step system. Everything that takes damage has a hurtbox on it as a child object. This child object will have a HurtboxScript on it. Everything that deals damage has a deactive hitbox attached to it as a child object. This will similarly have a HitboxScript on it. Finally, everytime an entity attacks, it will activate the hitbox attached to it. If it enters a hurtbox of any other object, it will deal its respective damage, and if not it will do nothing.
The UI in this game was done by me with help of the artists for the assets.
There are multiple layers to the UI, and each bar means something different. It is a little confusing to look at for the first time, but once you play the game, it feels better.
The so called corner UI is the health each player has, how much fuel each player has for their hover, and how much energy each player has for their dash. The green filled slots are the health, the blue bar is the hover, and the orange bar is the dash. Once the player picks up a chip, it will show which chip they have equipped on the corner UI. The corner UI also fades to semi-transparent when a player is under the UI.
The overhead UI is what really tells the player what’s happening while in a fight. It is the same as the corner UI in terms of what it tells the player, but it is much more readable while in a fight or whenever the player doesn’t want to be looking at the corner of the screen. The different bars will fade when they are full, so the player doesn’t have to look at a full bar all the time. The overhead UI doesn’t tell the player which chip they are carrying because that should be evident when looking at the player.
Shared Health System
In the middle bottom of the screen, the player is shown lives that they have. When multiple players are in the game, they all take from that same health pool. Every floor, the players have four (4) lives. However, one (1) person can take up all four (4) of those lives. This is to make it less devastating when one players is the first to die, and more team oriented.
There is a hidden feature in this game where if the player goes offscreen for whatever reason, a separate bubble will spawn where they went offscreen and show what they are doing. The bubble is small enough to make players not want to be offscreen, but big enough so if it ever happens, they know what’s beneath their boots and can see where they are going. This function is big so I’ll split it up into three pictures.