In this post, I am explaining the improvement phase of the game that I developed for Experimental Project, and I reflect on the issues that arose during development.
Circular web-like design:
Choosing to have a circular web-like design for the rails that the characters follow added a unique appearance to the game, but at the same the design caused me to spend so much time and energy on connecting the nodes manually to each other.
Since it looked like a flower blossom, I wanted the web to open up like a blossom as well. I thought, adding an animation to the circular web for gradually generating it from nothingness would have a nice game feel and enhance the player experience. Thus, I animated one of the nodes (children objects of empty game objects rotated in certain angles) in each circle, to move from inside out, utilising the built in Unity Animator and Jai's UI Controller Script for applying the same animation to each node within a circle.
Coding without structure and no scene changes:
The game begins, Sun chases Moon and when Sun catches Moon, an eclipse occurs. The characters freeze for 5 seconds, then they get summoned to different locations on the web, and they change roles. Moon chases Sun, and the player needs to run away for 15 seconds. If Moon catches Sun, the game is over, and the player needs to re-start play. If Sun manages to run away and not get caught for 15 seconds, then the eclipse phase passes and the characters freeze for 5 seconds, then they get summoned to different location on the web. They change roles again, Sun chases and Moon runs away, until Sun catches Moon once again causing another eclipse.
Applying this scenario to the code was challenging, because I did not plan this structure from the very beginning. I kept adding and adding details to the existing code, and it became more complicated each time whenever I wanted to make changes or additions.
Something new that I tried out first in this project was changing the state of the game without changing scenes in Unity. I tried changing modes of two different characters (player and enemy) and also game levels without passing on to the next scene. I aimed to make the level changes happen within the same scene, because I did not want to break the flow, and I thought adding new nodes in and enlarging the circular web would look nice aesthetically, showing their progress to the player via visual feedback. However, this choice made the game very hard for me to control. Since everything was happening within the same scene, every line of code effected everything and whenever I made a mistake or overlooked a scenario it broke the game from many different aspects. Considering the fact the code was not well-structure it was frustrating to look for which line was causing the problem.
Communicating the player how the game works:
Apart from programming issues, the most challenging part for me was to communicate to the player that the roles (mechanics) were changing when an Eclipse occurred. In order to hint the player the change of roles in an elegant way, without any writing or obvious iconography, I decided to visualise the eclipse, and add a scenery at the background. I changed the scenery by slowly lerping the color of the sprite from white to darker orange, to mimic the effect of an eclipse. After that, David gave me an idea of also showing the occurrence of eclipse by the approaching of a dark circle to the scenery. I used a background sprite with white paper texture, and cut a hole on the middle with Photoshop. I placed the circular scenery image at the back of the white paper background, and added a dark circle sprite in the middle of two, which represented the moon in solar eclipse. I animated the dark circle using levers made of Unity game objects to lift the dark circle softly when Sun caught Moon.
Even though there was more visual feedback, I still did not think it would be enough for the player to understand what was really going on in the game, therefore I wanted to give them a brief story before the game started. Rather than using plain writing to tell the story, I experimented with Doodle Studio 95 for the first time. I added simple 2D animations to the start scene for the players to scroll through.
Sun was controlled by horizontal and vertical axis (arrows), but it felt much natural to control it by a joystick. I initially wanted the controls to feel like Hot Wheels (toy cars on rails). Considering that I will not always have an access to a joystick, and hoping to build the game for mobile touch screen, I built a virtual joystick in the game scene. When I tested out the game in class, I received some feedback on controls. Players did not feel in full control of the character. Since the control was not very smooth, it was not possible to make the desired turn every time. One of the suggestions was to keep the characters moving (endless runner) and only let the player choose the direction, but I did not want to implement this idea, I though it would cause the player to assume a too passive role in a relatively slow paced game like this, and it wouldn't feel like playing tag.
Subway Surfers is an endless runner, twitch mobile game on rails, and the player swipes to move lanes (left-right) and swipes to jump and duck (up-down), in order to dodge the obstacles on the way. The player character is being chased by an enemy character and if he/she slows down or hits an obstacle the enemy catches the player, and the game is over. If chose similar controls to an endless runner like Subway Surfers, I would have to change the pace and make it faster and maybe add in collectables along the way. I thought this arcade style would not feel right with the atmosphere that I was trying to create in the game scene. The feedback on the controls made me realise that changing the controls can effect the whole vibe of a game. If I had more time, maybe I would try out and see.
I tried to address this control issue by changing the static joystick to a non-static one. The player can move/drag around the new joystick or touch anywhere on the touch-screen to make the joystick appear there. Unfortunately, his change did not really fix the problem. Actually, the code needs to be updated to track a larger area around the nodes for detecting the input axis of the next route to be taken. Additionally, since the current turns are too sharp, making curvy lines as I fancied at the beginning of the project could help to fix the issue and smooth out the controls.
Due to time constraints, I decided to limit the game levels to three Chase and two Escape phases. I planned that the game would finish when the player was able to catch Moon the third time, causing the occurrence of the third eclipse. To signal the win state of Sun (player), the scenery would clear and the web mandala would inverse animate back to nothingness. Unfortunately, I have not got to this stage, because I was dealing with fixing the broken features instead. In the current situation, the game does not have an ending, but I would like to make a nice ending to the game before putting it in my portfolio. If the player got caught during one of the 15-second Escape phases, the the scenery would change to complete black colour to symbolising an eternal eclipse, and to signal the loose state of Sun and win state of Moon.
For the art style of the game, I tried out a few alternatives. First, I considered having 3D characters (Sun and Moon) and a 3D Earth in the middle, similar to my concept art. There were plenty of affordable 3D assets online since I was using general celestial bodies. I decided against 3D art when went back to check the Pinterest mood boards I made for the game, at the beginning of the project. I had The Little Prince and Le Petite Nicholas for reference. I considered making the characters and the whole game scene with Doodle Studio, but then decided against it, since I did not want the style to be as fuzzy. I was aiming for a colourful and homey and but clean and simple look. Eventually, I searched online and found images that I like and collaged them together.
I started the project with experimenting with the chasing mechanic, and for this reason I tried creating a non-player character (the petite AI) that mainly behaved based on the player, but also had it's separate pattern of behaviour (modes and short confusion periods). At the latter stage, I found myself struggling with creating feedback loops, to guide the player through the experience without breaking the natural cycle of a playground tag game. If I had planned better and had more time to work on the project, I would have like to polish the controls, change the speed of characters as the levels progressed and add in more features such as special areas (i.e. short-cut routes) or pick ups that made the characters faster or slower.