Fully Renaming a Wwisebank for re‐use in dialogue modding [LE2 LE3] - ME3Tweaks/LegendaryExplorer GitHub Wiki

Introduction

This is a guide to fully renaming an existing audio bank so that it can be re-used (mostly) safely. This is applicable to LE2 and LE3.

Please see this guide for information on authoring brand new audio banks in Wwise. This is the preferred solution where possible. However, we do not currently have access to all audio buses or real time parameter controls (such as dynamically adding helmet filters) and cannot add these to newly created banks in Wwise. This tutorial outlines a method to reuse banks containing these effects.

Please be aware that while this method is more reliable than simply using a bank from a different part of the game and hoping for the best, it is a brute force solution which will hopefully become outdated as the toolset continues to develop.

Required:

Clean and rename a conversation in the Package Editor

First we will prepare our "donor conversation" for use. This is not a detailed tutorial on adding new dialogue or on basic operations with LEX - please see this tutorial for more detailed discussion of adding lines to conversations via a "donor conversation".

This process will result in a lot of trashed exports and so it is best to create a temporary package file to clean and prepare the conversation.

Open the Package Editor. Select File --> Create New --> New Empty Package, then choose the appropriate game. Save the new package file - the name is unimportant, this file is just a temporary workspace.

Open the package file containing the conversation with the audio bank you wish to reuse. Clone the conversation across to your temporary file

renametut1 Figure 1

Drag and drop the conversation into the temporary file. Then choose "Clone All References."

renametut2

Figure 2

The example used for this tutorial is a short conversation from the Citadel DLC in LE3 - cit003_return_from_casino_m_D. You should now have a temporary file containing only one conversation. Next we will clean the conversation and rename some elements using an experiment available in LEX.

Under the Debugging menu, make sure Experiments are enabled. Select the BioConversation export. Now select Experiments --> Other People's Box of Legos --> Clean BioConversation for Cloning.

Several dialogue boxes will now open and you will need to enter new values. First it will ask you for a new conversation name. See the arrow in Figure 3 - this is what you are renaming. Pick any unique name, but it's strongly recommended to be something that sensibly identifies it as part of your mod.

renametut3 Figure 3

Next it will ask for a new ConvResRefID. This is the box outlined in blue. Vanilla values are in the 4 digit range generally. You will need to add a new, unique number. I generally add several digits to the existing ID at either the start or end. This pushes it out of the vanilla range while also allowing me to reverse engineer the original ID if required.

Next it will ask for a new ConvNodeID base range. You need to enter a number which will be used to create new unique ID numbers for each conversation node. It will count up sequentially from the number you enter. Vanilla IDs are usually 6 digits. Using an 8 digit string works fine. Much like TLK strings, we do not have a good method of tracking this across mods, but the likelihood of 8 digit strings conflicting in modded conversations that are loaded at the same time is quite low.

Next it will ask if you want to update the IDs of the WWiseBank. Select Yes.

It will ask if you want to discard unneeded objects. This will clear the dialogue nodes of animation data, lighting tracks, prop information, sound effects, etc. If you only want to keep the conversation as a place to store audio lines in order to get access to specific audio filters, then choose "yes". If you're working on a project where it would be better to keep this data, then don't. You know your project!

You will now have a clean conversation that has been partially renamed. See Figure 4.

renametut4 Figure 4

As you can see I have renamed this to test_mod_conversation and the conversation name has been replaced in all relevant exports. The name of the Wwisebank has also been changed, and this includes the ID in hex, inside the bank.

Unfortunately this does not include the unique IDs of the WwiseEvents or the WwiseStreams, which much be updated in both the exports and in the hex inside the bank itself. It also doesn't include the unique IDs of other internal bank items.

Update IDs within the WwiseBank using Tajfun's tool

We will now use Tajfun's WwiseBank ID tool to update the unique IDs within the WwiseBank itself (with the exception of WwiseStreams).

This broadly follows the instructions given on the github page but not entirely. The tool was originally designed to work with banks for weapon audio, where the audio is held within the bank itself. With dialogue, the audio is held in an external cache. This is why the tool does not update WwiseStreams, and why we must take additional steps.

Firstly, right click on the WwiseBank for the conversation, and choose Export... --> Binary Data Only.

renametut5 Figure 5

Save the .bin file. I find it convenient to do so in the same place as the WwiseBankIDChange.exe file, though this is not required.

Drag and drop the .bin file onto the WwiseBankIDChange.exe file in your file explorer. This should automatically run the programme in a terminal, and after only a few seconds new files will appear in the folder, and you can close the terminal. You should now have two new files - Diff results.txt and new bank.bin. These will be generated in the directory of the source file.

renametut6 Figure 6

Right-click again on the WwiseBank for your conversation, this time choosing Import... --> Binary Data Only*. Choose new_bank.bin.

We can skip the instruction to update the ID of the bank itself as the Conversation Cleaning experiment in the previous step already covered this.

So the next thing we need to do is manually update the WwiseEvent exports so that their IDs match the new IDs we just imported into the bank. Open the Diff results.txt file. Now go to the first WwiseEvent.

renametut7 Figure 7

As you can see, above, the WwiseEvent has an ID. In this case it's 1513467936. In brackets you can see this in hex - in Big Endian - 5A35B020. Now, click the Binary Interpreter tab.

renametut8 Figure 8

As you can see, the hex - this time in Little Endian (i.e. bytes in reverse order) - so 20B0355A - is present on line 60. We need to replace this so that it matches the new ID that's been imported into the bank. We need to find this hex in the Diff results.txt file and replace it with the corresponding value.

renametut9 Figure 9

Here you can see the Little Endian hex for the vanilla ID on the left - 20B0355A, and the corresponding new value on the right, in the red box - BB01F8F3. We need to paste the new value into the Binary Interpreter. Copy the new value from the .txt file. Highlight the vanilla value in the Binary Interpreter, right-click and choose Paste.

renametut10 Figure 10

Then click Save Hex Changes at the top of the pane.

renametut11 Figure 11

Repeat this for every WwiseEvent.

Rename WwiseStreams Manually

Finally, we must rename all the WwiseStreams. These have had their plaintext names updated by the experiment to clean the conversation. But their IDs have not been updated and we must do this, both in the exports in the package editor and within the WwiseBank.

Right-click on the WwiseBank and choose Open in WwiseEditor. Keep both the Package Editor and WwiseEditor open. You will be making changes in both.

Select the first WwiseStream. Make a note of the existing ID and corresponding hex value in Little Endian. We will need it later.

As seen in Figure 12, the vanilla ID is 91376226. The hex value in Big Endian is 05724A62. The value in Little Endian is 624A7205. You can calculate this using the Hex Calculator in LEX, or by going to the Binary Interpreter tab and finding the ID. In this case it's on line 3C. It's usually fairly easy to pick out visually.

renametut12 Figure 12

In the properties tab, change the ID to something else. As noted previously, this is a best effort at a unique value until a more reliable solution is available via LEX. Personally I tend to increment a specific digit or add one, so that I can reverse engineer the original value if necessary. This is useful when manually editing hex, as you can work out the original value again if you mess something up.

Here, I have changed the first digit from 9 to 8 - when I hit "Set" the ID and corresponding hex value will change. Now we also need to make a note of the new hex value in Little Endian.

In this case, the new ID is 81376226, the hex value in Big Endian is 04D9B3E2, and the hex value in Little Endian is E2B3D904.

We have updated the export. We next need to update the WwiseBank. Move across to WwiseEditor. In the search field, paste the vanilla hex value in Little Endian.

renametut13 Figure 13

You should find either one or two locations where this exists. This depends on whether the line has both a male and female version or only one version. Always check. You need to update the hex everywhere you find it.

When you have found the hex, as before, copy the new value, highlight the old value in WwiseEditor, right-click and choose Paste.

You must then select Save Hex Changes, followed by Commit (this is greyed out in Figure 14 because I have not yet saved the hex changes, but it will become available once I do).

renametut14

Figure 14

Neither of these steps actually saves the package itself, so I recommend a quick Ctrl+S for safety!

Repeat this process for every WwiseStream.

Copy from the Temporary Package File

Your conversation is now fully renamed! You should now be able to copy it - again with references! - from your temporary workspace to your target location, and the trashed exports will not travel with it. It is now ready to be used as a resource or donor conversation.

The WwiseStreams have filters applied by the bank - so you can now replace the WwiseStreams using Sound Explorer, but the bank filters (such as dynamically adding a helmet filter) will persist into the new lines.