Bullet Hell Game

I could finally let loose. The first semester of my senior year, I took Introduction to Computer Science. As is common nowadays, we started with scratch, gradually moved into python, and then by the end of the semester started writing programs in Java to prepare for AP Computer Science. While there was absolutely value in learning fundamental programming theory, that was not the focus of the class, and I had just spend the previous summer going far beyond the technical level of any intro to programming class. Of course it was fun, but it wasn’t hard. When I heard the teacher describe the open ended final, I wasn’t going to just make some pong clone.

Pong except on of the paddles is on the offensive, angled upwards and pushed forwards
Our pong clone in Scratch. In addition to vertical movement, the player is free to move the paddle left and right, rotate it, and emote. Pong Extreme!

My friend and I shared a passion for video games, and always dreamed of making our own video games one day. This assignment was pure gold. We knew we lacked the game development skills to make anything too complex, and definitely lacked the technical ability to make anything from scratch. We decided to go for a short range target so that we could nail it dead center and make something fun. Inspired by indie hit Enter the Gungeon , we chose to make a simple, traditional, bullet hell.

Our game would have a simple gameplay loop. The game starts with the player in an empty room and a timer begins to count up. Over time, more and more enemies randomly spawn in the room which the player must evade or eliminate. All enemies are spawned by a Supreme Being who picks a set of random (x, y) coordinates and boolean values. If a purple skeleton is spawned, it uses a sine wave to emulate FPS tyle strafing movement, and shoots in three to five round bursts. If a red skeleton is spawned, it sprints at the player, attempting to crash into them and explode. Any collision with a bullet or a red skeleton ends the game. The goal of the game is to survive for as long as possible.

We chose to use the Unity game engine because it is popular with beginning game developers, and has a mass of tutorials and documentation. Despite being relatively easy to use compared to its competitors, it was still seriously complicated. Unity had many extra features that we didn’t need to use, and struggling to understand it definitely led to our greatest headaches. As we were yet to learn about Object Oriented Programming, the theory behind Unity’s design eluded us. The actual programming of the game logic was really fun because we got to implement the simple algorithms we learned about into something more substantial than our usual in class exercises.

When we finished our first mockup of the game, it felt totally dead. It is not exciting to click on big circles while avoiding small ones. We created our own art using Aesprite, and composed original music using Ableton which we synced to in game visual effects. This really brought the game to life. While it doesn’t stand up to any sort of professional standard, I truly believe we accomplished our goal of making something fun.

A spritesheet of the protaganist in Bullet Hell
Our pixel art for the player character in Bullet Hell

Overall, this project was awesome. Learning Unity was challenging, but rewarding. Programming becomes a lot more fun when you get to apply your knowledge instead of being stuck only making level zero text apps. The most important thing I learned from this project is that raw code is just a small part of the puzzle. While of course art and music are key in game development, I think that this idea applies to many other fields as well. While there is value in code for code's sake, I find I am more passionate about interdisciplinary applications that exist to accomplish something. I also found I appreciate when the final product is aesthetically appealing.

The menu of our Bullet Hell Game
Did you know Unity games can be compiled to WebGL? Try Our Game!