Morrowind modding for smarties, part 14, Horror Show: When Masters and Identifiers change
PREREQUISITES:
 
1. you know/care about what problems may happen trying to update mods having TR_Mainland.esm as master to the new version, with TR changing identifiers, and you are looking for a way to fix problems without redoing a big part of the dependant mod(s) changes to references (e.g. moved/added/deleted windows, rocks, plants...) in Construction Set
2. you know how to use Mash updaters (see also here) from a Mash 84 source version/with installed Python 2.7x setup.
 
In this case, you may be interested on how to make mash updaters compatible with TR changed identifiers, as changed identifiers are something standard Mash updaters code can't handle.
 
It is a complex procedure, but if you are going to have a lot of mods with a lot of references broken, IMO still better try this than fixing things in Construction Set.
  
Make a backup copy of Mopy\mosh.py somewhere (or, better, make a backup of your entire Morrowind folder somewhere).
 
Change mosh.py this way (or get it from the provided Mopy folder):
 
     def getObjectMaps(self,toMod):
        """Return a dictionary of ObjectMaps with fromMod key for toMod."""
        if self.objectMaps == None: self.loadObjectMaps()
        subset = {}
#begin abot +++ for TR identifiers change
        fromOldIdToNewIdFile = 'Translation.txt' # TR id changes file
        fileName = "..\\Data Files\\" + fromOldIdToNewIdFile  # look for it in Data Files first
        remap = os.path.exists(fileName)
        if not remap:
            fileName = "..\\" + fromOldIdToNewIdFile # then in Morrowind main folder
            remap = os.path.exists(fileName)
        if remap:
            try:
                fromIdToId = {}
                with open(fileName, 'r') as f:
                    for line in f:
                        if not line.startswith('#'): # skip comment lines
                            vk = line.strip().split(':')
                            if len(vk) == 2: # verify we got a couple
                                k, v = vk[0],vk[1]
                                fromIdToId[k] = v
                if f: f.close()
            except EOFError:
                remap = false
                if f: f.close()
#end abot +++
        for key in self.objectMaps.keys():
            if key[1] == toMod:
                subset[key[0]] = self.objectMaps[key] # standard Mash identifier remapping
#begin abot +++ for TR identifiers change
                if remap:
                    if key[0] in fromIdToId:
                        subset[fromIdToId[key[0]]] = self.objectMaps[key] # try mapping also the new changed identifier
#end abot +++
        return subset
 
Get latest Translation.txt and Tamriel_Data_Legacy.esm from Tamriel Data download package (ver 4), and latest TR_Mainland release (1709).
 
As an alternative way to generate the Tamriel_Data_Legacy.esm, you could want to make a do-it-yourself version, adding old object identifiers back to the new Tamriel_Data.esm. 

A way to do this is use the provided _oldTRids.bat, _oldTRids.pl files to generate a _oldTRids.esp
copying them from your OLD Tamriel_Data.esm, TR_Mainland.esm based on the latest Translation.txt file, then merge the new Tamriel_Data.esm with _oldTRids.esp in Construction Set.
 
Regardless of how you get your Tamriel_Data_Legacy.esm, here are the next steps:
 
Copy Translation.txt and TR_FilePatcher_v2.jar to your Data Files folder
 
Backups are always good, so:
Duplicate old Tamriel_Data.esm to e.g. Tamriel_Data1612.esm
Duplicate old TR_Mainland.esm to e.g. TR_Mainland1612.esm
 
Copy Tamriel_Data_Legacy.esm to your Data Files folder as Tamriel_DatL.esm
Copy the new version of Tamriel_Data.esm to to your Data Files folder as TamrielDatN.esm
Copy the new version of TR_Mainland.esm to to your Data Files folder as TR_MainlanN.esm
 
Apply Mash updaters to Tamriel_DatL.esm using Tamriel_Data.esm as old version
Change masters for TR_MainlanN.esm from Tamriel_Data.esm to Tamriel_DatL.esm
Apply Mash updaters to TR_MainlanN.esm using TR_Mainland (the 1612 version) as old version.
For each remaining fooTR.esp mod having old TR_Mainland.esm as master:
Duplicate fooTR.esp to fooTR1709.esp
Change fooTR1709.esp masters from Tamriel_Data.esm, TR_Mainland.esm to Tamriel_DatL.esm, TR_MainlanN.esm
Apply Mash updaters to fooTR1709.esp using fooTR.esp as old version (hopefully not needed, but better safe than sorry)
 
Apply Mash updaters to Tamriel_DatN.esm using Tamriel_DatL.esm as old version
 
Change masters for TR_MainlanN.esm from Tamriel_DatL.esm to Tamriel_DatN.esm
Apply Mash updaters to TR_MainlanN.esm using TR_Mainland (the 1612 version) as old version
 
For EACH remaining fooTR.esp mod having old TR_Mainland.esm as master:
Duplicate fooTR.esp to fooTR1709.esp
Change fooTR1709.esp masters from Tamriel_Data.esm, TR_Mainland.esm to Tamriel_DataL.esm,TR_MainlanN.esm
Apply Mash updaters to fooTR1709.esp using fooTR.esp as old version (hopefully not needed, but better safe than sorry)
 
When you are sure ALL mods having old TR_Mainland.esm as master have been processed:

For EACH fooTR.ess save you want to keep using having old TR_Mainland.esm as master:
Duplicate fooTR.ess to fooTR1709.ess
For each remaining fooTR.esp master used in fooTR1709.ess save, change the masters to the new 1709 versions, using Tamriel_DataL.esm,TR_MainlanN.esm as new TR masters
 
For EACH fooTR1709.ess save you want to keep using having Tamriel_DataL.esm as master:
change the master from Tamriel_DataL.esm to Tamriel_DataN.esm

When you are sure ALL desired saves having old TR_Mainland.esm as master have been processed, and you don't need to use the old version in some Mash updater any more:
 
Duplicate Tamriel_DatN.esm over old Tamriel_Data.esm, empty/remove mash updaters from Tamriel_Data.esm if present
Duplicate TR_MainlanN.esm over old TR_Mainland.esm, empty/remove mash updaters from TR_Mainland.esm if present
 
For each remaining fooTR1709.esp mod having old TR_MainlanN.esm as master:
Change fooTR1709.esp masters from Tamriel_DatN.esm, TR_MainlanN.esm to (the now finally updated with standard name) Tamriel_Data.esm,TR_Mainland.esm
 
When you are sure ALL mods having old TR_MainlanN.esm as master have been processed:
For each remaining fooTR1709.esp master used in fooTR1709.ess saves, change Tamriel_DatN.esm,TR_MainlanN.esm to Tamriel_Data.esm,TR_Mainland.esm
 
Then you can use the TR_FilePatcher_v2.jar if needed (I suggest you make a bat text file containing e.g.
java -Xmx1024m -jar TR_FilePatcher_v2.jar
so it will try to use more memory than default, as the program is quite slow when processing big/several files
 
[EDIT]hopefully most typos, added a more detailed step

 I know I'm writing this mostly for myself, hard to remember steps between TR releases


  Share | |