Being the penultimate week of the semester (and my final year of the course), this week has been pretty busy, to say the least. There were a lot of small things to do and a few big things, and it all added up to what can certainly be considered a fruitful week. It wasn’t all pleasant, but things have been falling into place, and the game’s feeling progressively more real by the day. Anyway, here’s another flurry of bullet points and screenshots for you.
Monday
Morning:
- I went to the studio early and wrote my portion of the team’s weekly blog post, before sending it over to Ella
- I briefly wrote a bit of code to calculate the distance between an NPC and the player, for when that distance needs to be calculated constantly
- While talking to Ella about UI elements, I spent some time thinking through and programming the rotation of NPCs, based on which area they’re in or which critical character they are
- We went to get lunch
Afternoon:
- I showed Ella the camera angles from the wind interaction, and we determined that I need to switch Gloria’s direction to face towards the camera, and that the Triangle Man should face directly towards Gloria during the triangle interaction
- I finished the rotation code, having different rotation behaviours for different characters
- I highlighted the issue with Ella about the wind villagers’ ropes moving up through the trees and being visible, and she suggested lowering their scale on the y axis, so I accepted that as a thing that I may have to program
- Using a sphere in front of the violinist (as per Richard’s suggestion), I tested that the rotation was working properly, and it seemed to be fine
- After doing very little for a good while, I tested that the code for showing and hiding the wind villagers was working, and it was
- I spoke to Ella about potential ways to block progression in each of the areas, and said to George about her thoughts (though it was too late at that point, since he was just finishing up the gates)
- I briefly tried to help Ella out with Adobe InDesign, and George sent me the character models so far and the gates he’d been working on (to serve as progression blockers) during the day
- I imported all of the gates, and then started placing and scaling them, starting with the gate for the string area, where I needed to move and scale some rocks around it to make it fit the space nicely
- I did the same for the gate for the wind environment, which required far less effort and tedium
- I did the same for the brass environment’s gate, which required some rocks to be moved and their colliders (which are separate) to be matched with them
- I did the same for the triangle environment’s gate, and then headed home
Evening:
- After having dinner, I spent a good while manually adding box colliders to the different parts of each gate, so that they could serve as effective progression blockers
- I imported Bernie’s model for the flautist, which George sent to me (as he’d been animating it, and had sent me the version sat on the swing that he made)
- I got colours for the flautist’s unlit materials by using the colour picker on Ella’s turnaround sheet for him, and added the materials to the model
- I used the materials from George’s and Bernie’s environment models for the flautist’s swing and the gates, as they were imported without proper materials, and this took quite a long time
- I imported Bernie’s trumpeter model (which George had sent over), scaled it briefly and used Ella’s turnaround image to give it unlit materials
- I imported George’s Piano Man model and used Ella’s turnaround to give it unlit materials, in line with the other characters
- As a quick test before bed, I thought I’d create unlit materials using Ella’s original concepts of the brass area, and I swapped the brass area’s current materials with the ones I just made, with pretty cool results (that’d definitely need some bespoke tweaking)
- I didn’t realise that I wouldn’t be able to revert the changes, so I had to reimport the brass area model to extract its materials and add them back to the current model
- Doing this thankfully solved the issue, so I pushed the changes to GitKraken and went to bed, albeit later than I expected
Tuesday
Morning:
- I went to the computer room early, but spent a chunk of the morning writing a card, after which point Unity was locked on startup again (leaving me quite worried)
- When the project didn’t open after an arbitrary amount of time, I installed Unity 2019.2.0b2 to see whether a new Unity version would fix the issue
- I spoke to George and Ella, catching-up on what we’d been doing, and determined that I needed to move the gate between the wind and brass areas to allow for more of a transition between the two, and that I needed to fix the third-person camera to make its angle restraints work
- I spoke to George about us using GitKraken to make simultaneous changes to the Unity project, and we determined that he would make changes to the scene in Unity and then stage only what he’s changed for me to pull
- I started working on the script for opening and closing gates based on the player’s progress, and moved over to the studio
Afternoon:
- After having lunch, I went to town (to post the card) and started feeling quite unhappy
- I moved back over to the computer room, and programmed a subroutine to set the values that would be used to determine the angles of the gates, based on which synchronisation interactions have happened
- I programmed a subroutine to set the angles of the gates based on the maximum angles and the calculated angle values
- I spoke to Ella about ideas for the cover design for the art book, for which she was going with a minimalist approach
- I tested that the gate opening was working, and after inverting the right gate’s rotation, everything was working as intended
- I realised that the maximum and minimum vertical angle values for the third-person camera were being set in degrees when the angle is stored in radians, which explained why it wasn’t working, so I fixed that
- I spent a while working with Ella on the cover design for the art book, checking whether designs and colours were working well
- I asked Ella whether to bring the wind mechanic’s synchronisation in line with the others (to make it maintain a full synchronisation level once it’s reached) or vice versa, and she said to do so, so that people wouldn’t get stuck in the first interaction
- I made it so that the synchronisation value for the wind mechanic doesn’t degrade if it’s reached 1, and when I was testing that the changes had a noticeable effect, second year students gathered round and I ended up showing them the game
- It was clear that I needed to change the synchronisation colour for the wind mechanic, as it wasn’t clear that the synchronisation was happening, and I remembered about needing to program the extra characters to join in the piano mechanic
- I started feeling quite unhappy, and did very little for a while
- I said to Ella about the synchronisation colour between Gloria and the flautist being too unclear, and she gave me new synchronisation colours for the flautist, the trumpeter and Piano Man
- I used Photoshop to get the RGB values for the synchronisation colours, and added them in through code
Evening:
- I headed home, still feeling quite unhappy
- A while after dinner, I spent some time placing game objects with trigger colliders around the environment to act as triggers to change the player’s current area index
- I programmed a short script to attach to the trigger colliders to make them switch the player’s current area when they’re walked through, and also added a brief subroutine to the status management script to potentially cue the background music to change there when the area is changed
- I added the script to the collider objects, gave them their respective area integers and added them to a new layer (since I found out they were otherwise disrupting Gloria’s incline detection)
- I tested that everything was working as intended, and it was, so I took the opportunity to tweak the values for the cameras used during the approach and ascent of the tower
- While testing, I noticed that I could climb on the Piano Man’s collider, so I moved it up slightly
- After pushing the day’s changes to GitKraken, I went to bed
Wednesday
Morning:
- I didn’t get anything done for a while when I first got to the studio, but Adam popped in and I briefly showed him some of what I’d been working on
- I started feeling quite unhappy, but thought through how I’d best achieve a script that allows me to skip to any particular point in the game (since I had to be tweaking the piano mechanic, and would have to be constantly changing every other mechanic to match the music, and didn’t want to be having to manually get to it every time it needed testing)
- I thought through which parts of the game would need to be teleported to, and which values would need to be set at the various points (and in hindsight, this was a waste of time since it was pretty easy to manually trigger the interactions that needed testing and tweaking)
- Sid sent over the prefabs for the particles he’d been working on, and I saved them to my laptop
Afternoon:
- After having lunch, I moved to the computer room and spoke to Ella about the publication, then spoke to Ella and Bernie about unlit materials, how they fit the game better than the current lighting model and how easy they are to implement
- I started replacing the materials of the trumpet that the trumpeter is holding based on the unlit render that Bernie uploaded to social media
- I went to town for something to drink
- When I got back, I finished replacing the materials on the trumpet
- I briefly helped Adam to change some of the input checks in Sam’s project, so that Adam could run it on his Mac
- I spoke to George about what I’d been working on, and about things for him to bear in mind (such as us not simultaneously making changes to the scene, and how to approach rock placement and smoothness for his remaining environmental work)
- I imported Sid’s snow-related particles, changing the folder layout to keep everything organised
- I briefly said to George about the need to place Triangle Man near the triangle interaction, and to have a triangular object to put the interaction on (since he didn’t want it to be around the exit, which I was intending on placing the interaction on)
- I changed the rotation aspect of the script for the ping system to accommodate for the trumpeter standing up (and thus needing to rotate), to fix the calculation for the vectorial distance to the player (as it was initially using the y-axis instead of the z-axis), and to make the player’s distance calculated for all key characters
- I spoke to Ella about the art book, discussing how to handle the intro and whether Sarsen Press include their details in the book automatically
- I found and sent over to Ella the summaries of my discussions with George for designing the game’s interaction mechanics
- I tweaked the ping system’s behaviour script so that it only functions if the NPC in question is in the same area as the player (so that calculations aren’t being made unnecessarily)
- I spoke to George about needing the old model for the flautist (without the complete hair) so that I could use it for a prefab for the wind villagers, and we determined that he’d send me that model when he can, and that he’d also send me Gloria’s model and animations for me to implement
- I discussed my current task priorities with George, and we determined the following order:
- Fix the door in the string area to make a playable build for testing
- Implement the music (whenever I get it), including tweaking the interactions to fit it
- Implement the particle part of the ping system
- Make the characters appear at the top of the tower after the Piano Man interaction
- Implement the animations for Gloria (since she’s on-screen so much), with movement while playing the violin disabled
- Implement the animations for everyone else
- Program the other characters’ lines to join in during the piano interaction
- Implement the menus, using Ella’s sprites
- I checked the order of necessary tasks with Ella, and she said that it made sense
- We discussed how we’d be approaching the documentary, determining that we’d be filming the interviews the following afternoon and that we’d upload B-roll by the weekend
Evening:
- We headed home, and I started feeling quite unhappy on the way
- After having dinner and drying-up, I added one of Sid’s particle orbs (for when Gloria is unsuccessfully pinging) to the scene as a child of Gloria, offset above her head, and tweaked it to reduce the number of particles it spawns to one and its duration to one second, so that I could loop it manually
- I tweaked a second orb (for synchronising with a string villager) to reduce its duration, and got to grips with adjusting particle emissions
- I added a couple more, tweaking them to be in line with my prior ones, and I remembered to scale the symbols to match the scaled-up orbs
- I added a small subroutine to have ping particles appear when bowing or plucking the violin, checking whether any of the particles are already playing and then whether a synchronised ping orb should appear
- I tested the ping system, and it was working, though it was only triggering the synchronised pings if bowing the violin (and not plucking it)
- I fixed this by making the subroutine set a Boolean to true if a ping is triggered to play, and then wait until the next frame to check which ping particle to play, so that the number of characters being pinged with has time to update beforehand
- I fixed the gate in the string area (which was starting open, due to pointing the wrong way) by adding 180° to its y rotation
- I pushed the changes through GitKraken and headed to bed
Thursday
Morning:
- I went to the studio early (as per usual), and after eventually updating Visual Studio, I showed Sid the ping system, as well as a ping particle that was causing a constant stream of errors, which he fixed by dragging one of the child objects into an object reference for a sub emitter
- I showed Adam the ping system, and he felt that it wasn’t very obvious that the player and the character were pinging together, though this was before giving the character its own ping particles
- I tweaked the ping particle for brass synchronisation, so that it’d be in line with the other synchronisation particles, and I updated Gloria’s pinging code to support the brass pinging
- I moved to the computer room (because it was too hot in the studio) and showed Ella and Bernie the ping system, and they gave me feedback:
- Ella wanted the pings to be emitted from characters’ head’s instead of above them, so that it looked more like they were coming from the characters, so I made that change
- Bernie wondered why the synchronised pings weren’t appearing between characters, and I explained the trickiness of programming that to happen consistently
- I started feeling unhappy, and it got progressively worse
Afternoon:
- I spent a large amount of the afternoon feeling incredibly unhappy, completely incapable of doing anything productive at all, though I won’t elaborate on how bad it was
- Eventually, I briefly programmed a short subroutine to have NPCs generate ping particles when pinging, either alone or with Gloria
- I asked Ella whether to have the critical violinist constantly ping to draw the player’s attention, and she said that would be a good idea, so I ticked the box to allow for that
- We moved over to the other room to film our documentary interviews, and after setting up, I did my interview after Bernie and George
- I briefly helped Richard out with recording the interview for his documentary
- After replying to a couple of important emails, I spent some time tweaking the ping particle for the wind characters (which I’d added to the scene earlier), trying to make it ping only once and have the same properties as the other single pings
Evening:
- I headed home, and after having dinner and washing-up, I looked at the wind ping particle and decided that it was fine
- I copied the synchronised ping between wind and string from Gloria to the flautist
- After clarifying some information about putting the music in the game with Sam (determining that he’d send me the game’s WAV files while working on the Wwise implementation, so that I can implement them as a placeholder), I moved the gate between the wind and brass areas, as per George’s request, so that more of the transition to the brass area would be on the other side of the gate
- I imported George’s new version of the triangle area, and used the wind area as a reference to scale it before starting to place it
- I wasn’t sure where exactly George wanted me to place the triangle area, so I first removed one rock wall from brass town and positioned the one beside it to allow for the triangle area to slot in, then I tried placing the triangle area right at the exit from the brass area, then I decided to keep the triangle area out of view at first by putting the rock wall back and having the area to the left (as it was before), spending a fair while trying to get it right
- I rotated and repositioned the tower to fit onto the end of the triangle area and checked how the change affected the cameras that look towards it after synchronisations
- Part of the collider for the right barrier of the trail to the tower was overstepping into the triangle area, so I rotated and resized it to fit more nicely, and did the same for the left barrier’s collider to keep the player around the middle of the trail
- I moved the gate between the triangle area and the tower (and gave it materials from the wood of the triangle area), and moved the triggers for determining that the player is crossing into either the triangle area or the piano area
- After hiding some blank collider objects inside the tower (with George having given me the heads-up for it) and pushing the changes to GitKraken, I went to bed
Friday
Morning:
- After getting to the studio, I uploaded some development videos I had to a B-roll folder on OneDrive, so that I could send the videos to George
- I walked through the triangle area to test whether anything was broken, and saw that there were some iffy colliders and that the occlusion culling had to be updated
- I tagged the environmental objects as occluders and occludees appropriately, and started another occlusion culling bake (after accidentally murdering my RAM)
- I updated George on my progress and clarified details as to where to put Triangle Man and his interaction
- We tested Adam’s NodeNoggin by posting concerns for the coming week to a shared page
- We spoke about the crowdfunding campaign for our degree shows, and determined how much we’d each chip in
- I showed Ella the cameras for the tower, and she said that she’d prefer it if Gloria were more centred in the camera when ascending the tower, as well as that it’d make sense to have the player able to control the camera at the top
- Adam spoke to us about the music (how we should have had it sooner), said that I need to focus on getting Gloria’s animations sorted, and said that I should make a playable build (by fixing the triangle interaction)
Afternoon:
- I placed the Triangle Man in the new triangle area and set his values for the ping system, then we headed to town for lunch
- After we got back, I gave the trumpeter her solo and synchronised ping particles, tweaking the values to match the other particles (and switching out the prefabs for my adjusted versions)
- I went to my counselling appointment
- After my appointment, I imported Sid’s ping particles for synchronisation with Triangle man, and they had the wrong material attached to the symbols (spawning piano and string symbols instead of triangle and string), so Sid helped me to replace it with the intended material
- I imported and set the values for the ping particles associated with the triangle and piano languages, and Sid helped me to fix another issue, this time with the symbols for the triangle language
- I spent a long while setting the size and position of the triangle mechanic, so that it’d fit on the triangular window of Triangle Man’s house, and Richard, George, Bernie and Adam saw the mechanic before I adjusted the line thickness, saying it looked far better/sleeker when it was that thin
- I moved the camera for the triangle interaction, so that Gloria and the Triangle Man are in view
- I caught up with Ella to see how the art book was coming along, and then showed her the triangle mechanic as it was, and she liked it (not noticing a big difference)
- I tweaked the positioning of the trumpeter and the brass mechanic’s camera, so that Gloria and the trumpeter would be visible during the interaction
- Adam walked George and me through the process of syncing scene changes through GitKraken, so I continued tweaking camera positions, this time for the cameras looking at the tower
- We determined that George would add some scripts that he worked on for the camera, in a designated folder
- When George made a pull request on GitKraken, I pushed to the master repository, accepted the request and merged his request with the master, such that it updated my version of the project with George’s added files and folders, and only changed the aspects of the scene that he touched, showing that we can both work on the scene simultaneously as long as we don’t touch the same scene objects
Evening:
- After seeing how Ella was getting on with the art book, I headed home (and started feeling quite unhappy)
- After having dinner, I placed the camera for looking at the tower after the triangle interaction
- I added a ping particle to the top of the tower, gave it an enormous scale and made it last for longer than the other particles (with more pings and a longer lifespan), and made it so that it plays each time the camera looks at the tower
- I tested that the tower pinging was working throughout the game (as well as my new tower camera angles), and everything seemed to be in order, and I used the opportunity to check for rough spots and clean them up
- I imported George’s models (with animations attached), extracted their animations and added unlit materials to the one I added to the scene (and scaled) as best I could
- I created an animation controller and added the extracted animations as states, though it was initially squashing Gloria’s body when playing the running animation
- I realised that I’d only scaled one of the imported animation-carrying models, and scaling the second one and extracting the animation again solved the squashing issue
- I spent some time tweaking the transitions between the three states I made (being idle, running and playing the violin) and determining the parameters for transitioning between them
- I programmed the parameters to be set within Gloria’s movement code, based on her velocity variable and whether she’s plucking, bowing or interacting
- I made the speed of Gloria’s run animation depend on her movement speed, to make the animations feel more connected to her movements
- I had to change the properties of the animations to prevent them from needing to get through a full cycle before transitioning to the next, and had to prevent Gloria from moving while bowing or plucking her violin (since I knew that George’s playing animation was static)
- When I saw that Gloria was still doing a run cycle when running into a wall, I decided to take the velocity property of her character controller component as the source of her movement speed instead of her velocity variable, and it definitely improved things
- After pushing the changes to GitKraken, I headed to bed
Saturday
Morning:
- Since George sent me the animation for Gloria bowing her violin when I went to bed the night before, I started in the morning by importing it, though applying the animation to the version of Gloria with the properly separated violin made her bow nothing (as that violin is attached to her back instead of her hand)
- While I’d have just switched-out the violin models or positions, the violin model properly attached to Gloria’s hand was made of only one object, so I couldn’t give it a series of materials for its different parts
- Sam sent over WAV files for his music, split into parts (and with labels for the tempo and the number of bars), so I imported and organised the files
Afternoon:
- After going for my week’s shopping and having lunch, George sent over a version of Gloria’s model with the violin attached to her hand and properly split into parts, so I imported it and thought of how I could switch between the two violin positions
- I asked George to send me a version of the playing animation with one violin in Gloria’s hand and another on her back, so that I could show and hide them when necessary, and after he sent it to me I imported it and gave it all of the necessary materials
- While I was adding the materials, I saw that the bow was one object instead of being separated, so I asked George for another version
- I briefly added some code beneath the animation state changes to show and hide the right violin (to match the animation)
- George sent over the model, and I went through importing and adding materials to it again
- Having spent a fair while repeatedly adding materials to Gloria models, I tested that the game was working with the animations in place and everything seemed to be fine
- While I was thinking through how I’d implement the music, Tim sent me the tracks he’d created, so I downloaded and previewed them
- I saw that the files Tim sent me didn’t connect cleanly (since they didn’t start or end on the beat), so I asked whether he’d be able to cut them to fit cleanly together
Evening:
- After dinner, I clarified some details with Tim about how the interactions work to give him a better idea of how I needed the music files
- Tim sent over the edited WAV files, and they seemed to be in order when I checked them
- I spent some time thinking through how I’d program the music to be played properly, and I thought of how I could cue the music to fade out when looking at the tower or changing areas, as well as how it could be switched when changing areas
- After fighting through some mental clouds, I programmed a few subroutines in a new music management script to fade out, change and play background music when triggered to do so, playing intro audio clips before the loops when necessary
- After checking the properties of the audio source component, I remembered to set whether the clip should be looping in the code
- After fixing a small typo, I tested that the music was being triggered at the start, and it seemed to be working just fine
- I made it so that the background music is triggered to fade out and change when moving between areas, and after quickly testing that it was working, I remembered to reset the volume of the background music’s audio source to full when a new track is played
- After that change, it was working as intended for all areas
- I made it so that triggering interactions causes the background music to fade out, and after looking at the tower, the background music restarts
- After a few tweaks to NPC behaviour, I imported Tim’s music files
- I programmed a short subroutine that plays the Piano Man’s theme when a Boolean is true, and made it so that the Boolean is set to true just before the player is made to look at the tower
- After testing that it was working (it was), I switched the Boolean to be set to true when the player looks at the tower instead of beforehand, and I spent a while testing the timings and tweaking how long the player looks at the tower for
- I used the duration for which the player looks at the tower to determine how many ping particles are generated from it, and found out that you can cycle the same particles to emit at fixed intervals a certain number of times (which makes tweaking particle emissions less tedious)
- I spent a while programming all of the interaction music to be cued, by checking when each interaction’s respective counter has reached a point and whether a track’s already been played before playing it
- As per George’s request, I recorded my screen as I scrolled through zoomed-in code for B-roll for the documentary
- I called a Boolean to be reset from each interaction’s main script when the interaction loops, so that the music itself would also loop
- After importing and adding-in Tim’s music files, I tested that the interaction music was working, and everything seemed to be fine (though the interactions weren’t synched-up, of course)
- After believing that I pushed the changes to GitKraken (when, in actuality, I only committed the changes), I decided it was time for some unconsciousness
Sunday
Afternoon:
- After having lunch, I tweaked the speed and section lengths of the wind mechanic to make it fit the tempo and lengths of Sam’s music clips, and it was incredibly satisfying to see (and hear) it working
- I then spent time tweaking the speed and duration of the brass interaction, finding that the counter increase speed I need for the remaining interactions is their song’s BPM divided by 120
- Using what I’d learnt from the brass interaction, I adjusted the speed and duration of the triangle interaction to make it fit the music
- I proceeded to spend quite a while adjusting the timings of the piano interaction, as I wanted to get things just right, including having Gloria and the Piano Man begin to move upwards when the music tonally shifts towards positivity
- Over Discord, I asked Tim whether he could send me a version of the piano interaction’s looped music with the violin track removed, so that I could use it as the background music for the approach and ascent of the tower (an idea I had while working on the tower’s interaction)
- Tim sent the file versions that I asked for over, and I imported them into the project and implemented them as the background music of the tower
- I tested that everything was working as expected, and it was (aside from the wind interaction not letting the player synchronise, which has been an odd issue lately)
- I looked back over the code for checking whether the player has synchronised during the wave mechanic, and saw that the window for checking is so tiny that it’s no wonder that the synchronisation was inconsistent, so I replaced that check with one to see whether the end of the wave is within a window before the middle section is looped
- I tested that the check was working as intended, and it was, which was a relief
Evening:
- I programmed it so that the camera would be parented by a camera target on the tower’s roof after the piano interaction, so that it can transition into looking at all of the characters together
- After dinner, I adjusted the position and rotation of the camera target at the tower’s roof, so that it’d make for a nice shot of the characters at the end
- I then tweaked some camera-related values so that the game would open with a shot of Gloria from the front, which would slowly transition towards being behind her
- Once I tested the game and pushed the changes on GitKraken, I started working on the week’s blog post, which brings me to this moment in time
- While working on the blog post, I saw the documentary that George edited together from the team’s interviews and B-roll, as you can see below (and I think he did a good job)
It’s probably to be expected with a looming deadline, but it’s kind of crazy how much things have been coming together this week, and it’s been ridiculously satisfying to get things to the state they’re in now. Sam and Tim did a great job with the music, and having that and George’s animations for Gloria up and running has had a massive effect on the experience of playing the game. There are still numerous tasks left for me to do over this final week, and most likely beyond it, too. My primary focus for tomorrow would be to program the new patterns for the interactions, so that they match the music, and I also need to get the characters to appear together atop the tower at the end of the game. The inhabitants of the various areas also need to be incorporated, I still need to add the other characters’ lines to the piano interaction, animations need implementing, audio needs tweaking (not to mention the lack of sound effects), the game lacks any menus or options for colourblindness and difficulty, et cetera. I could probably continue to come up with tasks to do, and that’s not to mention the small bits of polish that are needed, the accommodation for it needing to be playable at the degree shows (necessitating an automatic restart), or the testing that’s going to be needed this week. While there’s definitely a lot left to be done, the finish line is in sight, and it feels so surreal that my student life is coming to a close. I’ll let you know how the week goes in my final weekly post, which will probably appear here at some point on Wednesday night or Thursday morning.