July 1, 2017
I woke up early to start with the first thing on my list – a working, playable prototype in, at most, 8 hours. It took me about 13 hours.
The main problem I had was the optimization of the game, especially during the prototyping stage, my laptop “blue screen”ed three times; because I was trying to randomly generate a tile map with a separate particle system for each tile.
Now to give you an idea on how messed up my system was; this was just during the prototyping phase. I didn’t have any sophisticated assets yet, I have a cube for the character and the enemy and a 1×1 (Unity unit) plane fore each tile. Still, my laptop couldn’t handle it.
I couldn’t think of any solution back then, so I just minimized the particles emitted by the particle system, removed the shadows of the particles, and removed the emission property of the particles. I’m left with a simple tile emitting a red square for the fire tiles and a dark purple square for the dark tiles. I settled with this and moved on.
After the writing the code for the tile map generator, I write the code for the player; it was just a simple character movement controller using Unity’s rigidbody instead of the character controller, because why not. Just kidding, because I need to simulate realistic physics collision and gravity. Also, I have two camera modes as of this stage, a 3rd person over-the-shoulder camera and a top-down view camera, because I was not sure yet what to do.
I didn’t really allotted a lot of time in the player controls because I know that I will have trouble with something else – artificial intelligence.
Honestly, I’m not really good with artificial intelligence. I like reading about AI, but there is something about writing it that just throws me off. You can see that the picture above is the only thing I wrote when I was planning how the AI of the enemies will work; the rest I just implemented as I go through writing the AI. Also, the check marks on the images are just made by me when I finished a certain part of the plan and yes, I still haven’t done any player and enemy data (health, experience, damage, etc.) when I reached this point in development.
The first thing I did with the AI was to figure out how the enemy will stay within the bounds of the tile map that was generated when the game started. I fixed this by randomly generating a Vector3 position using the bound of the tile map generator, which I called xTile and yTile. Meaning I just generate a random position from 0 to the maximum tile in the map, both for x- and y- axes. It was a simple implementation and it worked, it also solved the problem I had with how will the enemy go around the map in order to turn the tiles into dark tiles because I was aiming a Splatoon-like gameplay.
The next thing was to make the enemy chase the player. I implemented this in two ways: the enemy will chase the player if the player is in a certain range from the enemy, and the enemy will chase the player if the player was away from the enemy in a certain amount of time. The first one was implemented by Raycasting from the enemy to the player and if the distance of that ray is less than or equal to a certain number, the enemy will start chasing the player. The second one was implemented by writing a timer for each enemy, then, if the timer reaches zero, the enemy will chase the player, then it will reset after a certain amount of time chasing the player.
Applying the functionalities above pretty much built up the artificial intelligence I need for the enemy, but, I also added a functionality on the enemies – I made them jump. This again is random, I was planning to remove this before final build but, as I tested the game, I noticed that the jumping made the enemies look cute, so I kept the jumping motion of the enemies.
After the artificial intelligence I moved to planning how the pointing system will work and how bonuses will work, basically I planned how the win-lose system will work.
After planning these, I began to write the data class.
Now, a lot of these changed as I continue to iterate. That’s the beauty of developing a game, the plans are just there to give you something to start with, but most often if not always, you will end up with something far, in one way or another, from the plan.
This day was pretty much focused on just prototyping how things will work, at the end of the day, I ended up with something like this:
July 2, 2017
This day I was planning on finishing the data class, implement it, add a save/load functionality, and start with the graphics for the game.
Making a data class was not a problem for me, it’s just a singleton that will persist through the scenes and it’s only consists of variables and properties. The problem I encountered during this stage was THE FREAKING SAVE/LOAD FUNCTIONALITY ISN’T WORKING. I reviewed the past lessons I read about the topic and still couldn’t get it to work. The save functionality was solved pretty quickly, but I could not get the loading functionality work. Then I realized (this may sound funny), about 2 hours in, that I wasn’t saving the loaded information properly to the variables of to the instance of the singleton. That was a noob mistake and I laughed and facepalm’ed myself.
After messing around with the data for the win-lose system, I jumped to Blender and Photoshop to make the assets for the game.
I started with the blocking where the UI elements will sit on the screen. At this time I still don’t have an art for the main character but, from my Pinterest board, I have a ‘general’ feel in mind, so I jumped to Blender and started modelling the main character and the enemies; and ended up with these:
This days was focused more on aesthetic design and at the end of the day I ended up with this:
July 3, 2017
This day was full of balancing, modifying some of the UI elements, adding post-processing effects for the ‘high’ quality option, and not staying in front of my laptop for pretty much the whole day.
I submitted the game 10 minutes and 13 seconds before the submission deadline,
Conclusion and realizations:
This jam was fun. Quite challenging but I got through it with proper time management. That is, breaking down the game into small pieces as I can then prioritizing which task will come first. Like most games and developers out there, the next one will be better.
I’ll join the next one for sure! 🙂
Thank you for reading, you can play the game here: