== Contents ===================================================================
{{CONTENTS=2}}
== Features ===============================================================
* **Manage Mod Files and Load List**
* Select load mods from a list that can be sorted by: File Name, Modification
date, Size, Mod Author, Load Order, Selection State and file type (Esm/Esp).
* Select mods by loads lists which you define. E.g., define a Bethesda Mods
list, or an LGNPC or Astarsis Heads list.
* Hide rarely used mods. (Yes, there's an Unhide command too!)
* Delete and Duplicate Mods.
* Edit file name, modification date, author, description and master list.
* Automatically reset modification dates after file has been modified. (This
substantially reduces doubling problems.)
* **Manage Save Games**
* View a list of your save games sorted by: File Name, Save Name, Player Name,
Current Cell, Load Status (see below).
* Delete, Duplicate and Hide Save Games.
* Edit file name, Save Name and master list.
* **Reduce/Eliminate Doubling**
* See potential doubling before it happens. (Status boxes in save game and
master lists.)
* Automatically reset modification dates.
* Update save game files to handle changes to the masters that it depends
on and to the current load list.
* Repair References in existing files.
* **Browse Mod Documents**
* Browse documents for all mods with the [[#| Doc Browser]].
* **Run Additional Commands**
* View File Statistics. See the number and size of record types in any file.
* **Create Your Own Utilities**
* Wrye Mash provides libraries and an interface that make it (relatively)
easy to define new save and file munching utilities and make them through
the Wrye Mash interface.
* You can also define your own command line utilities for munching on data
files. (The result is not as pretty as adding your utility to Wrye Mash,
but it's a lot easier to do, and allows you to ignore the roughly twice
as complex interface code.)
* **Modify Anything**
* Because the entire source code is available, and because no special tools
are required, you can modify whatever you like.
* Of course, making modifications that don't break the program requires care,
but some things are relatively easy and safe to modify
* Context Menu structure.
* Status icons and hilight colors.
* Toolbar/launcher buttons.
== Installation ===============================================================
=== Get and Install
* Wrye Mash is written in [[http://www.python.org/doc/Summary.html|python]] and
uses the [[http://wxpython.org/what.php|wxPython GUI library]] to provide the
interface. So before you can run Wrye Mash, you'll need to download both of these.
* __Download and Install Python 2.5__
. Download link: [[http://www.python.org/ftp/python/2.5/python-2.5.msi|Python 2.5]]
* __Download and Install wxPython 2.8.0.1 ANSI__
. Download link: [[http://prdownloads.sourceforge.net/wxpython/wxPython2.8-win32-
ansi-2.8.0.1-py25.exe|wxPython 2.8.0.1 ANSI for python 2.5]].
* __Unzip Wrye Mash XX.zip:__
. Unzip the files ~~into your Morrowind installation directory.~~ If you've done
this correctly, you'll find mash.py and other mash files under Morrowind\Mopy.
== Usage ======================================================================
=== Morrowind Install Directory
* If you have a non-standard Morrowind Install directory, then the first time
you start, Mash will ask for the correct location. In subsequent startups,
Mash will remember the new directory and go directly to it without asking you.
=== Overview
* The interface is divided into two tabs: **Mods and Saves.** Each of these
is in turn divided into a list and a details view.
* Commands are accessed through **context menus** which are invoked by
right-clicking on either an item or a column heading. The image above shows the
context menu for the mod list column header.
* There is also a **Morrowind Launch** button at the left side of the status bar.
Bain has been backported from Wrye Bash -- hence the name "Bain", aka Bash
Installers. (Yes, I probably should call it "Main", but that would be too boring.)
If you're familiar with Timeslip's OBMM or MWMM, then Bain is fairly similar, but
has some substantial advantages (and some disadvantages) compared to them. For a
comparison, see [[http://www.uesp.net/wiki/Tes4Mod:Wrye_Bash/Bash_vs._OBMM|Bash vs.
OBMM]].
=== Overview
Bain will search for and display packages from the (new) __Morrowind\Installers__
directory. Mods (either archives or projects) can then be installed or uninstalled,
and their status can be reviewed in the details pane on the right.
* __Checkmarks__
* Installed packages will be marked with a "+".
* __Icon Colors__
. Icon colors indicate the degree to which the package is synchronized with the
Morrowind\Data Files directory:
* Green: Package is fully synced. Note that a package can be green even if it is
not "Active". E.g. if you have two identical packages and one is (fully) installed,
then it will be green and checked. But the identical package will also be green --
since it too is fully synced with the data directory.
* Red: Some files in the package are missing from the data directory.
* Orange: All package files are present in the data directory, but some esps/esms
are not identical. (E.g. another package installed an alternative version of that
file, or the user modified the file after installation.)
* Yellow: All package files are present in the data directory, but some resource
files are not identical. (E.g. another package installed an alternative version of
that file, or the user modified the file after installation.)
* White: This is relatively rare. It just means that the package is configured in
a way that it has no files to install. This can happen for complex packages where
none of the sub-packages are checked.
* Grey: This indicates that the package has a structure that Bain does not
recognize, and so cannot install.
* Red X: The package is corrupt and/or incomplete. You'll likely see this for
packages that you are currently downloading into the Installers directory.
* __Icon Shape__
* Diamond: A [[#ProjectPackages|project]], i.e. a subdirectory in the Installers
directory.
* Square: A mod package archive. Note that only rar, 7z and zip formats are
supported.
* __Text Colors__
* Blue: Indicates a package with sub-packages. The files to be installed, and
thus the install state of the package will depend on which sub-packages you have
activated.
* Grey: This indicates that the package has a structure that Bain does not
recognize, and so, cannot install.
* __Text Background__
* Orange: Indicates that the install is dirty. This will occur for packages for
which the configuration has been altered (either by altering active sub-packages
and esmps, or by altering the package itself). This can be repaired by running
Anneal or Anneal All.
* Yellow: Indicates that the package has "underrides" i.e. some of its installed
files ~~should~~ be overridden by higher order packages. This may happen after
reordering mods that have already been installed. It can be repaired by running
Anneal or Anneal All.
* Grey: Indicates that some files present in the package will **not** be
installed. This is usually due to a complex structure that is only partially
handled by Bain, but can also be due to having files that Bain refuses to install
(exe's, dlls, sub-archives, etc.)
=== Ordering
Bain assigns an install order to all packages. When packages are installed and/or
uninstalled, the order is considered in determining which files will actually be
installed/uninstalled.
* __General__
* Install order is shown the table in the "Order" column.
* All packages are moved to just before the ==Last== marker when Bain first
encounteres them.
* Order can be changed by right clicking on a package (or group of selected
packages) and selecting "Move To". Just enter the position to which the packages
should be moved. If you're moving many packages at once, they'll keep their
relative order, with the "oldest" moving to the specified position, and the others
following after it.
* __Last___
* Last is a special marker entry that Bain automatically adds to the archive
list. It corresponds to the position at which any newly encountered packages are
inserted. if you want specific packages (e.g. your personal projects) to always
have high order, then move them to ~~after~~ the ==Last== marker.
* __Install Order__
* When you install a package, then the order of higher packages will be
respected. I.e. if the package being installed conflicts with a higher order
package that's already active, then it **won't overwrite** the files from the
higher package. Rather, only the files that don't conflict with higher packages
will be installed. (However, if you want to overwrite later packages, then you can
use the "Install Last" command, which will move the selected packages to the end of
the list and then install them.)
* __Uninstall Order__
* Uninstalling a package will also respect order. Specifically, files that are
owned by higher order packages will be left in place. More than that, files that
~~aren't~~ owned by the package being uninstalled will also be left in place.
(Hence manually edited mods and files will be left in place.)
* Also, if a lower order package installed an identical version of a given file,
then that file will not be removed. (I.e. ownership will cede to the lower order
file.)
* By the way, you can "uninstall" packages that aren't active. This is useful for
cleaning out the files from packages that you have previously installed.
* __Auto-Annealing__
* When you uninstall packages, Bain will also attempt to "anneal" the file system
by restoring any files from active packages that were previously blocked by the
packages being uninstalled. If you prefer that Bain ~~not~~ auto-anneal files, then
you can deactivate "Auto-Anneal" from the context menu of the column header.
=== Statistics
* Displays statistics for the file's record types.
=== Updaters
* See [[#| Doubling]].
=== Profiles
* You can now define several different savegame profiles and easily switch between
them. Each ~~profile~~ consists of a set of savegames and a Morrowind.ini file.
* Use the Profile menu (found on the column header context menu) to edit and switch
between profiles.
* If you wish to move savegame files between profiles:
* Load the profile currently containing the savegames to be moved.
* Select the files, then right click on the slected files and select ~~File: Move
To...~~ Use the directory dialog to specify to select a destination profile (i.e.,
one of the subdirectories of Saves\Mash\Hidden).
=== Remove
* There are several commands for removing different types of references and other
data from save files.
* **Debris Cells**
* This removes all references in cells that have been visited, but are not
supported by the current set of masters. Typically this is used to cleanup exterior
cells that were added by mods that have since been removed.
* Note that if you have intentionally placed objects into such cells (e.g., a
travelling ship), then those objects **will be lost!**
* **Spawned Creatures**
* This removes all lvcr (leveled creature) references from the file.
* In other words, it resets all spawn points.
* **Warning:** Some of the major creature/npc mods create herds of creatures
and/or groups of NPCs. Typically only one of the npcs/creatures in these groups are
associated with the spawn point. So resetting the spawn point only removes that
single npc/creature. To fully clear npc/creature groups use a object list remover
(see below).
* For a savegame, this has the effect of resetting all spawn points.
* **Removers (Object Lists)**
* Removers allow you to **remove all instances of arbitrary lists of objects from
the game.** The only instances not removed will be those instances that reside in
cells that match the list of "Safe Cells".
* **Warning! If the remover that you use includes standard containers, you should
be sure that your safe cells list includes you stash cells -- e.g., your
stronghold, mansion, etc.**
* **Setting up Removers:**
* First, select "Edit Safe Cells..." and make sure that your stash cells, e.g.,
stronghold, mansion, etc. are included in it. Note that a safe cell named "Balmora"
would protect all cells whose name begins in "Balmora".
* Next, select "Edit Removers..." and select one or more of the files in
Mopy\Data. This will add that(those) file(s) to the list of removers. Close the
edit box when done. The new remover will now appear on the remover menu.
* **Using a remover:**
* Use the Remove: [Name of Remover] command on the savegame.
* **Remover Files**
* You can easily create your own remover file...
* Remover files are just plain text files, with each line listing an object to
be removed. Blank lines and any text after a '#' character are ignored.
* Objects to be removed should be first on the line and surrounded by quotes.
Anything after that will be ignored.
* Hint: if you use the export feature in TESCS, the resulting file will be in
the right format to use as a remover. But be sure to edit it first! There are many
unique and scripted objects which should not be reset in the game.
=== Review
* This is something of a miscellaneous function of uncertain use. Perhaps it will
grow later. For now...
* **Detached Global Scripts**
* This a list of global scripts that have a reference file with an invalid
reference. This can happen normally, even with startup scripts, or it can happen as
the result of mods being added or removed.
* Most global scripts operate independently of references, but a few operate
within the context of specific references (i.e., objects in the world). If
Morrowind loses track of this reference, then it assigns an invalid reference to
the script. So a script presence on this list ~~may~~ indicate problem.
=== Statistics
* Displays statistics for the file's record types.
=== Notes
* If you rename a mod in the mods tab, Mash will move the document association to
the new name.
* Similarly, if you copy a mod, the new copy will be associated with the same
document.
* Documents can be stored in different directories.
* If you ~~delete~~ a mod, then Mash will forget about its document (but won't
delete it). However, if you ~~Hide~~ a mod, Mash will remember the document, and
you'll still be able to select it from the Doc Browser's mod name combo box.
=== Suggestions
* You may want to move your docs from the Data Files directory to a new Data
Files\Docs directory. This will reduce clutter somewhat and make documents easier
to find.
== Doubling ===================================================================
=== Doubling Theory
* **Full Explanation**
* What follows is an extremely abridged summary of the long answer given in
[[http://wrye.ufrealms.net/Wrye%20Mash.html" | Wrye Matching]].
* **Background: Reference Ids**
* So, you start Morrowind, load your last saved game, and find yourself in
Balmora. There on the bridge is the same MCA character. There at your feet is the
potion that you just dropped. Over there is the door that you opened. And it occurs
to you... How does Morrowind keep track of all this stuff? How does it know
~~this~~ potion is supposed to be here? How does it know ~~that~~ door needs to be
open?
* The answer is **reference ids** -- every object that you see in the game world
has an unique numerical id attached to it, defining it. When you load a set of mods
(as you do when Morrowind starts up), Morrowind first recreates the world in a
"virgin" (i.e. unchanged state). Then, when you load a savegame, it reapplies all
the changes that you made -- killing bandits, filling quests, opening doors, moving
NPCs, etc. It makes those changes by matching the reference ids stored in the
savegame against the reference ids as calculated for the virgin gameworld (i.e. for
the the set of loaded mods).
* Unfortunately this matching/updating process can go wrong sometimes.
**Doubling** is the most obvious such problem. But other problems can happen, e.g.,
changes meant for a bar door might be applied to an NPC. These mismatches might be
invisible, might cause weird behavior, or might cause CTDs. As people have found in
the past, if enough of them pile up (e.g., after repeatedly changing the mod list),
you ~~will~~ get corrupted unplayable games.
* Note that **all** of these problems are caused by mismatches between reference
ids! E.g. from your loaded mod list, Morrowind determines that the referenceid
number for that door should be 345672-05, but your savegame thinks that the
reference id for the door should be 345672-07, or maybe 345674-05. So the secret to
avoiding doubling, etc. is simply preventing such mismatches. Well, easier said
then done, unfortunately!
* So, a little more background... Each reference id is actually two numbers: the
**ObjectIndex** and the **ModIndex.** For each mod, the objectindex is unique,
i.e., there's only one "1292" objectindex in each mod. The modindex, on the other
hand is simply the order of the source mod in the load list. Morrowind.esm loads
first, so it has modindex == 1. Tribunal and Bloodmoon if loaded, are usually
numbers 2 and 3 respectively. Okay, but how about objects that don't really belong
to a particular mod? E.g. an arrow that you bought and dropped on the ground?
Simple enough, these objects belong to the savegame itself, and are given the
special modindex of 0.
* That's the basic story. There are a lot of exceptions and complications (e.g.,
spawnpoints), but that's the basics, so let's go on...
* **Reasons for Reference Mismatching**
* If you change the mod load order -- either by adding new mods that want to load
before your current mod, or by resaving a mod (which changes its modification date,
and thus load order), then the ModIndex numbers will be mismatched.
* Also, if a mod has had new references added, then many of its objectIndexes of
existing references will be changed. This is because TESCS completely renumbers all
references when the mod is saved.
* There are quite a few technicalities and qualifications here, but that's the
gist of it.
* **Morrowind Repair Work**
* If the load order changes, Morrowind tries to correct ModIndex numbers. If
only the load order has changed (i.e., exactly the same files with the same names
are present), then it seems to do a pretty good job of adapting.
* But if new mods are added or if old mods are given new names, it gets confused
and its repair often fails.
* Note that the effect of this failure may not be immediately apparent, and the
effects may oscillate under certain conditions -- e.g., doors may disappear and
reappear with each new load change.
* **Doubling Prevention/Repair**
* So to prevent/fix doubling, you need to do several things:
* Prevent modification date related mod disordering. **(See [[#| Load Order
Maintenance]].)**
* Adjust ModIndex numbers to account for new load ordering. (I.e. complete the
job that Morrowind does partially.) **(See [[#| Master List Updating]].)**
* Repair existing damaged games files by removing existing corrupted
records. **(See [[#| Master List Updating]].)**
* Adjust for changes to objectIndex numbering from mod modification. **(See
[[#| Mod Updating]].)**
== Mish =======================================================================
Mish is a command line interface to the features of mash. At the moment
[5/30/2005], there are a couple of features that you can access from it that you
can't access from the GUI. Also, with a bit of python coding you can do some pretty
nice useful mangling of tes3 files.
== Extending ==================================================================
=== Internationalization
Mash now supports localization for most? western languages (translation of program
strings to local language). It still probably does not support non-roman character
sets (Cyrillic, Arabic, Asian languages, etc.). Since you're looking here, I'm
assuming that you're trying to add translations for your language. Here's how:
* **Common Control Strings**
* I'm not sure if the common control strings (Save, Cancel, Okay) will translate
or not. If you're running Python 2.4, they probably won't. If you're running python
2.5, I hope they will, but I really don't know.
* **Custom Program Strings**
* Custom program strings are translated from lookup files that you'll find in the
<code>Mopy\local</code>. E.g., for English, it would be
<code>Mopy\locale\English.pkl</code>. (Of course, the program is already in
English, so this isn't needed.)
* These pkl files are automatically compiled from the corresponding txt files
(e.g., <code>Mopy\locale\English.txt</code>) as needed when Mash (or mish) starts
up. So, to update the program strings for your language all you have to do is edit
the txt file in a text editor adding translations for strings. Naturally, not
everyone needs to do this -- once someone does the txt files for a language, they
can redistribute them to other people -- including me, so that I can include them
in next Mash release.
* If the text file for your language doesn't exist yet, open a DOS shell, chdir
to the Mopy directory and type <code>python mish.py dumpTranslator</code>. This
will create a new text language file for you in the locale directory (e.g.,
<code>Mopy\locale\NEWEnglish.txt</code>). If you already have some strings
translated, this new file should contain all of them. And if mash has added new
strings to be translated, they will appear.
* So to create the strings, all you have to do is edit the text file to add the
translations, and save the file with the leading "NEW" stripped off.
* **Translation Tips**
* Here's part of the a translator file.
<pre>
=== masher.py, 4605
Default profile cannot be removed.
>>>>
=== Extras
* These are miscellaneous files used to assist Mash functions, etc.
* **ESTemplate.ini**
* A template file for use with Enchanted Editor.
* **Mashed Lists.esp**
* Template file for Mash's leveled list merge and resequence feature.
* Copy this to your data files directory.
* **NOM MiniRes.esp**
* This file is a mini resource esp for NOM (Necesssities of Morrowind) that is
used by the NOM Ref Replacer.
* Although this file should never be selected as a load mod, it needs to be
copied to your Data Files directory in order for the NOM Ref Replacer to work. (The
Ref Replacer will, as necessary, copy object definitions out of this file and into
the mod being modified.)
* **XXX ====.esp**
* When you have hundreds of esps, it can become difficult to find the esp that
you're looking for, especially in TESCS. One approach is to chronologically reorder
the esps by type. E.g., all of my Race mods are set to have their modification date
in the month of July 2001.
* If you done something like this, then you can use something like these spacer
esps to help find those mods in your mod listing.
* Usage: Copy these esps to your Data Files directory, set their dates as desired
and then set the dates of your various mods so that they group as desired.
* Note that ordering is important for many mods. Reversing the order of some mods
may cause problems.
== Versions ===================================================================
{{CONTENTS=0}}
=== 84 [2/5/2009]
* [[#|Installers Tab]]: Fix a bug with espm filtering of aliased mods.
* Baltization: Switch some code to balt.
* Add Screens tab.
=== 83 [2/5/2009]
* Baltization: Switch some code to balt.
=== 82 [2/4/2009]
* Bugfix: Include new/updated icons.
* Baltization: Switch some code to balt.
=== 81 [2/4/2009]
* [[#|Installers Tab]] **Betaish!**
* Please see [[http://www.bethsoft.com/bgsforums/index.php?showtopic=952489|
discussion topic]].
=== 80 [12/24/2008]
* Minor code performance tweak.
* Script import no longer zeros out variable data. (Still need to recompile.)
* Fixed some "bash" stuff in the install instructions.
=== 79 [2/13/2008]
* Bash to Mash Retrofit.
* Update Doc Browser.
* Add autoquit button.
* Refactor bish
* Settings: 'wrye.mash' >> 'mash'
* Misc. Changes
* Changed dialog to export by topic.
* New: Export/Import Scripts
* Updated German translation by DWS.
{{CONTENTS=2}}
== Reuse and Credits ==========================================================
=== License
* None! Feel free to use/abuse the content as you like.
* But give me credit of course.
=== Credits/Thanks
* Every modder and utility developer in the Morrowind community stands on the
collective shoulders of everyone who preceded them, contributing time, talent,
and inspiration. So, thanks to all the past developers and folks in the
forums!
* The same holds true for Python and wxPython. Thanks to all of those folks
who provide such an incredible product for free.
* **A few folks in particular:**
* **Farren Hayden...** For Enchanted Editor and its templates. Without the
insights that I gained while using it, I wouldn't even have gotten started,
much less been able to get this far.
* **Beryllium...** For EE templates, bug reports and mucho appreciated feedback.
* **ManaUser...** For not stepping back when I asked programmers to
step forward. I probably wouldn't have tried this if he hadn't volunteered.
* **Argent...** For his java code and technical insights into Morrowind files.
* **Ref Removers**
* Dragon32
* Shasta Thorne
* **Translations**
* Abot
=== Contact
* The best way to reach me is through the Elder Scrolls Forums. Check the
forums, or PM me there (my id is "Wrye").
* If I'm not available (offline or working on other projects), then the
Elder Scrolls forums are the best place to go for help with this tool.
* However, python and wxPython specific questions should be directed to online
communities. Check [[http://python.org|python.org]] and [[http://wxpython.org|
wxpython.org]] for their community links.