Creating ME1 DLC mods with custom textures - ME3Tweaks/LegendaryExplorer GitHub Wiki

DLC mods for Mass Effect (1) are relatively new (at the time of writing, October 2019). There are still a lot of unknowns and the tools to support development of these mods is still pretty sparse.

To create a DLC mod for ME1 you can use ME3Tweaks Mod Manager (version 6 or above). In the tools menu, when in Developer mode, you can generate a starter kit mod that will make a working blank DLC mod. You can then place your files into this DLC mod. There is no dedicated folder structure as the game matches on filenames, so feel free to put files where you want as long as they are under the CookedPC folder. Movies cannot be overridden by DLC mods in ME1 due to how the native code for picking which movie in an ambiguous package lookup (duplicate names found in game directories) was designed.

To create custom textures for your DLC mods, we currently don't have tools for this feature. This will be coming in a release of ME3Explorer post 5.0.

While you won't be able to do this in 4.1 or below, the way texture replacements for ME1 will likely take place (for DLC mods) will likely look something like this. A good chunk of this will likely be automated:

  • You create a UPK file for ME1 using create new package (or we will create one for you like we do with ME2/ME3 TFCs)
  • You name file a specific way that matches our naming scheme that allows it to trigger the ME1-specific texture cache system we will have
  • You add the textures (and only the textures!) as root-level exports in this package file.
  • In files that reference these textures, the package name IN THE FILE YOU WANT TO USE THE TEXTURE IN must have the same texture export as the master, except the higher mips must be external types. Lower mips will stay in the local package (64 and below, if I recall).
  • ME3Explorer will link the textures via offsets
  • ME3Explorer will recalculate the offsets for all packages linking to this file, as the offsets will change as exports are added. This is a crucial step as any invalid pointers will cause ME1 to crash. Essentially, any time you modify textures, we will have to recook the textures that are specific to your mod.

ME1 textures are stored in a similar fashion to ME2/3. There are Texture2D (and other) exports that say they are stored externally. However, ME2/3 have a file with plain offsets in it, where ME1 stores them in package files as exports. These package files are known in the texture modding scene as "masters". These files are where full-resolution mips are stored. In the base game, you will find these under CookedPC\Packages\Textures. Master-texture

This means that offsets are much easier to break because extending the name table, export table, import table, etc and then compacting the file (making sure the tables are in order) will move all of the export data. ME3Explorer file saving will compact the file so it does not contain old inaccessible data.

"Slave" textures are textures that link to the master texture. Linking is done through the parent package name. An example slave texture: Slave texture 1 As you can see, there is no Texture File Cache property (ME1 does not have these). The package export object that contains this export (BIOA_GXM10_T) is the filename that the same-named export will reside in.

slave texture 2 As you can see, the texture is stored as extLZO. This means it is in an external file - the one I showed above with pccLZO textures.

While we have not done research into this fully, the data is accessed by offset, which points directly to where it also resides in the primary file, rather than a large continuous set of data (like a TFC). It may be possible to use a UPK file (as long as the data is valid) like a TFC, however until more research is done this is not an avenue we are pursuing. It will require coordination of many developers.

We will be exploring these concepts after shipment and development cooldown on ME3Explorer 5.0.