I felt that the different collectible systems in the game and how they linked to each other were convoluted and disconnected, but I didn’t know how to fix this until now. For example, completing quests unlocked new albums, but not other tasks such as achievements, and the player can buy both songs and outfits, but both feel separate with nothing connecting them.
I was trying to think of a way to make these features more connected to each other, but I wasn’t sure how. On a trip to Thorpe Park, I used the new ride access pass system for the first time. This is now digital and shows a timer of how long is left before you can use it again, which is a new way of showing progress that wasn’t previously there. This inspired me to make a level system where buying songs, buying outfits, completing quests and completing achievements all give the player xp, and when they have enough, they unlock the next album.
I added new variables for the current level and xp count. When the player buys a song, the xp count is incremented by 1, and incremented by 2 for every outfit they buy. I decided to use these values as the song cards are cheaper than the outfits and there are more of them, so the xp gains are more balanced. As songs are 50 gems and outfits are 100, both give 2 xp per 100 gems spent.
Song card XP
Outfit XP
When an achievement is completed, the player receives different amounts of xp depending on the achievement’s star level. This is done by tracking which level is completed, and adding xp if the data modified variable is true. Quest completions give xp which scale up with the quests. As the quests no longer give albums directly, I added gem rewards to give an extra incentive to complete quests.
When the player levelled up, I was setting the current xp count to 0 to reset for the next level. However, this removed any extra xp the player gained instead of starting progress on the next level. I changed this to removing the current xp threshold from the xp count, so that it leaves the remaining xp.
Achievement XP awarded and thresholds used
Quest XP awarded and thresholds used
Run path and shoes
I thought about the features in the game and realised there was not much specific to runners, as everything was centred around Taylor Swift. I had an idea to use the Strava map data to create a visual representation of a player’s activity using their avatar to run along it.
I saved the polyline data from the Strava activity into a Vector2 list of coordinates and then converted the list into a Vector3 so it could be used in a 3D environment. I then used these coordinates to generate a road mesh and spawned it into the game. However, the map felt too separate from the rest of the game and didn’t really fit as all the other physical game objects were the avatar and clothes.
I had another idea specific for runners that fit more cohesively with the other game mechanics. I decided to add a customisable running shoe that the player’s avatar could wear, with new colours and parts of the shoe available as the player levels up. I found a base running shoe on Fuse and imported it into Blender. I set different parts of the shoes to different materials and rigged them.
I added a new tab within the game for customising the shoes. This has a section for choosing the part of the shoe to customise, and the colour to change it to. Each part and colour has a button that when clicked, sets the current part or colour variable to its ID, depending on which type it is.
The set colour function in the shoe manager script is then run, which sets the colour of the selected part to the target colour. I tried doing this by changing the relevant material in the array of the mesh renderer, but it didn’t work. After researching I found that the whole material array has to be set at the same time, and not just one element of it, which is different to every other type of array I have used. I set the array with every item set to itself except for the target material which I changed to the relevant one.
After changing the colour of the shoes, the currently used shoe IDs are saved. These are loaded at the start of the game and used to change the shoe to the saved colours using the same method.
To make the colours and shoe parts unlock, I added the buttons to an array and cycle through them to allow buttons that have been unlocked to be interacted with. When the player levels up, this automatically enables the next colour, and the next shoe part if the correct album is unlocked.
I moved the customising shoe menu to the wardrobe and added the custom shoes to the outfit switching system. To make this work I created a copy of the shoes that don’t run the player animation, which is displayed to the player while they are customising the shoes. The material changes are also applied to this copy, so the materials are accurate.
At the start of the game, the default outfit is equipped by checking if the player only has the default clothes unlocked. As I added the custom shoes as clothing that was unlocked by default, equipping the outfit broke so the avatar was naked at the start of the game. I fixed this by changing the equip function to run if the number of unlocked clothes was the same as the starting number of clothes. This fixed the issue and future-proofed the avatar so that if I added more starter clothes, this issue wouldn’t occur again.
I added a popup that appears when the player levels up. This displays the album unlocked, the new colour for the shoes, and the new shoe part unlocked for relevant levels. I tried using a plain image that changed colour to indicate which colour was unlocked. This didn’t work, so I switched this to an image for each colour, and the correct one would be enabled when the player levels up.
I noticed that when the player levelled up and won an achievement, the level up display would be shown in front, but the achievement information box was visible above it.
I tried adding a check when an achievement is won to only give the achievement when the level display wasn’t active. However, as the level and achievement were triggered on the same frame, this check failed.
I then tried delaying the level up check slightly, and only giving the new level when the achievement display wasn’t active. This worked when one achievement was unlocked, but when multiple were unlocked at the same time, the level up display would appear between the first and second achievements as there is a transition frame where the achievement display is not active, so the level display is activated.
After trying these methods, I realised I didn’t have to actually display one at a time and instead could make it look like that. I adjusted the position and dimensions of the level up display so that it completely covered the achievement display to give the illusion of them being shown separately.
I adjusted the XP scaling to make the levels feel more achievable. The higher levels increased by several hundred points each time, so I reduced the thresholds for some levels. The total XP available from all the songs, outfits and achievements was only 20% of the total, meaning 80% came from quests. I changed this to 60% from quests and 40% from other sources so that the levels weren’t so reliant on quests.
When opening the custom shoe menu, the panel to switch clothes was still open. I set every clothes panel to close when this occurs, which removes the need of knowing which panel to close.