The IntroKilling Floor 2 has a very nice and fitting musical selection. But not everyone is a fan of metal or wants to listen to the same old stuff day in day out. The "current" way to modify KF2's playlist is far from ideal, leaving you with cut off tracks or odd stretches of silence.
After a good amount of time, some tinkering and with the help of some talented people I've finally discovered a way to properly create my own custom playlist.
The end result of this tutorial is a fully functional playlist, with no cut-off tracks, silence and working zed time behaviour. It'll feel as if Tripwire themselves blessed you with this fine selection of tunes.
Stage 1 - PreparationYou'll need a few tools to accomplish this mission:
- Audio editing/converter software of your choosing (e.g. Audacity)
- A text editor of your choosing (e.g. Notepad++)
Create a folder for the songs that you wish to put in your playlist. KF2 features around 50 Tracks for Waves and 14 for trader time.
Wwise only likes .WAV files, so convert them to .WAV if necessary.
I will assume you know how to convert a file.
Stage 2 - Building the FoundationNow put those music files aside, it is time to recreate the soundbank.
First of all we need to know how that bank is supposed to look like and function. So open your KF2 directory and click your way to the WWiseAudio Folder.
Default file-path: SteamLibrary\steamapps\common\killingfloor2\KFGame\BrewedPC\WwiseAudio\Windows
You're going to find a huge stack of .wem files and also some .bnk and .txt files. We don't care about the .wem files so scroll down till you hit the .bnk .txt combos.
KF2's music is split into 2 (technically 3) parts: Action, Ambient (and Menu).
In this tutorial we're going to replace the Ambient portion of KF2 with our own mix. The reason for choosing the Ambient playlist is rather simple: Few amount of tracks > less work to create > less potential errors > a [hopefully] better learning experience.
If you want to work on the Action Music, head down to Stage 5 for a few details to keep in mind while working on that.
The file we need to check out is: WwiseDefaultBank_WW_MAMB_Default.txt
It contains a table with all relevant information related to that soundbank. For example which songs it contains and which events it is responding to.
Now would be a good time to start Wwise.
Create a new Project, give it a suitable name for example "KF2_Ambient_Tutorial" and press OK.
In the Menu bar click on Project > Project Settings (or Shift + K) . Navigate to the Source Settings tab and click on the [...]-Button next to Default Conversion Settings.
Expand the tree to Factory Conversion Settings > Vorbis > Vorbis Quality High. Confirm your changes and move your mouse back to the Project Editor, Audio Tab.
Our objective now is to recreate the content of the soundbank.
Let's start by setting up the audio container for our tracks.
In the Project Explorer right-click on Default Work Unit under Interactive Music Hierarchy and hover over "New Child" and create a new Music Segment.
If we look at the first play event in the text file it'll say: Play_MAMB_Z_AssemblyLab, so we're going to name this Music Segment MAMB_Z_AssemblyLab.
Repeat this for every Play-Event mentioned in the text file.
If you're done it should look like this:
Now click the Events Tab in the Project Explorer, we are now going to recreate the play and stop events found in the text-file in the same manner we created the Music Segments.
Right-click on the Default Work Unit in the Events folder, select New Child > Play. This will, you guessed it, create a Play-Event.
Name this one Play_MAMB_Z_AssemblyLab and confirm with Enter. Select your newly created event and more detailed information will show up on the right in the Event Editor. Notice the Event ID in the top right corner? Check if your Play-Event has the same ID as stated in the text-file. If the numbers are not the same, you have a typo somewhere. This needs to be accurate otherwise the game will have trouble calling the event.
Now, if you look at the Event Actions you will notice that the first action is to play a [Missing] object. Right-click [Missing], select "Browse..." and select the correct Music Segment from the list. Now the Event knows which track to play and we're almost done with this event. In the Event Editor at the bottom we have the Action Properties where we're going to set a little fade-in for our event so the track doesn't just BURST into action. This is a bit of personal preference but lets go for a 1 second fade-in, adjust the curve if you like.
Recreate the rest of the play and stop events in the same manner.
Creating Stop-Events is the same as Play events, make sure to select Stop and not Stop All or Stop All Except. Also don't forget to set a little fade-out so we get a nice cross-fade between tracks.
The last thing missing: the correct Audio Bus
KF2 plays different type of sounds and music on a different Bus (think of it as a conveyor belt or tube) and also uses them to apply effects to them. For example slowing them down while Zed Time is active.
While this is not that important for the ambient tracks, knowing about it will help you when you're going to replace action tracks or sound effects.
Now how do we know how Tripwire set up their Bus?
In the Wwise-Folder of KF2 you'll find a Init.txt file, which contains a list of Game Parameters, States an their Bus setup.
Scroll down till you find a block labelled Audio Bus.
We are working with ambient tracks, so lets look for MUS AMB.
Back in Wwise head back to the Audio tab.
We have to recreate this: \Default Work Unit\Master Audio Bus\MUS\MUS AMB
Right-Click on the Master Audio Bus, select "New Child" > Audio Bus and name it MUS. Then create a new child for MUS and name it MUS AMB.
All that is left is to set the MUS AMB Bus for all our Music Segments. So select a Segment and look for Output Bus in the Property Window hit the [...]-Button and select the Bus.
After doing that for all your Segments you're done with your foundation!
It's almost time for the fun part.
Stage 3 - Importing your Mix-tapeBefore we import our files it is important to check again if our conversion settings are set to Vorbis high.
Look in the Property Editor in the Source Settings Tab for a Music Segment to see which conversion settings are selected. If it is Vorbis High, you're good to go. If it is Default Conversion Settings you have to change that.
Right-Click on Default Work Unit under Interactive Music Hierarchy and select "Import Audio Files..."
Click on Add Files... and select your .Wav files.
Click Import and Wwise will nest them in your Music Hierarchy in separate Music Segments containing 1 Track each. This just bloats our nice structure! So expand those segments, grab the audio file within and drag them over to one of our previously created Music Segments. And while we're at it, let us change the audio to be streamed instead of being stored in memory. There is no need to bloat the games memory usage with a ton of track which may get never picked to play. To accomplish that select the audio file and set a hook for Stream, top right corner in the General Settings Tab.
We can delete those empty segments afterwards to clean up our layout.
If everything is done it should look like this:
You can use the Play-Button at the bottom to listen to your work, be warned though it could be pretty loud.
Stage 4 - Volume Adjustments & Bank buildingIt is time to even out the volume between tracks and in general.
Select a Music Segment and open the Source Settings Tab in the Property Editor. At the bottom you'll find the Make-Up Gain value. Let the Track play till it reaches its general 'loudness' and have an eye on the peak meter to the right. The general loudness of music in the game is at around -6. So adjust the gain as needed to reach that value and repeat that for each track.
Switch over to the Advanced Settings Tab and crank up the Playback Priority to 100. Wwise will only play a certain amount of sounds at a time, so everything with a low priority usually gets silenced and nothing is worse than a horde of zeds with no music, right?
If everything is in place and works, it time to bundle our mess into a file structure KF2 can handle.
In the Project Explorer head over to the Soundbanks Tab. Create a new Soundbank via Right-Click > New Child > Soundbank.
You could name it something like Ambient to make sure you know which is which. Or if you trust your file managing skills a little more name it WwiseDefaultBank_WW_MAMB_Default (Saves you renaming files later and a lot of time by having to recompile your banks over and over, because you find issues that need fixing.) and press F7. This will open up the Soundbank Manager. Select your newly created Soundbank in the Manager window, head over to the Audio Tab in Project Explorer, select everything under Interactive Music Hierarchy and drag it over into the Hierarchy Inclusion in the Soundbank Editor Window.
Now all that is left is to build that bank.
Make sure Windows as a platform is selected on the tab further right. Right-Click your Bank in the Soundbank Manager Window and click on Generate Soundbank for current platform.
The process may take a while, specially the first time if you haven't converted your audio files to Vorbis High (you can do that at any time by selecting Project in the Menu bar and clicking 'Convert all Audio Files...').
When the process is done, right-click your bank again and select Open Containing Folder (Bankname.bnk) to see the results of your hard work. Open up the bankname.txt and the original to compare your number of events and IDs.
Before you copy over the files to the KF2 directory, make a backup of the original .bnk and .txt file you're going to replace.
- the .wem files
Considering the numbering of .wem files it may happen that your bank will generate a number already taken from the original banks by Tripwire (hasn't happened to me yet, but it is a possibility!). Better double check what you're overwriting, it could lead to comical results or certain sounds simply just stop playing.
Stage 5 - Play testing and BeyondThe moment of truth is near! Time to boot up KF2 and play a nice solo game.
Since we've picked the Ambient Music Bank for this test, we'll be able to hear our tracks already in the waiting lobby.
Also a good time to enable cheats and use "NextTrack" to skip to test all tracks functionality in a timely manner.
If you hear silence, certain songs refuse to play or the volume is way to loud/quite compared to the rest of the audio, head back to Wwise and track down your cause.
This is the frustrating part, since it can be something as simple as a typo or missed check-box which often may not be that obvious.
But let us assume everything went well, you may have to go back and adjust the volume a little - but it werks!
What if you want to replace the Action Portion of the soundtrack?
The process is basically the same, with a few things added.
- There exist instrumental and vocal versions of many tracks. Both have their own play-event, but they share a stop-event. Use that [>>]-Button in the Event Editor for additional event parameters.
- You want the Audio Bus to use Auto-Ducking (for those volume adjustments during zed time and FP/SC roars) unless you don't want that, but let us assume you do.
Select the MUS bus, click Insert... under Auto-Ducking and choose the MUS ACT Bus.
Stage 6 - I like my bugs squishedIs this process perfect?
Is it almost perfect?
What will happen is that sometimes a track refuses to play (even though it works). Happens when a lot of events start, like the start of a wave for example. Wish I could say for sure what is causing that, might be the bank setup itself not being perfect or my computer having trouble loading everything in time. If you find out what it is though, let me know.