This game is my first I’ll be publishing on a proper store for anyone to hopefully find and download. Part of this was just to test out how developing and releasing my own games like this would work and also to try out properly polishing a game to a high enough standard that it felt like it warranted a release.
​
The game is a bullet hell game where you control a small ship which flies towards wherever you touch on the screen and it constantly shoots bullets. It’s from a top down perspective and enemies will enter the screen from the top, firing at you and trying to get to the bottom and crash into the mothership that you’re protecting. There are 9 levels to play increasing in difficulty and a boss to fight in the 9th level. There is also the endless mode which you can play to see how long you survive and get a high score and other achievements to unlock ways to customise your ship. Below is the trailer for the game that can be found on the Google Play Store.
​
Google Play Store Dodge This! Link: https://play.google.com/store/apps/details?id=com.CCromb.DodgeThis
GitHub Link: https://github.com/ChrisCromb/Dodge-This
Everything in the game excluding the font and some special skins designed by friends and family, was made by me. The programming, art, animation, UI, music, sound effects. Work on the game started May 2022 and was done occasionally during job searching for about 3 months. I would definitely be able to have compacted this time with what I know now. I encountered issues trying to build the game for the Google Play Store and as I was unable to solve them, had to remove several older versions of Android from being able to use it instead.
​
Some features to the game I’d like to discuss were the ship stats, the movement, the level loading, the save data, the endless mode. All my code is available on my GitHub page, but I’m afraid as I’m new to GitHub I only thought to uploaded my code nearer the end of the games development. For future projects I won’t make that mistake again and ensure I keep it up to date throughout. The ships all used a series of stats, which the players is able to be increased by power ups, and the 3 main types of enemies have specific fixed stats to differentiate them. The stats each ships have are: Max health, Current health, Damage, Fire rate, fire speed, Move speed. The power ups the player can collect have a chance to drop when you defeat an enemy. The enemy ships three styles are medium, large, and small, and can be summarised as average, tanky and stronger, and weaker but faster. These in order fill the roles of general fodder that you still need to dodge, tougher enemies you need to focus to make the battle safer, and a fast nuisance that can get in the way or damage you if you aren’t quick to remove. I tried to consider ways to use these three types for each level that would cause the player to have to think strategically to avoid damage and manage the growing difficulty.
​
Another detail specific to these enemies were the movement patterns. Rather than making every enemy always move in the same pattern down the screen until it reaches the bottom, I gave them a range that they could use for the endless game mode and specific ones for the levels to have the same conditions each time. Some would move towards the mothership quickly in one straight line, while others would zigzag their way down gradually, do loop-de-loops or try to travel down the sides and avoid being picked off until it’s too late. Each ship’s movement speed is used to follow the list of coordinates provided when they spawn in either the top left or top right of the screen. To avoid having to repeat the coordinated all the way down the page, I developed a system that takes the start of the loop and the distance downwards from each loop and repeats those coordinated down the page until they crash into the mothership.
​
My game only uses two scenes for everything, one the main menu and the other the gameplay. This allows the only loading when playing the game to often be just a few set of numbers. Each enemy spawner for the level uses an array that says which type of the 3 enemy types is spawning, what time it spawns, and what movement pattern it uses. There is an enemy spawner on the left and the right, the only difference being that the spawner on the left tells the ship to use the inverse X coordinates for movement so it mirrors the other side. These enemy spawners can also be toggled to be endless spawners, which will increase the amount of enemies spawned by 1 each wave, in the pattern medium, large, and small. This creates the escalated difficulty of the endless mode which I’ll discuss later.
​
For the save data, several things needed to be logged to ensure the player didn’t lose their progress or achievements. Basic things like their high score and which levels they’ve unlocked are important to keep saved so players won’t lose any progress they’ve made. Less obvious things like how many of each ship have been defeated though are also tracked as these are used to see if conditions have been met to unlock the skins and trails, along with saving that they’re unlocked. The way all this data is saved is by writing it all to a text file and converting the text to binary so that it can’t be easily tampered with. Then in game this file is loaded and converted back into usable data so no progress is lost. I was pleased to see that this system still worked between updates to the app on the store as well as the text file is never replaced so aside from something like cloud storage, player’s progress is pretty safe.
​
The endless mode was a big focus for the game as the levels aren’t always long enough to get lots of power ups and feel yourself gradually get stronger. Many tweaks to things behind the scenes were made to make it a better experience. As I mentioned earlier, the amount of enemies increases each wave, meaning the player will find it tougher and tougher. To help keep the play experience in “flow” and ensure the player gets chances to feel that they’re in control and times where they’re struggling, the powerups are essential. However while trying to keep the endless game mode definitely endless and some powerups not feeling useless, the player can get too strong and outgrow the enemies. I didn’t want to add a hard cap to how much power the player could get or it wouldn’t actually be endless but for future games I would definitely spend time tweaking different stats and formulas to ensure the flow is kept and it doesn’t get less interesting at high power levels.
​
Ultimately, I’m very proud to have actually completed a game and published it on an official store. I learned a lot doing that and even just in polishing a game to a high enough standard I was comfortable with sharing it to anyone. It can be hard to leave a project alone near the end or even get to the end without just dropping it for another idea but in persevering I improved a lot and know what to do better next time.