-
Notifications
You must be signed in to change notification settings - Fork 27
Mass Effect 3: Redirecting, Replacing and Adding Audio to Conversations
This was written before the release of Legendary Edition. We now have access to the correct version of Wwise and can create new audio banks in Legendary Edition. Here is a tutorial.
The methods in this tutorial are still useful when you need access to specific audio effects, for instance dynamically accounting for helmet filters. But be aware this is no longer the only, or preferred, method of getting audio into Legendary Edition. We remain unable to create fresh banks for the original release.
Audio in Mass Effect 3 is kept in a format that is very difficult to edit. Lines can be directly replaced, but new lines cannot reliably be added. Lines can be redirected, but only within the bounds of the same Wwisebank (where audio for a specific conversation is stored).
However, both these limitations can be overcome with a few (lengthy, hacky) workarounds. This is primarily based around using a type of InterpTrack
called PlayFaceOnlyVO
(or a FOVO).
This tutorial covers:
- Using lines of dialogue from other (usually cloned) conversations (which is possible in ME2 and ME3, although this tutorial covers ME3 only)
- Using lines of dialogue from other (always cloned) conversations, then overwriting their audio (a workaround to create new dialogue without replacing anything, which is only possible in ME3)
Use the Package Editor to open the package file containing the conversation you are modding (the Modded Conversation). Then open the package file containing the conversation from which you wish to play a line (the Resource Conversation).
If both the Modded Conversation and the Resource Conversation are in the same .pcc file and you either (a) intend to borrow a line without overwriting it with new audio, or (b) don't mind overwriting the line (for instance because your mod ensures it will never fire) you can skip this step.
Figure 1
Drag and drop the Resource Conversation onto the top level of the package containing the Modded Conversation and choose Clone All References.
If you will be replacing the audio, you should fully rename your Resource Conversation following this tutorial. If you cannot do this, then choose a Resource Conversation from a .pcc file which will not be loaded at the same time as the .pcc file which holds the Modded Conversation, for instance a file from a different mission or location. This is to prevent the original Resource Conversation and the cloned version we will be hijacking from loading at the same time. If you are unsure what .pcc files are loaded, you can verify this by using the Streaming Levels HUD ASI mod available within the ME3Tweaks Mod Manager (via the Mod Management menu).
If you are replacing a line in the Modded Conversation, not creating a new line, you can skip this step.
Open the Modded Conversation in the Dialogue Editor. Edit the conversation to add in the new dialogue choice, including any necessary links, conditional or plot bool checks, etc. Do not include changes to subtitles, dialogue, FaceFX, etc. At this stage you are only creating the place you want your new line to exist and the conditions under which it will fire.
Figure 2
R41
is an exact clone of R6
, but with a new pathway set up, so it can be chosen as an alternate response. Basic dialogue editing is outlined in this tutorial.
If you are replacing a line in the Modded Conversation, not creating a new line, you can skip this step. There is also an experiment available to automatically complete this step for you. Be aware this is not reliable where the conv node or the interp has multiple output links, so you should always check in the sequence editor for accuracy. I'll leave the full description below as it's useful to learn and understand what is going on.
Select your newly cloned Dialogue Node, then go to the Matinee tab on the right-hand side. Select the icon that will open the node in the sequence editor.
Figure 3
Your new Dialogue Node is still pointed at the same InterpData
(which contains information such as camera angles, gestures and node length) as the node from which it was cloned. As InterpData
does not typically affect FaceFX or audio, for very simple edits, you may be happy to clone a node and leave the shared InterpData
. An example would include cloning a node and using a line of similar length from elsewhere in the same conversation.
But if you want to edit the camera angles or gestures or length independently you will need to create new sequence objects. You will always need to do this if you are using a PlayFaceOnlyVO
(FOVO) track to play dialogue from another conversation, as this is done via InterpData
.
After clicking on the appropriate icon, as shown in Figure 3, the Sequence Editor will open with the correct InterpData
already selected. You will see in Figure 3, the Line InterpData is 1243
, and you will see that same number in the InterpData
(represented by a circle) in Figure 4.
Figure 4
You will need to clone the four objects in a standard conversation node, and then relink them in an identical way. Right-click and choose Clone Object (blue) for the ConvNode
, Interp
and EndCurrentConvNode
objects. For the InterpData
, choose Clone InterpData tree (red) if you want to duplicate all existing data on cameras, gestures, etc. If you choose Clone Object your InterpData
will be empty and you will need to manually populate it yourself.
Once you have cloned the four objects, you can drag-and-drop to create the desired links. Drag the squares, and pull the lines to the correct connection points. This will create the links you need. It doesn’t matter where you leave the cloned items in the layout.
Next, you will need to update the Export ID.
Figure 5
Select your newly-cloned ConvNode
(yellow) and look at the pane at the bottom of the screen. Select m_nNodeID
(red). This is the current Export ID, and is currently the same as the object it was cloned from. At the top, set this to a different number. Try adding a few additional numbers to be sure it’s unique within the package. Copy the number and hit “set”.
Close the Sequence Editor and return to the Dialogue Editor. Select your new cloned Dialogue node. In the right-hand pane, still on the Matinee tab, double click on the Export ID and paste in your new Export ID number. Hit enter, and you will see the Line InterpData will also update itself.
Figure 6
So, the big one. Playing dialogue from another conversation. First you must clone in the InterpTrack
that can do this. Then you will set the information to point it to the line of dialogue to be redirected.
You should be in the Dialogue Editor, and should select the new node you have created in the Modded Conversation (or the vanilla node you wish to repurpose). This time, instead of opening the InterpData
in the Sequence Editor, you should do so in the Package Editor. You can go directly to the correct Export by using the shortcut button shown in Figure 7.
Figure 7
It is now possible to add a new
InterpTrack
to anInterpGroup
directly within the Interp Editor. It will add a genericInterpTrack
with a few common default properties. The tutorial below was written before this feature was implemented and shows the original method of cloning in from elsewhere. This has the benefit of teaching you how to manually link in the track, and providing the correct properties and arrays. However once you are familiar with the process you will likely find addingInterpTracks
directly is more efficient.
Next, you need to open a .pcc file that contains an InterpTrack
named SFXInterpTrackPlayFaceOnlyVO
. The holy grail: the FOVO. Files with LOC
in the title are a likely bet, but you can also generate a list of possible files by using the Asset Database in ME3Explorer and searching for the item on the “Classes” tab.
I will be using Export 2000
in BioA_Cat002_050Shuttle_LOC_INT.pcc
.
You should have two instances of the Package Editor open, one containing the file with your Modded and Resource Conversations, and another which contains the FOVO. Place them side-by-side and drag-and-drop the FOVO into your new node’s Conversation Group.
Conversation nodes will have one
InterpData
entry, which may contain severalInterpGroup
entries, one of which should be the Conversation Group. EachInterpGroup
will contain one or moreInterpTrack
entries. These control individual items such as cameras, gestures, sound, etc.
In the example shown in Figure 8, there is only one InterpGroup
under the InterpData
entry. You can check which is the Conversation Group by checking the Group Name (highlighted in blue).
Figure 8
This time you do not need to clone all references. You should choose to add only the track itself. It may give you an error saying something failed to link. That’s fine, it’s something you will be relinking later anyway.
Figure 9
Now you must link the new InterpTrack
to the InterpGroup
.
Figure 10
Select the parent InterpGroup
(highlighted in green) in the left-hand side of the Package Editor. In the right-hand pane, expand the Object Array (blue), then Add Array Element (red). A new entry will appear (purple). Select this, then set the new FOVO track’s Export number (orange).
You are now ready to redirect some noise.
Go over to your still-open Dialogue Editor, and move from the Modded Conversation to the Resource Conversation. Select the node with the dialogue you wish to use. If you are going to overwrite this with new audio, it matters less, but for ease, using a line of similar length may be useful.
Figure 11
Make a note of the Export number for the Resource Conversation (red), and the Line String Ref (blue) for the line itself. Go back to the Package Editor, and select the FOVO track you cloned in.
If you have closed the Package Editor and are not sure how to find the correct export, use the Dialogue Editor to navigate to the appropriate dialogue node in the modded conversation, choose the Matinee tab, and then click on the link to open in the Package Editor (see Figure 7). This will take you to the
InterpData
which contains the Conversation Group (anInterpGroup
), which in turn contains the FOVO (anInterpTrack
).
You will need to update a bunch of stuff. Figure 12 provides a before-and-after.
Figure 12
The Resource Conversation’s Export number is highlighted in green. The Resource Conversation’s relevant Line String Ref is highlighted in red.
The character who will speak the line is highlighted in blue. Shepard is always Player
, and if you start typing this in the text box to set the field, it should autocomplete. You do not need to know the package-specific Export number. Often the person Shepard is talking to will be identified as Owner
. Otherwise they will likely have a name like global_charactername
. You will be able to see how they are referred to by looking at their Entry Nodes in the Dialogue Editor. Their “name” within the package will be at the top, and again, it should be possible to type this into the text box and have it autocomplete.
Highlighted in purple is the audio timing, and you may wish to adjust this (for instance, in this case, I don’t want Shepard to wait six seconds before talking, so I have changed it) Finally, in yellow is the track name. You may wish to change this for your own ease of use, but it’s not required.
You are almost done, but first you must to go back to the InterpData
export.
Figure 13
Select the InterpData
export (green). Go to Add Property (blue), then select m_aBioPreloadData
(red) and add this (purple).
The new property will be automatically selected, and you will need to hit Add Array Element (which will appear next to the Add Property button, highlighted in blue in Figure 13), and expand the newly created array.
Figure 14
Then select pObject
(red) and set the number to the FOVO track’s export number (purple). This will preload the line as it is not normally a part of the conversation.
The blue highlight shows the Interp length which is the total length for the line and any associated animations to play. This is usually slightly longer than any spoken line to allow for fade-out and breaks between lines in a conversation, etc. You will likely need to adjust this. You may also need to adjust FaceFX animation length to prevent a line from cutting out early (however, this tutorial does not cover that topic).
The node in your Modded Conversation will now fire a line, subtitle and FaceFX from a node in your Resource Conversation. But you're not done yet.
The Modded Conversation will also try to fire the original audio and subtitles if these are not suppressed. So you need to go back to your Modded Conversation node, and mark the line as non-vocal on the Matinee tab, and Hide Subtitle on the GUI Control tab.
Figure 15
The line of dialogue from the alternate conversation should now fire in the game, using the correct FaceFX and subtitles.
This may be all you wish to do. However, if you want to add your own custom audio, keep going!
This portion of the tutorial does not cover how to edit FaceFX, assumes you have prepared a new audio line, and that you have installed Wwise 2010 v3.3.
You will need to replace the audio and FaceFX of the line you have chosen in the Resource Conversation. Open the Dialogue Editor and navigate to the correct node. Select the Assets tab. From here you can open the line’s FaceFX data and amend this (which is highlighted in blue, but not covered in this tutorial). Then open the audio lines in Soundplorer, and overwrite these (red).
Figure 16
This will need to be done for both male and female facial animation and dialogue for all characters. While audio for NPCs is always kept under the male line, NPCs will use FaceFX that corresponds to Shepard's gender (as will Shepard, of course).
Figure 17 (below) shows the Soundplorer application, which will let you directly replace audio. It is recommended to replace the audio at 44k or 32k (the highest depending on the game you are modding) rather than 24k.
Note that while there is an option to clone audio and add new lines to the conversation, accessing these lines is not currently something most modders are able to reliably replicate. That’s why you are using a hacky workaround instead...
LEX has historically done this by replacing the audio in the base game - which you move to your DLC mod in step 9 where you will compact your Audio Cache File. The latest nightly builds introduce a new feature. When you replace your line, it will ask for the name of the AFC file. Change this to something appropriate to your mod and it will create a new AFC within your DLC mod structure and append lines in there. Continue to choose the same name for all lines you replace. You will no longer be overwriting the basegame files. You may still compact your AFC in step 9 to remove extra lines, etc.
Figure 17
The audio and the FaceFX are now complete. But the original subtitle will still fire. When directly replacing audio into a node, it is possible to use a custom string from a TLK file, rename a few things, and have it work. But doing this via a FOVO will break things. So there’s another workaround.
In the Dialogue Editor, go back to the Modded Conversation node that is playing your new-line-via-FOVO, and open the InterpData
in the Package Editor (see Figure 7).
There is a specific InterpEditor application available – the first icon in the series of shortcuts available on the Matinee tab – and you may prefer to use this. It includes clearer, colour-coded track groupings and visual representations of track key times. But for consistency we will continue to use the Package Editor here.
Expand the InterpData
tree and navigate to the FOVO track.
Figure 18
Select bForceHideSubtitles
(red), and set this to True
(blue). The original subtitles from the line in the Modded Conversation (that you are overriding with a line from the Restored Conversation) will now play. Which isn’t what you want either! So next you overwrite that.
Open ME3Explorer’s TLK editor and add a custom string. This is covered in more detail towards the end of this tutorial.
Go to your new line node in the Modded Conversation, and replace the current Line String Ref with the new one you just defined.
Figure 19
You will need to double-click on the numbers to replace them. Hit enter and the existing text will disappear and be replaced by No Data
. If you go to Tools→ Manage TLKs → Refresh TLKs and then save the files, your new custom line should appear instead. But it will appear in game even if it doesn’t appear in the Dialogue Editor.
Then, go to the GUI Control tab and unhide the subtitles (see Figure 15).
If you are replacing audio in a vanilla dialogue node without using a FOVO track to pull in audio from elsewhere, this is not sufficient to add a custom subtitle as this method breaks the links to the audio and FaceFX data. It just doesn’t matter in this case because we are overriding those things anyway. Please see the Appendix for details on how to add custom subtitles without breaking audio/FaceFX.
An AFC is an Audio File Cache and it is where your mod will stash your newly created audio line. It does this by checking your mod for changed references to the vanilla game AFC files (such as overwriting a line in Figure 17), and repoints everything to the DLC’s AFC instead.
Open ME3Explorer’s AFC Compactor. Choose “select folder” (red) and navigate to your mod’s DLC folder, which must be installed within an existing ME3 installation (where you have made your audio changes). Then scan for references (blue).
Figure 20
This will take a little while, but a list of audio you have overwritten will appear (purple), and the Compact AFC button will become available. Press it! It will add an AFC file to your mod.
As the warning pop up reminds you, this changes all the files in your mod. You can’t just move the AFC into a backup copy of your mod and have it work. You need to keep the AFC file and the .pcc files that have had their audio repointed together as a group.
You can now restore the modified vanilla AFC files from backup if you like. The ME3Tweaks’ Mod Manager will allow you to do this by choosing Manage Target→ Modified Basegame files → Restore on a file-by-file basis.
Obviously you don’t need to do this after every line, but you don’t have to do it all at once either. You can keep adding new lines to your AFC without concern. Just recompact and it will identify lines that are already in the AFC as well as new lines to be added, and compact them all into an updated file.
That’s it! You’re done! A brand new audio line without removing another!
As noted in Step 8, just adding a custom TLK string to a dialogue node will replace the subtitles, but will also break the links between the TLK string, the FaceFX and the audio. The audio and FaceFX naming conventions include this string, and must be updated.
So if you do a simple overwrite for the audio on a particular node, and want to update the subtitles to match, the first thing you need to do is add a new text string to your TLK file.
The process of renaming various assets to refer to your new TLK string is explained in full below. It is worth doing this manually at least once in order to understand what you are doing. However, since the initial version of this tutorial, a useful experimental feature has been added to Legendary Explorer that will automate the process and rename the FaceFX, audio and wwisebanks for you. Select the node you wish to rename in the Dialogue Editor, navigate to the Experiments menu at the top, then Exkywor's Buttons for Lazy People, and then "Change Native Node String Ref". Enter the new string number you added to your TLK and click "Okay". Job done!
Next, in the Dialogue Editor, navigate to the node where you want to replace the subtitle. Go to the Assets tab, open the FaceFX editor, and look at the bottom left corner. You will see three places where the current Line String Ref forms all or part of an entry. Double-click on these entries and replace the current Line String Ref with your new one. (See Figure 21 in blue, green and red). You will need to do this for both genders.
Figure 21
Next, go back to the Dialogue Editor and open the audio line in the Package Editor. Click the Package Editor icon on the Assets tab (to open the audio line), not the Matinee tab (which would open the InterpData
).
The Package Editor will open with the audio line selected in the left-hand tree-view. In the right-hand pane open the Metadata tab, and amend the Line String Ref number again. Take note of the leading zeroes and keep the total number of digits the same.
Figure 22
You will need to copy the new Object name you have created and add it as a Name
to the Package (Tools→ Add Name) before you can Save All Changes (red). This needs to be done twice if it is a Shepard line, to account for both genders.
Tip: Double-check that you have saved the name change correctly. Sometimes you must paste the newly-added Name
in again before saving.
Finally you will need to rename the Wwise Event which is linked to the audio. The easiest way to find this is to right-click on the audio export you just renamed and choose Find References.
Figure 23
The first result will be the Object Referencer which you can ignore (it's basically an index of everything in the package). The next results will be the associated audio events. Again, you will need to change both if it is a Shepard line, but only the male line otherwise. Double-click to go to the Wwise Event, and once again rename the export on the Metadata tab by replacing the section of the name that uses the old Line String Ref with your new one (as in Figure 22).
Finally, back in the Dialogue editor, replace the Line String Ref in the node itself (again, as detailed in Step 8).