So for those unfamiliar to what a game jam is, it is an event where people of different artistic backgrounds from coding, visual art, story writing, audio, program management, game design, etc. come together to build a game revolving around a given theme within a scheduled amount of time. It is similar to a hackathon, but game-focused. One of the most well-known game jam is the "Global Game Jam" where countries all across the world spend 48 hours to build a game, from Friday early evening to Sunday late afternoon. Live streamed on Twitch to view the progress going on from France, Korea, Australia, Brazil, around many US States, and many more.
I have worked with Global Game Jam twice, but as a Composer and a Sound Designer. I just participated in a recent game jam, my third one, by Seattle Indies, a meetup for local game devs around Seattle. I'll say, music is my strong suit to my skill set to offer. However, it seemed that there were more composers that attended this game jam, so it was actually difficult for me to jump on a game project for music, so I decided to jump in as a sound designer and audio integrator. Audio integrator, I find many terms for this, Audio Implementer, Tech Sound Designer, Audio Engineering. All-in-all, they essentially do the same task for game development, program the audio assets into the game.
I have spent the last week learning Wwise, an audio middleware that makes it easier to design more control with sound assets for a game. And I had to pick up FMOD, another audio middleware like Wwise, a few days before the Seattle Indies Game Jam was coming up since I had problems installing certain Unity extension packages for Wwise in order to incorporate it into Unity projects. I've only worked with FMOD a bit back then, but only working on my original music to manipulate and control on FMOD, but not knowing the Unity side of connecting FMOD. So that was my short few days spent learning the Unity integration side of FMOD. I realized it was already rough learning the integration to FMOD, because most tutorials I found on it would only focus more on just FMOD alone, or a little bit of FMOD & Unity because FMOD is geared towards composers and sound designers, tutorials focus less on coding and more on audio manipulation, which I understand because those were helpful of my music part of me, but the coding part of me wanted to learn the nitty gritty work of connecting those sounds into the game. Working with the FMOD API and watching tutorials are always working with outdated versions, especially with the Unity update versions, so always seeing myself trying to follow along the code and finding out it poses errors that give no helpful error messages. So debugging FMOD errors is always a pain in the sense that there is not enough answers. I was basically learning Unity at the same time learning the integrating side of FMOD in such a limited amount of time before the jam.
Arriving to game jam, preparing for an intense 2 1/2 days of cramming to build a game, starting from Friday 5pm to Sunday 5pm. Ready......GO!!!
Quick side note if unfamiliar of the process for game jams:
Before starting, first there is a mingle and meet, getting to know what skill backgrounds people are coming from. Then we are given a prep talk, discussing past game jammers experiences and stories, the judges, the prizes, and the THEME.
The theme was "Intentionally Broken." Build a game in inspiration based on this theme.
OSHA Coaster lets you live out your dreams of inflicting inflicting as much pain and suffering to allow you cash in on that sweet medical bill money. Find a way to balance the rising costs of an ever-expanding theme park against the need to out compete your competitors in the industry of thrills and joys.
Sound design was not too bad since I've done it before, experimenting with sounds to get that right punch to that sound. It's a tiring process for my ears listening to the same 1 sec or 2 of SFX because of constantly playing back and editing.
If you reached to this part of the blog, I want to thank you for taking the time to reading this so far. So to start, we started up a github repo as the Unity project was starting up too. We mainly stuck with the master branch as I asked one of the experienced game programmers of why we don't use other branches, coming from a web development experience of utilizing multiple branches, but it's because of many of us having to send different types of assets, we need to see immediate feedback towards the unity project straight rather than having to send assets to multiple branches. Plus with the unity project, we were having multiple game scenes being built, which would be like the multiple projects, but it's like prototype after prototype to integrate updated assets every commit coming in.
Entering FMOD project instantiated! So I installed the Unity FMOD integration package in order to attach my FMOD project into this Unity project. Little did we know, all hell was gonna break loose soon. It started off fine, I was able to attach music to the FMOD Listener along with a SFX playing with player interaction on click events placing objects. It's all good, all good. Then...taking it on the next level of trying to control parameters in FMOD to Unity FMOD Event Emit Listener, and adding another SFX for another type of player interaction using another FMOD Event Emit Listener became a problematic start. I wanted to be able to debug log incoming FMOD events in a C# script to see what information I was getting back from those calls, but the debug messages were not helpful, then I found out FMOD had their own debugging log, but it was difficult to utilize.
Then came the Git flow control. Committing my changes with FMOD and pushing them up. Ok, just a bunch of warnings but no errors, the game can still run. Other pushes occur from the other team members. I pull down.
Everything is broken. Where is the game scene? Where are all the game objects in the hierarchy?! Why isn't anything running?? Merge-conflict?!!? Merge conflict on certain assets?? Edit them on a text editor?!?! But....it's on Unity, and these types of files are not text files? How can I resolve these merge conflicts? "FMOD Editor Log" merge conflict?!? "FMOD meta files?!" What is going on?!?!?! Umm help!! I'm sorry!!!! I'm sorry for breaking things!!!!
This was everything that was happening to me on my side with Unity. The FMOD meta files, cache, and editor log would constantly be changing with every time the game would run, which caused so much merge conflicts when I updated assets into FMOD and pushed. So the other team members had to adjust the gitignore file to handle some problems with FMOD:
.gitignore /Assets/FMODStudioCache.asset /Assets/FMODStudioCache.asset.meta fmod.log fmod_editor.log
Maybe it was the location of where I saved the FMOD project? And whenever I linked the FMOD to Unity, I think it was linking from my local machine folder and not the folder within the Unity project where the git repo was living, so this caused with breaking the connection and mixing up between my FMOD local files, to the FMOD in the Unity project directory. I thought I had to make it separate because of FMOD's project files probably clashing with Unity's directory. That was not too bad to resolve since I just had to work with the FMOD project I saved in the Unity project directory since that's where the connection is.
So I thought keeping the FMOD Project Folder separate from Unity Project Folder is how it works, but when working with a team and a git repo, adding the FMOD Project Folder within the Unity Project Directory is to do it. It sounds like such an obvious beginner mistake but I made that mistake so I'll have to accept that.
However, even with the FMOD Project folder within an Assets folder in Unity, there were still merge conflicts happening to the "fmod_editor.log" file even though it was in the .gitignore, which we were getting annoyed on why that kept showing up all the time.
Some git commands I didn't know about that I learned:
git checkout --theirs FILENAME
git checkout --ours FILENAME
git checkout :/
--theirs FILENAME = taking their changes over yours
--ours FILENAME = taking my changes
These are quick auto-resolves when handling merge conflicts. I can't remember if it worked for some of the issues or not but it was something we tried.
git checkout :/ was an interesting one, where I believe it was to ignore the conflicted commits that you wanted to push, that way you were only pushing the ones that were added and not ticked for conflict.
With all this mess in hands after facing the last few tries of working with FMOD, I decided to do something I didn't want to but knew I had to quickly adjust just so we can get the audio assets implemented into the game.
So, we decided to delete the FMOD files, disconnect the FMOD components connected to the game objects, to switch to just working with the AudioSource components, which was fine even though it was basic and I wanted to customize and control the sound much more through FMOD, but had to adapt quickly and make do learning parts of the AudioSource API. I switched gears, trying to attach audios to new game objects, to prefabs, coding a script for switching music (with help from one of the game programmers). And let's update:
git add .
git commit -m "here are some sweet audio stuff in now"
'git push failed to push some refs'
MERGE CONFLICT! MERGE CONFLICT!!
WHAT IS GOING ON?!?!?!
FMOD??!!?! I Thought we killed you??!?!?!
Apparently the FMOD cache and meta files would still continue living on even not in use. Looking up some other forums of people trying to get rid of the FMOD package after installing it into their project. It was more of a hassle getting rid of than just ignoring it altogether. So we had to literally purge FMOD files, ignoring more meta and just burying it until it does not come back the light of day. And then we reached to the end with minor repercussions. I was causing less conflicts with not using FMOD and just small problems here and there. But we pull through, in 2 days, we built a game.
If you have reached here, thanks for listening to my rant about unity audio integration with FMOD. To what it's worth, I don't hate FMOD, I still like it as an audio middleware. I can see the potential of its use, same with Wwise, but hearing from experienced game programmers stories about game jams and audio middleware, and it is still one of the most challenging experiences for them that most usually don't succeed in implementing it.
But this just makes me think, there is not enough tutorials in learning the middle ground side of working with FMOD in Unity, like fully. As I see it, mostly composers and sound designers solely focus on the FMOD/Wwise/audio middleware software while the game programmers focus on Unity, or Unreal Engine, seeing that the job would be for the game programmers to be in charge of integrating the audio using the audio middleware packages. The main thing the game programmer and composer/sound designers that would be collaborating about is the parameter control, game objects, cues, triggers, variables to be able to connect and talk to each other from both softwares.
I wanted to challenge myself to be able to be that bridge since I was familiar with audio middleware (from short time crunch cramming) and familiar a bit with Unity (with small crunch time learning as well). Especially when I hear from game programmers with game projects, and personally I don't like hearing this, "music and sound is not a priority in a game." Music & sound is just as an important asset to the rest of the team. It is part of the team as it is the front-end that people will hear when playing a game. Sure you can play a game on mute, but when sound effects play a big role into a game, like interactive cues or music cues, then it is just as essential as the art, story, and coding.
//Rant Note Done
So we built the game! There is a 2 week jam period starting now where we can polish this game and will be showcasing at Seattle's Pacific Science Center.
I want to personally thank the game programmers on my team for being understandable and patient with my mess ups that occurred throughout this journey.
My goal: I really want to implement FMOD back in because I've been wanting to work with audio middleware with games.
You can try it out here at itch.io