|Do not enter! This article is currently under construction and should not be used for reference. If you need help, visit the forums.|
This tutorial covers how to edit dialogue. It isn't necessarily difficult, but it can be a complex process due to the number of factors involved. For those reasons, this tutorial isn't going to follow a linear series of steps to get you from point A to point B. Instead it will be organized by what the modder might be trying to achieve. The tutorial will be divided into multiple sections, each centered on a specific technique and achievement.
Dialogues are voiced or subtitled interactions between characters in the game. A few examples of the possible ways to change dialogue are : Deleting/Skipping lines, Editing lines, Adding lines, Changing Ambients to Cutscenes, Tips on Audio Editing, and TLK Creation for DLC Mods.
Part 1 : PreparationEdit
This part will cover research and preparation. Aspects like what files you should expect to edit, tools you'll be using, useful websites, the planning process... The primary goal is to help you anticipate things, learn a bit from my mistakes, and provide some insights for those of you who might be interested in undertaking a large dialogue overhaul. In the next part of the tutorial, we'll begin editing.
The amount of planning needed is directly proportional to the amount of dialogue you are editing. If you are simply deleting a line here or there you don't need this part. However, a large dialogue overhaul requires a significant amount of planning. If you are going to do something of this nature, start by thinking things through. Lay out and organize the dialogue changes before you start editing files. Doing so will save you time and frustration, and ensure you are clear about what you intend to accomplish.
Things to think about:
- What do you want to achieve with the edit? How much time are you willing to spend on it?
- Do you want to completely change things, or keep the conversation mostly intact and "shuffle" things around?
- Does the dialogue vary with romance status, loyalty, and/or gender? If so, that adds complications and increases workload.
- Do you want to replace lines with new ones you create? If so, that means you'll have to deal with facial animations that no longer match the line. You'll need to move the camera or edit facial animations to keep immersion.
- If replacing lines with new ones, do you want to stick to the original VAs (voice actors) and pull source lines from other ME content or are you open to new voice actors?
- Do you want to edit audio for NPCs who have their voices put through special effects (e.g., Garrus, Mordin, Thane, Grunt, Tali, etc)? If so, you need to be aware that their voices sound different in each game--sometimes dramatically so (e.g., Thane, Mordin). Pulling source content from other games and splicing it into a ME3 conversation in a seamless manner can range from extremely challenging to near-impossible.
- Are any of the files you want to edit also located in ME3 DLCs ? If so, you'll need to make all the same changes to each one. You can't assume all players will have all (or any) DLC.
- Finally, don't forget that any audio edits for Shepard have to be done twice. Once for BroShep and again for FemShep.
Useful External ResourcesEdit
Plot, Conditionals, Dialogue listsEdit
Using YT videos can be very useful when it comes to quickly researching and viewing conversations.
- Gibbed ME3 Complete Dialogue + Plot Dump (no DLC)
- ME3 DLGs Database
- ME3 Plot Database
- ME3 Plot Dump
- ME1, ME2, ME3 bools by HJF4
- Gibbed ME3 Conditionals Dump
- ME1 and ME2 Plot Project.
- Dialogue Editor Research Post, Dialogue Editor Research
- ThaneMOD Huerta Dialogue Thread on ME3Exp
- Modifying Conversations, Modifying Conversations
- Dialogues Overview, Dialogues Overview
- Hex editing for dialog: Subtitles and Conditionals
- TLK Editing for Scenes, TLK Editing for Scenes
- Dialogue String Ref Dumper, Dialogue String Ref Dumper
- Audio Import Guide for ME3, Audio Import Guide for ME3
- Simple Voice Swaps, Simple Voice Swaps
- Replacing Sound in DLC, Replacing Sound in DLC
- Adding New Sounds, Adding New Sounds
- Tutorial: Silencing Sounds + DLC Issues, Silencing Sounds
- ME3, download the most recent audioextract zip
- Audio Extractor for ME1 BROKEN, Alternative ?
- Audio Extractor for ME2
- Audio Extractor for ME3
- Sequence Editing Tutorial, Sequence Editing Tutorial
- UDK Kismet Guide
- UDK Kismet Examples
- UDK Kismet References
When editing a dialogue you will spend most of your time editing localized PCC and TLK files (e.g., BioD_CitHub_HospitalP2_LOC_INT.pcc and BIOGame_INT.tlk). All these files have a suffix that indicates their localization; INT is for International (i.e.English), ITA for Italian, etc. Read more on this in the TLK File Format article. However, you will likely need to edit other files, as well. Dialogues use conditional/bool checks to determine which branch a conversation takes. That means editing a CND file with the Conditionals Editor or creating new State Transitions with the Natives Editor. If you add a new line of dialogue you'll need to clone and assign it a facial animation, which uses the FaceFXAnimSet Editor. If you need to adjust when the NPC is available for the conversation, you'll have to edit the main PCC for the level using the Sequence Editor. If you replace audio for dialogue, you'll use Soundplorer, and so on.
Here's a list of ME3Explorer tools that you will probably use as you edit a dialogue:
- Conditionals Editor
- Dialogue Editor
- FaceFXAnimSet Editor
- PCC Editor 2.0
- Sequence Editor
- Subtitle Scanner
- TLK Editor
You'll likely need other external programs as well, which may include:
- Natives Editor
- Notepad++, an awesome, free editor that replaces the default Windows Notepad to edit text, but that also has the ability to act as a source code editor.
- Audacity, or another audio editing program.
- Wwise, an audio editor/conversion program that is mandatory if you wish to alter sound files for ME3.
- Audio Extractors for ME1, ME2, and ME3 to give you access to source files.
Preparing the filesEdit
Converting the TLK to XMLEdit
Despite the long list of tools above, most of your time will likely be spent in the Dialogue Editor and in a XML editor like Notepad ++. So, first things first:
- Editing dialogue primarily involves making changes to localized TLK files and the PCCs that reference them. That means unless all localizations of these files are edited, any changes will only affect the localization the modder has installed. Regardless of localization, prior to editing the TLK, it must be converted to a readable and editable form : XML. To do so :
- Open TLK Editor. Tools > TLK Editor Ensure the Load TLK tab is selected in the window that opens.
- Locate TLK. In the upper Current Path to TLK file field click the Change button. A window will open. Navigate to the ME3 ../CookedPCCConsole folder. Select the appropriate TLK for your game's install. Click Open in the lower right.
- Define & Name. Click the Change button associated with Current path to output text file. In the window that opens navigate to the desired save location for the XML file. Name the file and click Save when finished.
- Convert. Click Start in the TLK Tool window to convert the file. A message will appear when finished. The TLK (xml) can now be opened in Notepad++ or another XML capable editor.
Use the reverse process to generate your new TLK from the edited XML. Don't forget to save your changes in the XML first.
- Get familiar with Dialogue Editor. Reading this article will help. Getting acquainted with its interface and learning how dialogues are organized is necessary before you move onto the next part of the tutorial.
IMPORTANT : Remember that you cannot load another dialogue in Dialogue Editor while editing another, if you do so all your edits will be reverted. You must save your progress first.
If you are planning a significant dialogue overhaul, you'll need to organize and map your changes in a document. And, no matter the size of the overhaul, you'll want to keep track of any changes you make for future reference. Spreadsheets work very well for both. A single file allows you to organize things by sheet. If you are working on a group project with others, using Google Docs is helpful, as everyone can access and edit. Here are some screenshots of spreadsheets used for ThaneMOD. They're not perfect, but they should provide you with some good ideas:
The main things to keep in mind as you set up your documents are:
- Organizing the dialogue by TLK string is intuitive
- Include the text of the vanilla line and the planned edit
- If changing audio files, keep track of the size of the audio file and the length of the vanilla line and replacement line
- Keep track of scene animations and dialogue wheel appearances/options
- Keep track of the entry/reply
- Keep track of any conditional/bool checks, state transitions, etc
- Create fields for animation/camera/timing edits
Part 2 : The Basics – Simple DeletionEdit
Skipping (i.e. deleting) dialogue is about the easiest thing you can do when it comes to changing the flow of a conversation. There are a variety of ways to do it depending on the situation and your preferences. But, before you go ahead and skip a line there are some important things to consider:
- Does the line trigger a StateTransition?
- If so, that means skipping over it will prevent the bool/int from being set, unless the same state transition is specified elsewhere. Assuming it isn't, it's removal could have major plot consequences if the game attempts to check it in the future. That can include other dialogues, content controlled via sequence maps, and even in plot objects only editable in PCC Editor 2.0.
- Is the line subject to a "Major Decision?"
- I'm still not clear about this parameter since it doesn't always coincide with the setting of a bool (StateTransition). Because of that, my comments about StateTransitions apply here to an extent.
- Do you always want to skip the line, regardless of Shep's gender or romance status?
- If so, then it's easy. If not, then it's a more complicated edit that will involve more steps. It's not a simple "skip".
- Does the conversation still make sense with the line's removal?
- Usually removing a single line makes the most sense when it's at the end of a conversation. If the line you want to use is in the middle of a group spoken by the same speaker, or if it's a reply Shepard is making, then it will likely require more editing.
- Does the line you want to skip point to any other lines (even far down the convo) that you want to use?
- If so, then it's a more complex edit, similar to the gender/romance situation above.
Basically, whenever you remove something from a conversation, you must do so with care. In addition, editing dialogues can have unintended consequences including changes to animations, model locations, and camera angles. Keep an eye out for these things as you edit.
First Method : TLK EditEdit
Editing the TLK is probably the easiest way to skip a line of dialogue. All you have to do is delete the text inside of the desired string's data tags and the game will simply skip over it and move to the next entry/reply in the conversation.
The advantage here is that you don't have to edit the corresponding PCC file at all. And, no entry or reply nodes are deleted so the entire conversation "skeleton" remains intact. You can remove multiple, consecutive lines using this method, as well, but when you do so it increases the possibility that you'll run into an issue with camera/models/animations.
The potential disadvantage of this method is that it will always remove the line(s) regardless of Shepard's gender or romance status, and regardless of game timeline or what plot events have been completed. A TLK edit is "all or nothing." In addition, it's important to realize when you do this, the string text will no longer appear in the Dialogue Editor (DE). Instead you'll just see an empty set of quotation marks. Also, please disregard the change in TLK position in the screenshot above. It's not relevant in this instance and is due to DLC mod conversion (to be covered later).
How To Edit TLKsEdit
Reading the TLK File Format article is necessary to understand the following advice.
- Available Strings : String IDs must be unique across all TLKs. Assume strings 0-899999 are used by the game (that includes main game and all DLC). Consult this thread to see which IDs are already used by other modders.
- String Placement : New strings must be placed sequentially in the TLK for them to work. In other words, if string 900 is placed above/before string 500 the game won't read it properly.
- Male/Female String IDs : These should always match each other, as shown in the Online Pass screenshot. Keep the vanilla values. Do not edit them.
- Male/Female Label Locations : All new TLK strings should be placed above (have a lower position integer) the Male and Female Section Labels (IDs 134217731). They may work with higher string IDs (done in ThaneMOD v1.0), but that approach can be problematic. They may also work with when assigned a new string ID and position (done in ThaneMOD v2.0), but that can also be problematic. The simplest approach is to use IDs lower than 134217729 and physically place the strings above 134217729 in the TLK.
- All-in-One TLK : Mass Effect's TLK strings are continuous across all 3 games. That means ME3's main TLK contains content from both ME1 and ME2. Keep this in mind when researching. All strings below 500K are for the other games, but commandeering them for use would be unwise.
- Avoid Confusion : When working in Notepad ++ it is easy to get confused between string IDs and line numbers, as they are often both 6 digits long. Stay aware of this to avoid errors in documentation.
- Ctrl+F : Strategically searching the TLK is a good idea when it has over half a million lines.
- Special Characters : When converting from TLK format into XML certain characters will be corrupted. Such as Noverias
- To rectify this do a global replace for the proper character. For example, the code above seems to be used when an apostrophe should be present. There are a variety of characters that will be corrupted with different codes. Be sure you replace each code with the correct character. Making a new DLC TLK for your mod, rather than replacing a game TLK avoids this problem. Which is what we'll move onto next.
Most information about this can be found here, we will only cover a few additional details in this part. Keep in mind everything applies to DLC TLKs as well as TLKs for the main game.
Having a DLC TLK requires you to have already built a DLC mod !
Why choose DLC TLK over Main Game TLK ? Creating a DLC mod with its own TLK file is infinitely better than modding the one for the main game. You'll end up with a much smaller, more manageable file that is inherently compatible with all other mods out there (assuming you've chosen your load priority wisely). The only drawback is that it can be difficult to create and mod a DLC TLK from the outset, for two specific reasons:
- Adding strings usually results in needing to update the position integers assigned to existing strings. As your TLK grows in length, this can be very time consuming. A single mistake will prevent the TLK from compiling properly from the XML.
- A DLC TLK is not a "complete" TLK. Unlike the main game TLK, DLC TLKs only contains the things the modder has changed or added. It is missing a lot of information.
When BioD_Nor203_LOC_INT.pcc is opened in the Dialogue Editor, ME3Explorer loads BIOGame_INT.tlk in the background. This TLK contains all strings the game references in the dialogue. Let's say a modder wants to change a dozen strings and makes a DLC TLK to do so. They'd probably also like to see those changes in the editor by loading the new DLC TLK manually, right? Wrong. The DLC TLK doesn't contain all the strings the dialogue uses. It only contains some of them. Which means any field in the editor that references a string ID not in the DLC TLK will contain the "No Data" reference.
To fix this issue, all strings referenced in the edited dialogue could be placed into the DLC TLK, even if they remain unedited. The obvious drawback of doing this is the amount of work in tracking them all down, as they all won't be in the same part of the TLK (this seems to be inevitable). Including them also makes the TLK longer, which exacerbates the issue with re-numbering position integers.
For these reasons it can be much easier to first make edits in the main TLK and create the DLC TLK when finished with all edits. This also avoids the problem of having to re-number existing position integers, since new TLK string will be appended at the bottom. The drawback to temporarily editing the main game TLK (or any other vanilla TLK) is the modder must keep meticulous track of every TLK change, so they know which strings to include in the future DLC TLK. The only other option is to use a file comparison program like ExamDiff to compare the modded TLK with the vanilla one to track changes. Note that the built-in comparison tool in Notepad ++ can only compare files with under 10K lines.
Creating the DLC TLK FileEdit
- How to Start ? The easiest way to begin is to duplicate one of the simplest vanilla TLKs like the OnlinePass or the From Ashes Shared TLK. Doing so means nothing is deleted and the mandatory entries are easily located and edited. The modder then just needs to add new strings and change the name of the file.
- File Name. The DLC Mod TLK should be named as such: DLC_CON_MODNAME_INT.tlk. If modding a different localization use the appropriate suffix.
- Pretty Mod Name & String ID. Use whatever name you wish. It's important to realize that the string ID used in the TLK is referenced in the Mount.dlc file. This means the string ID from Online Pass can't be used with the Mount.dlc for the EC, for example. They need to "agree" with each other.
- Keep Backups ! When making lots of changes it's handy to keep copies at a regular interval so edits can be easily reverted without having to recompile the file.
- String Data Formatting. Always place new data text immediately following the first data tag. Skip a line between paragraphs. Don't indent anything. Place the closing data dag immediately after your text, rather than on the following line. There's no way to style text, so no italics, bold, etc.
- Referencing Another String's Data Within the Same TLK. Using the dollar symbol in front of a string ID within a data tag will reference that string's text. Which means these strings:
<string> <id></id> <position>100805</position> <data>- Lead</data> </string> <string> <id>140000101</id> <position>172</position> <data>coldwetn0se AndromedaShepard AthenaisShepard elliekrios elvie Emeraldfern kittykat JECW mnomaha n7Siha quietonewisp vickyoak</data> </string>
Turn into this in-game :
About the "No Data" stringEdit
Hopefully, by now you've gained an understanding that dialogues work via a constant back and forth between the Entry List and the Reply List. For each entry in the Entry List, there must be at least one reply in its Reply List (and vice versa) to keep the dialogue going, even if it refers to a No Data entry/reply. These "No Data" entries/replies still direct a variety of things including state transition triggers, conversation branches, changes in camera, interrupts, animations, and more. They are necessary, and in some cases, their strings can be used to insert new lines of dialogue. This is because every "No Data" entry has a string ID assigned to it by the game, viewable in the Dialogue Editor. Unfortunately, the string's ID is missing from the TLK, sort of. Instead of the proper string ID, what appears in its place is a 10-digit number that begins with "-214." This is different from all other TLK entries that are used for spoken lines or displayed text. There is also always a "-1" inside the data tags, which indicates null/no data. Here are two screenshots to help illustrate the TLK contents for Thane's investigate dialogue (entry 7 of the Reply List). Note: the adjacent strings in TLK screenshot have been edited; the files loaded in the DE shot are vanilla.
Second Method : Redirecting DialogueEdit
Another way to skip a line is to "re-point" the dialogue by editing it with the Dialogue Editor by modifying the replies defined in the Entry List or the entries defined in the Reply List. We'll use one of Thane's lines in his Huerta investigate dialogue as an example.
Say we want to skip the line with the blue box from the above screenshot (entry 5). This is a nice, simple example since there are no additional dialogue branches at this point, nor conditional checks. It's worth nothing that information about the surrounding entries and replies can be gleaned much more quickly by looking at the dump, rather than by having to open multiple nodes in the Dialogue Editor. To skip this line via redirect we need to edit the line in Shepard's Reply List that points to it: reply 3. Instead of it pointing to entry 5, we need to make it point to Thane's following line, which is entry 6. Simply double-click on the value and change it as done here:
Most fields in the Dialogue Editor can be edited in this manner. Double-clicking on the value will trigger a pop up window where you make the edit and click Ok. Once you've done that, the game will skip the line. You can remove multiple, consecutive lines using this method, as well. Note that if you wanted to skip one of Shepard's replies, you would have to re-point by modifying the appropriate entry of Thane's in the Entry List.
Optional Step: If you know you will never again need the line, or that "spot" in the conversation skeleton, then you may select the skipped entry/reply and also delete it from the Entry List/Reply List. Edit > Remove > From Entry List. Taking this step is unnecessary, but when making a lot of changes it may help keep things more manageable.
Important: Changes to multiple dialogues in the same file will not "stick" unless you save between loading each dialogue by using File > Save Changes.
The advantage to this method of edit is it avoids a TLK edit and only edits the PCC. Therefore, if you are trying to maintain compatibility with non-DLC mods that also modify the TLK, this is a good way to do it. Like the TLK edit, it keeps the full skeleton of the dialogue intact (unless you complete the optional step) which is another good thing. And, as we'll see shortly, a re-point can be combined with conditional and bool checks to make the skip only happen sometimes.
The main disadvantage to using a re-point is that a single edit in a single dialogue results in needing to distribute the entire PCC file as part of your mod. PCC files are usually 10-20MB each, so if you're re-pointing a lot of dialogue it will result in lots of edited files and a decently large mod (and subsequent longer download times). Not to mention if you are creating a DLC Mod, TLK sizes are extremely small. ThaneMOD's TLK affects at least a dozen PCC files and has almost 2000 lines--but is only 70KB. Compare that to editing a dozen PCC files directly, which would run you around 150-200MB. TLK edits can definitely be a good way to go; use them where you can and when it makes sense.
Third Method : Conditional checksEdit
Lines subject to conditional checks can be easily activated or deactivated by turning off and on the check. ThaneMOD v2.0 used this method to omit James' flirting with Shepard, which is solely based upon condition checks for Shepard's gender. There are actually multiple ways to go about this depending on the type of check:
- If ConditionalFunc is a plot bool, you may set the ConditionalParam field to "-1" (null). Setting it to some other impossible value like "2" also works.
- If ConditionalFunc contains a conditional, setting FireConditional to False works like a switch to turn the check itself "off".
Any of the above methods are preferred since they all retain the contents of the ConditionalFunc field in case you need it again in the future. However, replacing the value in this field with -1 (null) will achieve the same result.
The contents of the blue box above are skipped by making the edit that appears to the right. Note the vanilla state for the ConditionalParam field (as seen in the dialogue dump) is "1." Altering this value to "2" creates an "impossible" situation for the game, since bools can only have a 0 or 1 value. That causes the game to fail the check and follow the branch down to entry 26.
Fourth Method : Delete from Starting ListEdit
Let's say that you have a large branch of a conversation you want to get rid of. Chances are it will be controlled by a conditional and you can use the method outlined above to inactivate it. But that branch may also be controlled by its place in the Starting List, and if so, then you may be able to remove it by simply editing the list.
For example, let's say you want to remove the entire exchange between Aethyta and Liara that contains the buggy relationship dialogue about Shepard:
If you select the entry number that corresponds to entry 39 (number 6) and delete it, the game won't be able to locate the proper dialogue. You do this through Edit > Remove > From Starting List. There is one important detail to be aware of, though : deleting the entry will automatically renumber the list. As discussed in the Research Thread, these list numbers are used in the ConditionalParam fields for the specified entries. That means you'll also need to fix the ConditionalParam fields for all Entry List entries that correspond to positions 6-9 in the Starting List. If you don't, the dialogue won't work properly.
Fifth Method : Dialogue WheelsEdit
More details about editing dialogue wheels can be found in Part 2. For now we'll stick to how to remove an option from a dialogue wheel (DW) or how to skip a wheel altogether.
Choice Removal via TLKEdit
This is a dirty hack, but it makes things really, really easy. ThaneMOD v2.0 used this method for FemShep's flirt with Joker in Purgatory. The intent was to remove it for everyone.
Just like removing a spoken line from the TLK will skip it in game, removing the string data (text) for a DW option makes it unavailable. The game will simply act like the option isn't there.
Skipping the WheelEdit
Many DWs pop up due to conditional checks. That means all you need to do is cancel the conditional check for the wheel's entry in the Entry List. Remember when editing : 0=false, 1=true.
If the DW isn't subject to a conditional check, that means it's just a part of the natural conversation flow. You can then use the methods outlined in the second method to re-point and skip over it.
Warning : Stuff you should NOT deleteEdit
This is probably obvious but I'll state it anyway. The focus of this part of the tutorial has been skipping/deleting/removing things, but there are things you should never skip/delete/remove. Things like the entire Starting List. The Speaker List. Stage Directions. Male/Female Animation Sets. All entries in the Entry List or Reply List. All "No Data" entries. Delete that stuff and you'll break things. You should never need to anyways. If your purpose is to delete/skip a line, a branch, or dialogue wheel, it is covered above.
Part 3 : Easy to Moderate EditingEdit
Time to delve into the guts of dialogue editing. This part of the tutorial could almost be endless, so instead of itemizing sections that cover changes like in Part 2, let's focus on two conversations I've edited and use those as "case studies".
First Case StudyEdit
Let's take Sam's post-Rannoch ambient as an example. This is a relatively easy edit. The related PCC is BioD_Nor_203CIC_LOC.INT.pcc and the dialogue is referenced in the nor_comm_mr_gth002_d_dlg package.
This ambient dialogue requires very few edits to make a big difference. It's a good example of how modifications to the Starting List can affect the dialogue and how to restore unused content into the game. Here is a link to a video of the said scene. After loading the dialogue in the editor and Gibbed dump we see that the vanilla dialogue has two entries in the Starting List, thus two possible ways it can begin:
But, upon closer inspection, however, we see entry 0 (E0) isn't actually subject to a conditional, which is a problem:
Not having a conditional attached to this entry means the game will always use it since it comes first. The conversation will never make it down to trigger E12 and whatever lines are dependent upon it. Therefore, despite the presence of these lines in the files, this particular dialogue will only ever start one way, which is what we see in the vanilla clip above.
Looking at the Starting List is a good way to determine if there's unused content in a dialogue. Cross-referencing with the Gibbed dump also helps. In this case we see that there are three alternate openings BW created, which are dependent on the outcome of Priority: Rannoch. For some reason, they didn't make the final cut of the game:
So, let's say we want to restore these openings. First, we need to walk through the dialogue and take a closer look at what we're getting into:
- There's a state transition at the beginning (2129).
- Entry 12 ultimately leads to all other branches.
- Entry 12 leads directly to replies 10 and 18.
- Reply 10 leads to the three Rannoch outcomes. All conditionals for these outcomes are already in place (yay).
- Reply 19 contains a "major decision" and default action. It also contains a "DISAGREE" category. This is an indication the dialogue was at one point intended to be a cutscene (very common with Sam).
- Entry 13 (broker peace) has several new lines but ultimately leads to the vanilla opening (***see entry #0*** at the bottom).
- Entry 13 also contains some variations for Sam's relationship status.
- Entry 19 (side quarians) has one new line before dumping into entry #0.
- Entry 20 has one new line before the dialogue ends ("DIALOG END"). This is something we'll need to fix if we want to use it.
Now that we've taken a more detailed look at the dialogue we've determined a few things:
- It makes sense. 2 of the 3 Rannoch outcomes already feed into E0, which is the starting dialogue we're familiar with ("I hear you were on the ground with the Reaper"). The flow between the new and old content makes sense. If it didn't, we'd have to omit the original line or take another route.
- Shepard's gender. There are no variations in the conversation for this. Bonus.
- Sam's Relationship. Conditional 885 checks for Sam's romance bool (19835=T). Conditional 883 checks to see if the player has shown interest in Sam, that they haven't broken up with her, and that all other relationships are false. Since Rannoch occurs before Cronos the player technically still has time to invite Sam to the cabin and lock the romance in, so there's a (small) chance the associated dialogue could still be used in game. That means we should keep it in place.
- Amend Starting List. We need to make sure the game always starts with the new lines we want to restore. That means editing the Starting List.
- Remove the State Transition. The ST triggered by E12 is also used by E0. Usually we'd want to figure out exactly what this ST is for, but since the game isn't using the dialogue we're restoring, we know we probably don't want to trigger the same transition twice. It needs to be removed. We'll cover how/when to change state transitions (and add new ones) in 3.B.
- Remove Reply 19. This line doesn't make sense in the context of what we're trying to do; it should be removed. This also addresses any issues with Major Decisions and Default Actions since the reply wasn't used by the game anyway. With our changes, it still won't be.
- Fix Entry 20. The final Rannoch outcome needs to be modified so it also leads to E0, otherwise the dialogue will end here for players who side with the geth.
In the series of screenshots below, the vanilla version is on top and the edited version is below.
- Starting List. Select position 0 and Edit > Remove > From Starting List. The entry below will automatically re-number itself to Position 0.
- State Transition. Expand E0 and replace 2129 with -1, then click "Ok."
- Reply 19. R19 itself doesn't need to be removed. Instead, we'll remove the entry that points to it. That's E12. Expand E12 and its Reply List. Select the 2nd reply (1:) in the Reply List. Then, Edit > Remove > From Entry's Reply List.
- Entry 20. Like the edit above, we need to re-point the reply E20 refers to. The easiest thing is to use one of the replies that already refers to E0. For a cutscene dialogue we'd need to be a bit careful to match up model positions and camera angles, but because this is an ambient it doesn't matter. We'll use the one E19 points to, which is R17.
- Expand E20 and its Reply List.
- Double-click on the only entry present, which currently refers to R18. A small window will pop up.
- The first field asks about a "Paraphrase" String. Leave it blank and click Ok.
- The second field asks about the "Index." This actually corresponds to the reply number and is the one we want to edit. Change the value from 18 to 17 and click Ok.
- The third field asks about the "StringRef." This is the string ID that corresponds to dialogue wheel text (if a DW is present). Since neither R17 or R18 have a DW present, the value of the this field doesn't matter. You can retain string 639870 or replace it with the one associated with R17 (referenced in E19's reply list). We'll leave it alone. Click Ok when ready.
- The fourth and final field asks about something called "Category." We'll talk about this more in the second case study. For now leave it unedited and just click Ok again. The dialogue will now refresh with the edit in place.
- Save using Save File > Save Changes.
Done! Notice that we didn't do any TLK editing, since none was necessary. We also didn't need to create any new conditionals or state transitions, nor did we need to edit audio, add/remove entire entries/replies, adjust InterpLengths, or swap out FaceFX. This was a very basic edit. Assuming there's no surprises, a player who brokered a peace and isn't pursuing a relationship with Sam will get this new dialogue.
Second Case StudyEdit
This time we're going to look at a cutscene dialogue with some slightly more complex edits. Specifically, adding a new dialogue wheel option to Sam's "Relationship 2" dialogue. Here's the vanilla dialogue with FemShep for reference. The related PCC is BioD_Nor_203CIC_LOC.INT.pcc and the dialogue is referenced in the nor_comm_relationship2_d_dlg package.
This is one of the many dialogues in the game that contributes to Sam "ninjamancing" FemShep. As we step through the tutorial below we'll see the ninjamance results from three things:
- Lack of neutral conversation options in ME3 (3 o'clock DW position in ME2)
- AGREE responses (2 o'clock) conveying increases in Sam's romance integer
- Sam's lock-in being restricted to FemShep. Since AGREE responses tend to be chosen by paragon players, this has the combined effect of paragon FemSheps always being pursued by Sam, regardless of the player's intent, at least until a different romance is locked in.
For this series of edits we want to put the control back into the player's hands like it was in ME2. That means making it much more obvious when a DW choice will impact the relationship and implementing a true, neutral option that doesn't require the player to DISAGREE. We also want to make sure Sam's "cozy" flirt doesn't happen for our new neutral option.
Now that we've watched/played through the vanilla conversation, let's again start by reviewing the entire dialogue tree:
Here's what we've got:
- The conversation always begins in the same way, meaning there should be only one entry in the Starting List.
- There's a conditional check (bool 20072) and a state transition (2345) at the beginning.
- Reply 1 leads to two possible ways Sam can respond to Shepard's opening line. Entry 2 is subject to cnd 552 returning true.
- Entry 8, which is Sam's "shoebox" remark, triggers a dialogue wheel with two options (note the missing "neutral" option as in ME2).
- The AGREE option leads to reply 7, which triggers a state transition (2133) and Sam's flirt.
- The DISAGREE option leads to reply 9. It's the default action and a major decision. It eventually dumps into entry 11, following the same path as the AGREE option.
- Entry 15 is the final line in the dialogue and triggers the last state transition (4595).
We now have a better idea of what we'll be editing and what needs more research :
- State Transitions. We need to determine what 2345, 2129, 2133, and 4595 do.
- Conditionals. We need to determine what plot event bool 20072 corresponds to. We also need to look up the expression for 552 to be certain it doesn't factor in Sam's relationship status at all. Judging by the line it shouldn't, but it's a good idea to check. It's also good practice if you're new to conditionals and dialogue editing.
- Unused Dialogue. There isn't any this time, so no work to do there.
- Starting List. We don't need to edit this, since there's no reason to change how the dialogue begins. We also know from comparing the video to the tree that there's no unused dialogue.
- Dialogue Wheel. We know we need to add a new reply to entry 8. Other edits will be necessary, but we'll figure those out a bit later.
- Default action/Major decision. This is something we need to pay attention to and may want to edit.
In the first case study above, we restored unused lines to Sam that were related to a major plot mission. As a result, it wasn't necessary for us to research the different state transitions present to determine what they meant -- we just needed to ensure our restoration didn't trigger the same one repeatedly. What we're about to edit is different. We want to change Sam's interaction with Shepard and what it means for their relationship. This is a big deal since many other conversations in the game can and will be affected by the changes we make. Now we definitely care because our edits could break things down the road. State transitions control the setting of bools and integers in the game. To look up their ID numbers, we need to use TankMaster's Natives Editor, a utility not yet part of the ME3Explorer toolset. You can find more information on it's usage in the State Event Map article. This example was a pretty moderate-level edit. We relocated an existing DW option and learned about reply categories and types, added a new option to the DW, did a little re-pointing with entries and replies, learned how to research and create new state transitions, changed a conditional reference, and edited some camera references (ExportID and CameraIntimacy). Long story short, 2345 is a bool that prevents the same conversation from triggering again in the future, 2129 is Sam's "friendship" integer, 2133 is Sam's romance integer, and 4595 seems to simply flag the end of the conversation as finished.
The only two conditionals used in our dialogue are bool 20072 and conditional 552. From our state transition research we know that bool 20072 corresponds to the conversation itself. A quick look at the expression for cnd 552 shows that it checks for acquisition of Priority: Sur'Kesh, which makes sense in the context of the alternate line used: (plot.ints != 0) No edits are needed in either situation and we want to keep both intact.
Modify vanilla agreeEdit
We're finished with research so we're ready to edit. Our first step is to make it more obvious to the player that the game views the vanilla AGREE as a relationship-building response that will result in a flirt.
- Relocate Choice
Since the ME3 dialogue wheel is different from ME2 (ME3's "goodbye/return" is always in ME2s neutral, 3 o'clock position), we have to follow the new conventions. That means moving the vanilla AGREE to the 11 o'clock, FRIENDLY position. Before we do this, however, we should cover a bit of background. FRIENDLY and AGREE are called EReplyCategories. All reply categories available within a PCC occur in its Name List. Our file has the following five EReplyCategories:
The assigned reply category determines where the choice is placed on the wheel. Unlike the Name List, EReplyCategory wheel locations are consistent across PCCs and always have the same structure:
There are also three more EReplyCategories in the game not in our PCC:
- Reply_Category_Hostile (seen above)
- Reply_Category_Paragon_Interrupt (not on the DW)
- Reply_Category_Renegade_Interrupt (not on the DW)
The current assigned category is AGREE, which corresponds to entry 1513 from the Name List:
We want to use FRIENDLY instead, which is entry 1516. Changing the reply category is done via the same mechanism we covered in the first case study, step 4, altering the Category field.
- Assign Conditional
While the relocation is helpful, assigning a conditional is going to make a big difference. Since Sam is lesbian (she confirms this in BroShep's cabin visit), we're going to take the additional step of making the FRIENDLY response only be available to FemShep; BroShep won't be able to see the response on the wheel. To be consistent with game conventions, we also want to remove the potential for flirting if FemShep has already locked in a romance. While we could make a new conditional for this, cnd 887 is used in several of Sam's dialogues and will work well for this purpose: Note: conditional modified to include Thane (19283) and Kelly (21100) romance bools.
((plot.bools == Bool false) && (plot.bools == Bool false) && (plot.bools == Bool false) && (plot.bools == Bool true) && (plot.bools == Bool false) && (plot.bools == Bool false) && (plot.bools == Bool false))
Insert conditional 887 into R7 following the methods outlined in the third method of Part 2.
- Create New State Transition.
- Let's say we also want to keep track of whether FemShep chooses to flirt during the convo. Right now ST 2133 modifies an integer but it doesn't set a bool. Setting a bool could be useful. We could then check for it in subsequent conversations and use the result to steer what happens down the road.
- The bool could be added in two ways, either by editing ST 2133 or making a new state transition. The latter is preferable since ST 2133 is referenced in multiple conversations. We don't want to change it everywhere, just in this dialogue. You can find more information on how to do so in the State Event Map article.
- Insert State Transition.
- Now that our new state transition is created, we just need to place it into the dialogue. Doing so will wrap up the edits to the vanilla AGREE, now categorized as a FRIENDLY flirt available only to unromanced FemShep.
- Edit the state transition for E7 from 2133 to 7603 using the methods outlines in 2.B/C. When finished, it should look like this:
Add platonic agreeEdit
Adding our new platonic AGREE is going to take several small steps. Before we can begin, we first have to figure out whether to modify an existing reply or add a new one. Looking at the Reply List, Shepard has a lot of "No Data" entries.
R8, specifically, is in a convenient location and isn't used for a line. It also doesn't have any other events connected to it (no major decision, conditional check, state transition, etc), it just serves to "bounce" the conversation back from Shepard to Sam. Let's use it so we can see how to change a REPLY_AUTOCONTINUE into a spoken line (REPLY_STANDARD).
- Create New DW Option
New DW options must be added by cloning existing options. We're going to clone the top one that we've reassigned to the FRIENDLY category. Before beginning this process you should have a new TLK string ID picked out that will be used for the DW text. We'll be using 900000.
Don't worry about the "No Data" reference created in your new option. This is because the new string ID you're entering doesn't exist yet in the vanilla TLK.
- On the Entry List tab expand E8 and its Reply List.
- Select the top entry (0). Go to Edit > Clone > Entry's Reply List Entry. The dialogue will reload with a duplicate of E0 in the "2" position.
- We need to edit this to change three things: the string reference for the DW text (from 640164 to 90000), the referenced reply (7 to 8), and the EReplyCategory (1516 to 1513). This corresponds to fields 2-4 in the pop up window, respectively. See Part 3, first case study, Edit, step 4 for a refresher on how to edit.
- Edit Reply 8
Now to edit the reply itself. It's important to understand that one thing we can't do yet in ME3 is add new audio to dialogues. Any new audio must replace existing audio. Since we don't want to cut any lines, that means we can't add new audio for the new reply. Instead, we must use an existing line within this same dialogue. Despite it conveying a relationship integer increase, the vanilla AGREE response from Shepard doesn't sound flirty at all, so it will work well. We also need to be attentive to camera shots and model positions as determined by the ExportID field. This was something we didn't have to worry about in first case study because it was an ambient dialogue. Since this is a cutscene we need to account for that, as well.
To implement these changes, expand R8 on the Reply List tab. All fields except for the Entry List and the State Transition should be edited to be identical to R7. Doing this involves changing the EReplyType which is something we haven't edited yet. This is a bit similar to EReplyCategory, but are 3 groups: Reply_Standard (spoken line), Reply_Autocontinue (no spoken line), and Reply_Dialogend (end of dialogue). Like EReplyCategory, EReplyType is edited via its Name List integer, which is 1519 in our PCC. In addition:
- We also have to change R8's entry list. In other words, Sam's response. We don't want the "cozy" flirt. Instead, we'll re-point to her "I'm not complaining" line, which is E10. Follow the procedure in Part 2, second method.
- We can also implement a new bool that indicates if FemShep did NOT take the flirt. Below you can see I've created ST 7604. It triggers bool 26504 set to TRUE. If you do something like this, remember to add the same ST to the DISAGREE option (R9), since that choice also means the player did not take the flirt. All together, these edits will look like this:
- Edit Entry 9
Since we changed a reply in Reply List, we have to make one small tweak to one of Sam's entries to make sure the conversation doesn't get stuck before we're finished. Before saving your changes, edit E9's reply list so it looks like this:
- Edit TLK
Final step for the dialogue is to edit the TLK; see Part2, first method for details. We need to add the new DW text for our platonic AGREE. We could also change the "Yep" text for the DISAGREE choice since "Yep" sounds an awful lot like Shep actually agreeing with Sam's comment. Doing so would make our 3 options: "You'll be okay" (friendly), "It gets better" (agree), and "Could be worse" (disagree).
<string> <id>640165</id> <position>4</position> <data>Could be worse.</data> </string> <string> <id>900000</id> <position>10</position> <data>It gets better.</data> </string>
That's it! In game, our edits will look like the video here. Note that we left the Major Decision/Default Action for R9 in place. While we could have changed it to our new platonic agree, there's very little chance a player who uses Action Mode would be installing an RP mod like ThaneMOD or BackOff. So, we saved a little bit of work by leaving it in place.
This example was a pretty moderate-level edit. We relocated an existing DW option and learned about reply categories and types, added a new option to the DW, did a little re-pointing with entries and replies, learned how to research and create new state transitions, changed a conditional reference, and edited some camera references (ExportID and CameraIntimacy).