Super Happy Funtime Shootout
Overview
This was a University game jam project which I worked on for 5 days in January 2022 in a team of 4, where 3 of us did programming and one of us did art.
The theme of this game jam was "chain reaction" so we decided to create a bullet hell game where the player would have access to different guns with different elemental effects. These elemental effects would be triggered every so often and would have a chaining effect across enemies. For example, the lightning effect bounces from one enemy to the next, dealing damage along the way and the fire effect sets other enemies on fire when they touch each other.
Enemy Spawning
The first system I implemented was the enemy spawning system. With this system, I have enemies spawn in a circle around the player as time progresses. If the player runs too far away from enemies which have been spawned in, they get respawned closer to the player to maintain the threat towards the player. In early builds, spawning was handled in waves but this led to the player having to search for stragglers at the end of a wave in order to progress and this was slowing down the game. To overcome this, I reworked spawning so that there is still a hidden wave count iterating in the background but now that wave count generates a target number and the game will continually spawn new enemies until that count is reached. This keeps the game fast-moving and helps to add pressure to the player during gameplay.
The image above shows the target number of enemies against time progression in the game with each colour of line representing a different level of difficulty. I used this graph to develop an appropriate algorithm for the target number of enemies spawned.
Items
Another system I created was the item system. This involved giving enemies a loot table, spawning items in the world when enemies are killed and then using trigger volumes to allow the player to "suck up" items when they get close to them. In addition to this, I also implemented the functions of the items present in the game. There are 5 items which the player can pick up in total. These are a medkit, which gives the player a full heal; an ammo box, which gives the player a full magazine; a test tube, which gives the player a permanent speed increase; a bullet, which causes the player to emit 8 bullets separated by 45-degree angles once picked up; and a blue ring, which causes the player to emit a shockwave which knockback all enemies nearby when picked up.
Earth Element
As the core feature of our game was the chaining elements, we wanted to get as many into the game as possible. My teammates worked on lightning, fire, ice and poison and I worked on earth. For the earth element the idea was that if an enemy was hit with an earth bullet and died an earth spike would spawn. Any enemies that come into contact with the spike take damage. In addition to this, the spike would emit rocks in random directions and if these rocks hit and killed an enemy, another spike would be spawned at the kill location, creating a chain. I made the rock emission random to separate it from lightning which hits the nearest enemy and I chose not to make the spikes spawn more spikes if they got kills as this felt to similar to poison which spawns a poison cloud which can poison more enemies, everytime an enemy dies of poison.
3D Version
After the game jam was completed I enjoyed playing the game so much that I wanted to expand on it. As I find working in 3 dimensions more comfortable than 2 dimensions, I challenged myself to remake the game in 3D and this provided several design challenges. For example, in 3D it is a lot harder if enemies are coming from all directions as the player cannot simultaneously see both in front of themselves and behind. With regards to this challenge, I addressed it by spawning enemies in a 180-degree arc in front of the player only, however, I kept the enemy target total the same. The other two changes I made in the 3D version were the introduction of stamina and the air elemental effect. I introduced stamina to the game as I wanted to flesh out the speed-ups present in the 2D version and give the player more control over varying their speed by allowing the player to sprint but making it cost stamina or they could walk and it wouldn't cost stamina. As I was working in three dimensions, I also gave the player the option to jump and attached a stamina cost to this as well forcing the player to have to manage their resources if they want to use more complex movements. The new elemental effect I added was air, this was a planned element that never made it into the game jam version due to no-one having a unique effect to give the element. In this version, air works similarly to the blue ring item, where when an enemy is killed with an air bullet they release a knockback wave which pushes enemies away form them and deals damage. If this wave kills an enemy they then explode in another knockback wave, continuing the chian.
The UI in this version is based on a post jam UI design which one of my team mates added to the original 2D version. To see the more updated version of the 2D version of the game there is a download link provided on the itch page.