Timestream was my first time doing a jam by myself. There were two game jams on itch that I was keen to do. The The Very First Extra Credits Game Design Jam! and Kenney Jam 2018 which were both on at the same time. After checking with the organisers I decided to enter both with the same game. This lead to a venn diagram of constraints:

Venn Diagram of constraints.

To meet 'Awesome Per Second' I wanted the player straight into the action. I also chose the music by using the bpm search on Incompetech and finding the looping 140bpm 'Reformat'. The time travel took a bit longer to work out. I thought through various time travel mechanics and what I would actually be able to implement in the time limit. I decided to go with two time streams that you can switch between, inspired by the 'Effect and Cause' level from Titanfall 2.

The goal I chose was for the player to spend time in each time stream, building up a meter. The enemies were turrets as it meant they had the easiest AI to implement. I started off by making a map in Tiled using tiles. This was only going to be a temporary one but unsurprisingly it is what shipped. Once I had made a map with grass and roads I made the same map again using desert tiles. Next I implemented the driving mechanics and played around with the values until it felt nice and snappy. I then implemented jumping between the timezones. This is just having two layers and choosing which one is visible. I also added the win condition so now it was a complete game. The meter for each time zone builds up while you are in it and slowly degrades while you are out. When it turns green that time stream is ready and when both are green the game is complete.

To add in the challenge, it was time for turrets. I created a gun in the modern time zone and rocket in the future. These always rotate towards the player. You can especially notice this when you are close to them because they instantly turn. An easy fix for this is to have a goal angle and a max turn speed. On each update you turn towards the goal angle limited by the max turn speed which gives you a lot more control. The projectiles get the angle of the turret and carry on forwards until they hit the player or fall off the map. To make the turrets fit with the timezones, I changed the collision and visibility so they would only collide with the player when the time zones matched.

The main variable I had to play with to meet the 'Awesome Per Second' goal was the fire rate of the turrets. Too high and it quickly became overwhelming before the player found their feet. I made the fire rate ramp up the longer you stayed in a time streams to encourage the player to jump between them. To spice it up a bit I added a stronger turret to each stream. The modern turret fired double projectiles and the future one fired homing rockets. I also added various obstacles for the player to run into.

On the home straight, the last thing needed was to explain what was going on to the player. This is where I went down a rabbit hole. I decided to use the common technique of showing an avatar face with text of what they are saying. This let me add in a story of a brother and sister in the car trying to get a signal fix in each timeline. I ended up building a framework for sets of conversations which would be randomly selected after the initial instructions had completed. Since I was quite tired, a lot of these were in jokes to myself, some of which I no longer remember the goal of but I did find it amusing at the time. The main problem with this technique is the genre I used it in. On a turn based game or as a cut scene the player can concentrate on what the characters are saying. For an intense 'Awesome Per Second' game the player has all their attention on the car dodging missiles so doesn't have time to read instructions scrolling past or look at the UI shoved way in the corner. This is reflected in the feedback of "I didn't really get what your supposed to do in this game" and "found the game hard to understand".

Overall I was pretty happy with how this came out, even if it the goal is usually lost. I think it met the 'Awesome Per Second' goal and it proved to myself that I could make something solo. Creating something meeting two sets of constraints was an interesting challenge but it is already hard enough to get something done in time so it is not necessary to load up with additional constraints. It really highlighted the need for play testing and making sure the goal is clear to the player immediately.

Lessons Learnt

Play test to make sure what is going on is understandable.
Make important UI as clear to the user as possible.
After reading your music hundreds of times it will be stuck in your head for days.