Level Designer and Software Developer
This week consisted of brainstorming a creating our game pitch. We all came to the table with different ideas and worked together to pick two good ones. Once that was over we set up the presentation for this. I worked on the slides for our stealth game idea. The concept art for these slides was AI generated, here are some examples of what we got.
The top one went into our sell presentation and the bottom one did not. The difficulty with using AI for concept art that I ended up finding is that getting the model to give images that evoked any idea of the gameplay concepts we had put together was impossible. It could at best be used to get images of a guy stealing things, which did work with our game, but failed to deliver a lot of meaning to onlookers other than reinforcing this heist idea for the game's objectives and themes.
This was a week of concept solidification and write ups. I mainly worked this week on both the one and five pagers. I set up the skeleton of the one pager and filled in the gameplay and level design sections. For the five pager I wrote up an expanded section for level design in addition to the overview of the progression of the day which is analogous to seeing how our vertical slice would progress.
This week I worked on both the sell presentation and the first draft of our game design document. The preset listed is from all the way back in 2004! This meant that there were a lot of sections that make a bit less sense now then they did back then. There are a lot of question about the engine we'd be using for rendering, lighting, physics, ect. Today Unity is free bundles all of these into one. While it's good to still list these, they certainly aren't worth their own section. Another thing that got cut down was all the talk about the world of our game. Because we've limited our game to one restaurant and the player doesn't have freedom to move around it this section was also chopped down. What was left after that are, I think, good bones for our GDD. I'll be working on expanding this as we progress with our game.
The core of this week was finding a solid moment to moment gameplay model as a team and stick to it. After a big brainstorming session we settled on a line that moves down the screen over a series of dots and the player must hit the spacebar when the dot is under the line. I then solidified this idea into our GDD into a more specific and refined gameplay section. I also worked on the scrum presentation for this week.
This week I worked on meeting with the team to brainstorm and get the gameplay down for our GDD. We outlined all of the stations and I took those outlines. In addition the existing gameplay sections needed to be reworked since we have new gameplay! So now the player uses moving the mouse against a line in order to hit the beats. The name of our game has changed to be completely different from waffle house. We are now BEAT Flavor: Breakfast Boogie. This meant some other changes had to be made to put the GDD in line with this change.
This week I got a very simple, but easy to build on parameter screen going! It pauses all gameplay when in use. It can only affect the sensitivity and overall volume right now, but we can get some other features onto there with little problem. Short update, but that's because it was a decently simple addition.
This week I started on some improvements to the score system. This should have been very simple, but it actually meant I had to go into some of our existing code and try to work on it. To start, we wanted to have the player's streak, the number of notes they hit in succession, to affect the score value of notes hit. This week I got stuck on implementing the streak itself. See our hit detection only counted misses at the end of a plate/measure. This meant that I had to try to modify it to instead count misses as they occurred. This script doesn't use collision but instead bounds and position, so I had to dive into that logic and see what needed to be done. The good news is that streaks work now! The bad news is that they work now, sometimes. There is weird behavior when plates swap, but it should be solvable next week.
I was a little too optimistic last week about the scoring system. It works now completely for like the first four plates... then it goes back to the old problems I was experiencing with it. This whole debacle and the time it's taken have gotten us as a team to start discussing if the way we have hit detection set up is something we want to expand to other stations and the answer is no. We will be moving over to a collision based hit detection system. Some of my work on the score system can be implemented once that script has been made In better news I made a new prefab for plates and an accompanying script which allows for different plate art to be randomly displayed each time the prefab is spawned in. This will add some visual variety to the game.
This week was a lot of us trying to really get the visuals of the game together. To help with this I animated and implemented a waffle maker for our griddle station. I hadn't used Unity's 3D animation system before, but honestly it wasn't too hard especially with some advice from Will. I also fixed some issues that came along with all of the updates since I was just about the last person to work on the main scene. Stuff like our particle effect and sponge disappearing.
This week was a lot of getting our new team members up to speed with our plans and making some decisions about how to move forward. First things first we've migrated from gitlab to github and gotten the whole team set up with this. Second, we've chosen to focus a lot on the management part and have met up to draft our plans for this so we can implement all of this quickly.
I've started up development work this term by working on the game manager. We're hoping that the game manager can handle things like spawning in customers and moving them around. I set up a basic command string parser which is called by update when there are commands waiting and the function isn't already running. The commands are sent to the script into an array of strings and to prevent issues while the commands are being executed there is a buffer array which accepts commands while others are being executed. I've also got it spawning a test prefab on a command and altering its location on another. While very simplistic now it can be expanded when we have things like the actual customer prefab and we decide how they will move around exactly.
This week I did a bit of cleanup for the code of the game manager and got started on an input manager. It can be used to get more information from user input so that if stations need this information it doesn't have to be written like five times across the game. Right now it is pretty simple. It only works with the mouse movement stuff, but it can store a mouse value and get how far the current one is from that.
Lots of good progress on the input manager this week. We wanted to be able to see just how off beat someone was. This could be used to specify just how much error we allow for an action to still be a success in addition to being able to grade successes on how close they are. We do this using Unity's FixedUpdate function and a few conversions. FixedUpdate runs every 0.02 seconds, its intended use is for physics functions, but since we know the rate that this function runs at it can be used for timing. Given the beats per minute of a song the input manager can through a series of conversions get the fixedupdates per beat. We can then run a fixed update which can be used to keep track of how close the current time is to the next beat. The current implementation gets a beat fraction value showing how close the next beat is.
This week I worked on getting the plates used by dish manager to automatically generate the smudges. Right now that means making every plate have four smudges in the same vertical position with variable horizontal position. The goal is for this to not be based on world positions but to get values from our plate game object and uses those to find the vertical positions. I got a bit of work done on this front, but git issues and needing to reformat some stuff to work with the station refactoring done this week have pushed actual completion to next week.
This week I fixed up the smudge generation. There were a few bugs with what object I was selecting to get the basic dimensions and position of the plate that caused some issues. Some minor code errors also were fixed up. This generation works, although an offset between the top and bottom smudge from the top/bottom of the plate would probably lead to better looking plates and ones which were more fun to play. In addition it looks and feels ever so slightly off beat, so that will also need a look next week.
This week I set up new controls for the waffle-maker part of the pancake station. Originally it was a two button setup where one button opened up the waffle maker, and the other closed it. The new plan is for turning both ways and opening closing the waffle maker to all be different buttons. This meant that I tore apart the existing animator for the wafflemaker removing all transitions. It seems that this broke some of the animations and I was able to fix all but one, which I'll work on next week. The script that controls the waffle maker has been updated to allow this control scheme.
This week I got the animation issue with the waffle iron fixed by making a new animation to replace it. I also got the waffle iron synced up with the music for the game through our composer class. Expanding the waffle maker from here on out should be easy and the new control scheme is fully functional.
This week I worked on getting all of our combo voice lines into the game. Since all of our sound is handled with FMOD I needed to get that set up on my laptop. Then I made all of the voice lines into FMOD events using FMOD Studio and put them in the bank with the rest of our sounds. I fed them into the composer class so they could be playable on command in our unity project. I then made a score and streak manager which runs the logic for checking if it should play a streak voice line into the scoring. People now will need to push all scoring through the function in that script, but that actually helps make changes to scoring easier rather than harder in the future.
I implemented the work on combo streaks into the dish station and tested everything. So it works mostly as intended and will just need a little polishing up for the next part. Looking through the stations the new scoring function I wrote has been put into them in a rudimentary way, I'm leaving it to people with more experience working on each station to implement as they will and am prepared to clean up if anything doesn't work the way they would want. Outside of that I've begun work on our final GDD, I haven't touched it since last quarter so it's been fun to see how much it has changed.
GDD additions have been completed and I did some work on the presentation. New sections have been added to cover our management gameplay in more depth, cover the shop, songs, difficulty and other things that add replayability to our game, and a section covering our response to player actions.