A downloadable game

Before reading all of this, my suggestion is to play the game at least a couple of times, otherwise most of my rant will be undecipherable gibberish.

Link to install the game is at the bottom of the page.

Idea

I wanted my first game to be exclusively made by me, so it meant doing as much as possible by myself. Next time I will definitely buy stuff to make everything much faster.

Software used

  • Unity
  • Blender
  • Clip Studio Paint
  • Inkscape
  • FontForge
  • Cakewalk by BandLab
  • Audacity

Programming

Most of the programming is pretty simple and there are only 2 ideas I would like to share. But before that, a small comment - Unity ads were much simpler to implement than I thought.

1. Constant ball speed

I tried to use Unity Physics to create a Physics Material to constantly keep ball in motion, but it had a lot of problems. Since I gave initial impulse and there is no drag, it should keep on bouncing indefinitely, but tests showed otherwise. Sometimes ball just slowed down/stopped, or it would go into frenzy and just go right through all the walls and leave game area. I tried to tackle this issue multiple times, but did not found a better solution. The breakthrough came when I stopped looking into this as a physics problem and decided it is a math problem. Speed, or better called velocity of a rigidbody, is a vector and it also has normalized property. Game is pretty simple and does not require a lot of computing power, so I did not see a problem setting velocity in update method. Also, as added bonus, power ups  were much simpler to make. Since I set velocity every frame, I can change multiplier very easily and this became my power up.

2. Spawn points

Boxes and black holes should spawn at random locations but it would be nice that they would not overlap and not spawn in front of the main ball. At first I had some complex spawner which would track every object and then calculate if new coordinates are far enough from all the objects and if they are not - generate new coordinates. The problem is that this system is complicated, testing takes a long time and there will be a lot of bad coordinates discarded before satisfying solution is found. All those bad coordinates take processing power and I thought I can do better. Solution I implemented was much simpler. Created a bunch of empty objects under one object and when game starts those objects coordinates are put into an array and all the spawners always ask this coordinates coordinator for new coordinates and it gives some random free coordinates and also index number which is given back to the coordinates coordinator when object at that location is destroyed. This means that box spawner always gets coordinates (where to spawn a box) and index (which array index coordinates belong to), after box is destroyed it spawns some loot and gives the index number to the loot, only when loot is destroyed index is returned to coordinates coordinator and those coordinates become free for random selection again. Comment: as the game is set up it is probably possible to find an arrangement of game objects that there would be no solution (although highly unlikely), but  I think it is good enough. The only thing that I need to calculate now is how far main ball is from new coordinates and if ti is too close get some new random coordinates from array.

3D assets

There is only one asset that is more complex than a basic shape – the box. The box is modeled and animated in Blender and it is pretty simple low level stuff. The only thing that was a hiccup was exporting, well, actually, the biggest issue was between the chair and keyboard. When I exported first version of the box, everything was pretty easy. Animation of every object was baked down into single file and everything was fine, but there were some updates needed and I had to export a second time on another day. For some reason I just could not remember the settings and how I did it first time and tried everything I could. Every export ended up with a mountain of animations for every separate object or without any animation at all. After few hours I felt desperate and asked in a forum how to do it, got some suggestions, didn’t helped, but for some divine reason I made another test export and it worked. So, Blender settings to export .fbx to bake down all animations into one file (probably the person who need them the most is me and I’ll keep it here as a reminder):

And the box itself:

2D assets

I used Clip Studio Paint for galaxy background, icon/banner editing and some concept drawings. Galaxy background was pretty easy, only a few brushes and some blend– 10 out of 10, would do it again. Other software which I utilized much more was Inkscape, but I will talk about stuff done with it in sections – UI and Font.

UI

It took some time to figure out what kind of UI I want. Started sketching it in the evenings just before the bed. I wanted something modern, sci-fi, but also light and simple. At the beginning I had 5 icons in mind for Main Menu – Start, Highscore, Exit, Mute music and Mute SFX (I know that in the sketch it is written "VFX", I just couldn't remember at that time how sound effects are written). The game creation progressed and I just did not see a reason why I should mute music and SFX separately, so Mute SFX was dropped and Main Menu was balanced with a box instead of a missing button. All elements were made with Inkscape.

Font

At the beginning I thought I would find some font that fits my need and be done with it, but after scrolling through bunch of fonts I changed my mind and thought I should not be a wuss and do it. Since there is not so many words in the game (terms and conditions is not included) I do not need to create a fully fledged font with all the bells and whistles. I created numbers first. Tried some stuff but could not think of anything really satisfying so ended up making old digital numbers, but with pentagon (because of the UI) instead of middle horizontal line. There is nothing much to say about letters, I just took ideas from several fonts I liked, wanted my font to be somewhat similar to numbers and here it is - the full font with everything that was needed for the game:


All the letters and numbers were drawn in Inscape, exported as SVG, all the symbols were aligned in FontForge and exported as .ttf. I wanted to use TextMeshPro for all the lettering so generate sdf. It had some complains that some symbols are missing and stuff, but I just muted the warnings and as far as I am concerned everything works.

SFX

I recorded sounds with Audacity. Used some stuff I found around the house to make some noise in my ultra high tech special recording booth.


All the sounds were extensively modified in the Audacity and I probably could not recognize which thing made which sound. There was an issue with Audacity, probably not Audacity but sound buffering. Since SFX sounds are really short my PC could not play them in the Audacity, instead of looking to some solution I just added some silence in front of every track so I could hear them from Audacity and removed the silence when exporting for the game.

Music

I used Cakewalk and some free VSTs to created the background music for Main Menu and game. It took some tries, but my thinking was that I want something to sound empty, empty as in space empty. Main menu music was really simple, just a few notes on a loop. With game background music I spent a bit more time. I also wanted emptiness of space but with a bit more nuance and that it would suit my sfx. When my wife heard background music in Main Menu she said – “It is sad, no one will want to play” and I probably would not argue with that.

Publishing

I published on Google Play. It took some time to read everything Google Play wanted from me, more than one evening. Some stuff was required from Unity and some mistakes were made. Key pairs. I do not remember who asked first (Google Play or Unity), but I had to setup public/private key pair. I found the settings in Unity, generated keystore, added some random password, generated key, I thought this pair will be used only for Unity ads communication, I can always generate a new one – Big Mistake. After some form filling and pressing buttons in Google Play Developers Console I uploaded my .aab and it was for review. Actually what was still missing in the game was Terms and Services. Added "Terms and Services". My old release was still in review and it could not be deleted, so I created a new release. I went to Unity to export new .aab, but then there was a message that I need to provide password for keystore and omgfnszj I have no idea what it is. I created new keystore, generate new key pair, made new passwords and exported the .aab. Tried to upload it and key does not match with previous one (sad face), I deleted old keystore (sadder face), only way to change this key is to contact support (saddest face ever). Support was extremely professional, gave all the info and 10 out of 10 communication. The issue – there is no way in Unity to export .pem files, tried KeyStore Explorer – no luck, support rejected my sad attempt to botch up .pem file. So I downloaded Android Studio (although it was probably not necessary), used some commands with Powershell and I have my new key pair that fits support requirements. And thanks to all the mighty technology gods and Unity that it accepts .jks as keystore. So, my key was updated, but I had to wait for 2 days to take effect and then I will be able to upload my new .aab file. When time came I uploaded the .aab file and got another error (crying face), my company name and game name must match previous. When I uploaded my first version I left company name as “DefaultCompany” and after that I fixed it into something reasonable and now for some reason when I put “DefaultCompany” it still does not match and does not allow me to upload a file for a new release. I just created a new app, uploaded my new .aab and filled all the required forms. Doing everything second time was much faster since I already knew what to expect and what needs to be done. Of course there were many more small issues that I had to deal with one at a time, much more than one release was created and I do not remember how many times I exported that .aab bundle.



Last words

There will be no updates.

Available on