Progression

Progression is an Android game made with Unity that I recently released on Google Play store (that is still downloadable on Google play, link to the download at the bottom). It didn’t take me a long time for me to develop this game as the whole system was very easy to implement. The main point of this development was to make a simple game in a short duration just so I can get more motivated and get the Unity development wheels rolling again, as I took a break after finishing Sketch Hero.

Progression is a simple arcade shooter. There are a total of 75 waves (originally 50, but I got requested to make more levels, as they were too “easy” to complete), and the goal of the game is to defeat all the enemies that spawn in each wave and reach 75 waves. The difficulty of the wave progress as it gets higher and the player needs to destroy them all by progressing them. Kind of like an RPG game, except the options, are limited. The player can upgrade their character by an in-game shop which they can use with in-game money they earn by destroying enemies in the game. Another option for an upgrade is picking up “upgrade” items within the match. This gives the player a more significant upgrade, but this effect is gone once the player exits the match. It is near impossible for a player to complete the game in the first match. The whole concept was to grow their character throughout different matches and upgrade their character using the money they earn.

I originally designed this game to be extremely difficult to complete. I had a hard time balancing each enemy’s ability in the match. I should plan out all the features of the game as well as the enemy’s stats before I make them. I didn’t genuinely spend a lot of time planning the game before I develop, unlike the other ones, because back then I thought the development process would only take 3 - 4 weeks (I finished all the core mechanics within 2 weeks, but the polishing and fixing bugs took longer).

I used the object pooling system to spawn different enemies and sort of “recycle” them when they died. Because the platform I was targeting was Android, optimization was mandatory for this project as well. I couldn’t just instantiate (spawn) a new object whenever the enemy spawns or destroy an enemy object completely. The code that gets ran in the background when initialized, destroyed would degrade the performance too much. I faced a problem, however. Because I was using an object pooling system, there had to be enough enemies spawned beforehand. This means that, if I want to spawn 30 A enemies in a match, I need to have 30 A enemies in the beginning of the game. This might sound a bit silly and obvious, but here’s the problem: I didn’t want to fill the wave up with the same type of enemy. So I made different types of enemies (I used different shapes so like: square, hexagon, circle, etc.). Now let’s say I want to spawn 30 enemies in total, but I want to randomly select enemies between square and circle. Meaning some enemies from total enemies spawned are square while others are circle. Because this is all handled randomly there are a tiny odd that only square enemy can spawn. This means that I would need 30 square enemies in the pool to fill up the match with 30 square enemies (requested). This might not be that big of a problem, but what if I want to add more enemies in a wave and more variety of enemy types? I would need to spawn in so many enemies in so many different types beforehand and at some point, the object pooling system wouldn’t just work. One solution that I found was to check if the enemy is not available (“sold out”, there are no enemies left in object pool to spawn) and if not, spawn a different enemy. Unfortunately, I ended up not using this method, because the code was just getting too messy and I just didn’t want to touch it any further. I concluded with a dirty way of handling this which was just spawning a bunch of enemies beforehand and HOPING it wouldn’t result in such odd that enemy type won’t get “sold out”.

I didn’t bother with the UI that much. UI could’ve improved by A LOT in multiple aspects…

Something that I enjoyed making during the development was boss fights. It was the first time for me to make bosses, so I wasn’t sure how I should start. Turned out to be easier and better than I thought/expected. Although, I wouldn’t say I’m 100% satisfied with the product. There are things that I want to improve/could’ve improved on.

I also added ads (supported by Unity) for this game. I didn’t expect to make money from it at all (in fact, I didn’t “make” any. I got around 3 dollars USD by ads, but I couldn’t withdraw it since the withdrawal process is only allowed once you earn more than 100 dollars USD. That’s how Unity ad system works I guess…) but I just wanted to try and see how it works. Turned out to be easier than I was expecting.

I undoubtedly realized how important the whole planning procedure was throughout this project. Not only I could’ve avoided a lot of bugs that happened just because I wasn’t thinking about it enough (like the enemy spawning issue I addressed earlier in the post), but also saved a lot of time. This project might have finished under a month if I had done proper planning. I don’t want to touch on this project any further just because I didn’t plan on working on it once I’m done. Not only that, due to the lacking planning I did, I just don’t want to go over it anymore.

As I mentioned, it only took around 3 - 4 months in total to create this game from scratch, all the way to polishing. Sure, the game could’ve been made in a shorter period, just because of how simple it is, but I was bothered by other more important priorities of my life when I was developing. This might sound like an excuse (which I’m not denying) but I could only work on the game for around 5 hours per week.

But to be honest, overall the game could’ve improved in a lot of different ways. I feel like I wasn’t giving my best for this project. I’m going to spend more time polishing and finishing the game better next time.

Here are some gameplay screenshots:

Download Link: https://play.google.com/store/apps/details?id=com.FourFootGames.Progression