Tutorial: Adding a Datapad and Message to Mass Effect 3 - ME3Tweaks/LegendaryExplorer GitHub Wiki

TOOLS

• ME3Tweaks Mod Manager (nexusmods.com) • ME3Explorer ME3Tweaks Fork (from Mod Manager’s Tools menu) • Clean copy of the game (with mods I want it to be compatible) o NEVER MOD WITH ALOT INSTALLED • A new DLC Mod setup. • ASI Tools (from mod manager’s Mod Management menu -> ASI Mod Manager) o Install AutoTOC ASI v2 by SirCxytyx o Install ME3 Logger – Truncating by Heff/Erik JS/Mgamerz • ME3Explorer’s Asset Database with a generated database.

ME3Explorer use the nightly if you are an advanced modder or plan to frequently mod. Otherwise stable is fine for everything in this tutorial. ASI Tools sit in the background when the game is running. AutoTOC ensures the games tables of content (TOC) are up to date (otherwise the file will crash on load). ME3 Logger is very useful if there are crashes, often it will show an error message.

Make sure ALOT is not installed otherwise the mod will break any other players game, or yours if you ever reinstall.

DESIGN

Decide on what you want to do. In this case we want a very simple datapad to appear in starboard observation if Kaidan is around and is romanced. It is important to think about when and why this is around and find a pcc file that suits. Be as accurate as possible, otherwise you add things into memory that are not needed. I want this in Starboard Observation on the Normandy, so use BioD_Nor_350StarboardObs.pcc.

I can check which major mods use this file – in this case I want my mod to be dependent on EGM so I will use its copy of this file (with permission). If I want compatibility then I need to create 2 copies, one from EGM and one without and ask users to decide which version to install.

TLK EDITING

We want to add our text for our point of interest. Open TLK Editor, and then the TLK file in your new mod folder. A tlk is a TalkTable. This file holds all the text for the game. The language is indicated by the filename suffix. _INT is English (International). Add a new line. Remember to save the line and then the file. You line needs to be above the Male/Female numbers.

LOOKING IN THE FILE

Open BioD_Nor_350StarboardObs in Package Editor (just double click in windows).

A pcc can contain 3 types of objects: Assets, Level and Code. ASSETS: These contain assets such as meshes, textures, sounds and animations that are used in the game. They are loaded into memory and used by the level to do things. LEVEL: This contains things that happen in a level: Actors, Sequences, World Settings. This controls what the player sees and how the world interacts with him. CODE: Contains programming code that determines how things happen. Most is loaded in the Engine (Unreal) and SFXGame (Bioware custom) files which load at start-up. The imports pull in this code so it can be used by this file.

ASSET DATABASE Open Asset Database and make sure you have generated a database for ME3 (it should take 5-10 minutes on an SSD). The database shows all the assets in the game.

We want to add a datapad so we go to the database, mesh tab, and search for that. As the datapad will only be used statically (not animated) we just want a static mesh rather than a skeletal one.

On the right-hand side shows all the files that have this asset. There is one golden rule here: ALWAYS COPY MESH & MATERIAL ASSETS FROM NON-DLC FILES

So we need a file that is in BIOGame (the base folder). Right click BioA_CitHub_AfterLife and Open Usage.

ADDING THE ASSET

This will open another package editor with that asset, with that asset. You want to drag and drop that entire package (so BioApl_Dec_DataPad01) to the file we are editing. Drag it onto the name of the file at the top.

When dragging assets press “Clone All References”. This will add all the information you need to use the assets, including code imports and other textures or references. You should now see the assets have copied in along with all the needed information and links.

A mesh is a just a 3 dimensional mathematic shape, it is not visible or really useable on its own. Textures wrap around the shape to give it form and color. Materials link textures to meshes. A material might be opaque like the textures around the edge of the pad, or a special material that is holographic, like the material that controls the screen of the datapad.

ADDING AN ACTOR

Having a mesh in memory doesn’t mean it will appear in the game. You now need an actor to use the mesh. A level is like a stage or tv set, actors appear in whatever you dress them. There are lots of different actors. As we want a static item which is not animated, but we might want to hide it (if Kaidan isn’t romanced) we want an InterpActor.

A good interpactor to copy is in BioD_Nor_350Geth. This time we want to drag and drop it on the level. The important thing to note is: WHEN COPYING ACTORS WE (USUALLY) ONLY WANT TO CLONE (NOT ALL REFERENCES)

You will get a relink failure. That is expected. Look at the InterpActors StaticMeshComponent with the Interpreter tab. The link to the asset is called StaticMesh. Change the Object property to 93 (the datapad mesh). Save the file in your mod directory and load ME3.

POSITIONING AN ACTOR

Go to the Starboard Observation Lounge. Make a save. Open the console and type “ShowDebug”. This will show the position of Shepard. Copy the location to the X, Y, Z.

Set the rotation to 0,0,0 for now. The drawscale should be 1,1,1.

Save and reload. You might notice a slight pause in me3explorer and ME3. This is the autotoc system updating internal tables. It only does this once. You should see a datapad where Shepard was standing.

Now I want the datapad on the sofa. So I am going to use the debugcamera. Type toggledebugcamera in the console.

Position the white marker to where you want the actor. Copy the HitLoc to the actor’s location. Now you need to restart ME3.

Now you can finesse the position. Use toggleflycam to zoom onto the pad to check it is not clipping. Save every time you change and reload to view until you are happy.

ADDING THE POINT OF INTEREST

Point of interests are the red circles that the player can interact with. We need a SFXPointOfInterest actor to do this. Find one and clone it into the Level the same as the interpactor. Change the location to the same as the interpactor. Open TLK Editor and load BIOGame\BIOGame_INT.TLK

Search for “Datapad”. You will find it at 252962. Add that number for the m_srGameName. Make sure m_bTargetable is set to true. Now click “Add Property”. Click “SFXSelectionModule” and m_TargetTipText. Pick “TargetTipText_Examine”.

You can now see the POI and the “Datapad” and “Examine”. But clicking doesn’t do anything. So we need a sequence. From PackageEditor go File -> Open In… -> Sequence Editor.

SEQUENCING THE ACTION

Sequences control actions via flow charts. All sequences start with an event and result in actions. Let’s start with an event for when the poi is used. Click on the Sequence Object Toolbox, then the Events tab, find SeqEvent_Used. Double click it and the event will appear in the box . Click it and add a property called “Originator”. Link the originator to our POI actor. When the poi is clicked this event will be fired. We want a message to pop-up so we add next an Action called ShowMessage. Drag the Used node to the In link on the new item. The links along the bottom are variables. They only take certain types. Add 2 variables both should be “BioSeqVar_StrRef”. Click one add m_srValue property, and change that to our StrRef that we added to the tlk. The second set to “Close” strref 247369.

Attach the variables like below:

And test…

TIMING

There is one final issue. We only want this datapad if a certain condition is valid – Kaidan and Shepard are in a relationship. Firstly we need to find the plot for that. Open Plot Database Search for Kaidan and you will find the Locked-in romance is Boolean 19723.

Let’s create a sequence. We start with a levelislive event. This runs when the file is loaded. We then set a CompareBool which checks the 19723 state bool held in a BioSeqVar_PlotManagerBool. Depending on whether there is a relationship we can set whether the POI is targetable and the datapad is hidden.