Editing audio in AEW: Fight Forever is a rather lengthy process, due to the developers' use of Criware audio banks, and the maturity of the toolset available. We can currently only replace audio by compressing or extending the replacement audio to be byte-length-identical within the audio bank, leading to some distortion with replaced sound files.
That said, the actual process of finding and replacing sounds in the game is not particularly difficult. A large portion of the work has already been performed for us by Peek, in the toolkit we'll be using in this tutorial, which stitches together Sonic Audio Tools, VGStream, and his own UEcastoc.
winget install python3
winget install audacity.audacity
winget install ffmpeg
First, install Python 3 if you haven't yet, links in Required Tools. When installed properly, you will be able to right-click on any .py file and choose Open With > Python, or manually run .py files from the command line.
Next, extract the following files in FModel (if you haven't set up FModel, do so now):
AEWFightForever/Content/GameData/Resources/CriWareData/music.awb
AEWFightForever/Content/GameData/Resources/CriWareData/ra.awb
AEWFightForever/Content/GameData/Assets/Audio/Music/music.uasset
AEWFightForever/Content/GameData/Assets/Audio/Voice/Generic_Roster/generic_roster.uasset
AEWFightForever/Content/GameData/Assets/Audio/RingAnnounce/ra.uasset
AEWFightForever/Content/GameData/Assets/Audio/Voice/Referee_Vo/referee.uasset
Find each of these files either by browsing to them or using the Search View (Packages menu > Search, or Ctrl-Shift-F), right-click and Export Raw Data (.uasset). The audio banks will actually come out as .awb files. The uassets contain information about where in the audio banks each sound starts and ends.
Download and unzip UE4 Criware Audio Modder somewhere with at least 10 gigs free space -- you will end up with multiple audio banks worth of data being unpacked at the same time during this process, although it will clean up after itself.
Open top_config.json
in Notepad (or your text editor of choice). You will have to find the path to FModel's export directory and edit this file to match. Assuming you are using Windows, note that the path will require double backslashes due to how Python interprets backslashes in a string.
As example:
"original_game_asset_root": "D:\\Projects\\modding\\Tools\\FModel\\Output\\Exports",
The tool comes pre-equipped with a set of test audio mods listed here within the audio_mods block:
"audio_mods": [
"ring_announce_test",
"referee_uno_dos_tres",
"anna_grunts",
"halo_intro_over_dynamite_intro"
],
The test "anna_grunts" mod packaged with this tool is unfortunately broken -- it attempts to replace Anna Jay's grunts with Reiko's from Rumble Roses, but the files it has included are too large to fit into the byte lengths available. For now, disable that mod by simply deleting the whole line.
This is suitable for a test, so let's immediately try running the main file. You may do so by right-clicking on ue4_criware_audio_modder.py and selecting Open With > Python. If everything was configured correctly, the tool will extract the banks, insert new audio, and then repack it into mod files in the packed
folder.
These can now be copied into your ~mods
folder if you'd like to test them.
However if there are any issues, you will see the console open and then close very quickly. The preferred way to run Python is through the command line interface. To do so, open a Command Prompt, and navigate to the folder with the tool:
Microsoft Windows [Version 10.0.22631.3593]
(c) Microsoft Corporation. All rights reserved.
C:\Users\myusername> d:
D:\> cd Projects\modding\ue4_criware_audio_modder\
D:\Projects\modding\ue4_criware_audio_modder>
In case simply running "python3" from a command prompt does not work, you can follow this troubleshooting guide to edit your PATH variable, or you can find the path to the Python executable, which usually installs in your local applications, for instance: C:\Users\myusername\AppData\Local\Programs\Python\Python312\python.exe
On the command prompt, you may paste this entire path to ensure you're invoking the Python command line correctly, before passing the argument of the binary:
"C:\Users\myusername\AppData\Local\Programs\Python\Python312\python.exe" ue4_criware_audio_modder.py
This will run the Python script within the command prompt, so any errors that occur will be visible, and won't simply disappear before you have the chance to see what happened.
Among the various errors you might see here, the most common is that you neglected to extract one of the necessary files in FModel, for instance:
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\Projects\\modding\\Tools\\FModel\\Output\\Exports\\AEWFightForever\\Content\\GameData\\Assets\\Audio\\Voice\\Referee_Vo\\referee.uasset'
In this case, assuming your FModel export folder is correctly configured in top_config.json
, simply find the referred file and extract it.
You might also encounter issues trying to pack a wav file into too small an available track, although to find the actual error, you may have to scroll up through the window:
Encoded HCA size with quality Lowest. Size = 5196
Can't compress HCA enough! Use a smaller WAV and try again.
Modified HCA size: 5196
Modified HCA file not valid! Must be lower in size than the Original HCA.
In this case, the wav file you're using is far too large, and even attempts to compress to the lowest quality failed due to the size. Clip your source wav to a shorter length or otherwise modify it so the file on disk is smaller by reducing bitrate before trying again.
If the tool errors without trying to extract anything, with the following error:
SyntaxWarning: invalid escape sequence '\*'
filelist.write('\"' + all_banks_config_dict[awb_file]["output_mod_folder_name"] + '\*.*\" \"..\..\..\*.*\" ')
<a lot of debug information>
json.decoder.JSONDecodeError: Invalid \escape: line 2 column 34 (char 35)
This indicates that the path to FModel's export directory is formatted incorrectly; specifically, all backslashes MUST be doubled, due to how Python interprets a single backslash as an indicator of an escape sequence. For example: D:\\Projects\\modding\\Tools\\FModel\\Output\\Exports
Let's say you'd like to replace a few tracks in the game, and you already have a few mp3s chosen.
ChristianCage.mp3
MariahMay.mp3
TheRighteous.mp3
You'd like to replace two of the 8-Bit themes so you can make Create-A-Wrestlers for The Righteous and Mariah May, and you'd like to replace the theme for Christian Cage altogether.
The audio modding tool only understands .wav files, so you may use Audacity or FFMpeg to open them and save as wav. The preferred quality is 48000mHz, Signed 16 bit PCM stereo. For example, with ffmpeg via command prompt:
for %a in (*.mp3) do ffmpeg -i "%a" -ar 48000 "%~na.wav"
This one-liner loops through all mp3 files in the current folder and unpacks them all to .wav, setting the bitrate to 48000. Your folder should now contain:
ChristianCage.wav
MariahMay.wav
TheRighteous.wav
Test them to make sure they still work after the conversion.
Create a folder in the audio_mods
folder for your mod; let's use ExampleMod
for now, and place the wav files in this folder:
You also need to create a file here, called config.json
, using Notepad or your text editor of choice. Its contents will be:
{
"music": {
"00106_streaming.hca": "ChristianCage.wav",
"00055_streaming.hca": "MariahMay.wav",
"00056_streaming.hca": "TheRighteous.wav",
}
}
The label name on the left side of each colon indicates what track you intend to tell the tool to overwrite in the game bank. You can figure out what .hca files correlate with what in-game track names using Foobar2000, or see the audio track list for version 1.10. It is also important to note whether or not a particular track is allowed to be used for entrances, to be picked in jukebox, or is otherwise character-locked, before choosing what to replace.
In our example, we have chosen to replace Christian Cage's theme directly, as well as placed Mariah May's theme in "8-Bit Arrival", and The Righteous' in "8-Bit Bad Boy".
Now, we enable this mod by going back to top_config.json
and editing it into audio_mods, for example:
"audio_mods": [
"anothermod",
"ExampleMod"
],
Remember: if you have multiple mods, each mod should have a comma after the end, except for the last one in the list! If you have only the one, no comma at the end.
Now, as in the setup tutorial, attempt to run ue4_criware_audio_modder.py
either by right-clicking it and choosing Open With > Python, or preferably, run it from the command line directly so you see any errors that might occur in the output.
If all goes well, the tool will complete its task, and create a fresh music bank in the packed
folder called z_music_P.pak
. You can simply move this to your ~mods
folder now, and test the tracks and see how they sound in-game!
The simplest way to distribute your audio mod is to package up the .pak file, but this file contains the entirety of the game's music, and in the (now unlikely) event of a future update, will not work with other versions of the game.
Since it is preferred that anyone distributing their mods package up the folder they created in audio_mods
instead, so the audio modder can attempt to load multiple mods at the same time into the game bank, simply zipping your folder and uploading it someplace is probably sufficient, especially if you're only uploading a few tracks.
It's important to know, however, that wavs are very large and don't zip especially well. In fact, that problem is why the mp3 format was created. For larger scale replacement mods, you may wish to pack the files back into mp3 format first before distributing, so end users don't have to download as much. However, this increases the complexity of their setup -- they would, just like you did, set up the audio modding utility and use some tool to unpack the mp3s.
While Youtube is a great resource for trons and music, many of them have baked-in Arena Effects (usually denoted by "AE" in the video title), to work better with 2K games. AEW: Fight Forever mixes the intro music with crowd noises by default, so the ones with baked in arena effects are much quieter and more distorted once ported into the game.
Because our current Criware tools require that the new file be byte-identical once inserted into the audio bank, try to keep the audio you're inserting to roughly the same time length as the track you're overwriting. The closer the better. The HCA injector will try to compress the file with potential loss of quality, and the larger a file you're trying to stuff into the shorter file length, the worse the audio result will be.
The injector also appears to reduce the volume on injected audio by a fair bit. Try to make the source file as loud as you can manage, without maxing out the audio's dynamic range. Audacity provides a few effects tools for this, like Amplify, and Loudness Normalization (which I regularly use with setting perceived loudness -10 LUFS
, to make louder without extreme clipping). Experiment with the audio to try to get the source as loud and clear as possible before injecting, but no matter what, expect some loss of quality.