= Wrye Mash ================================================================== === Latest Version: [[http://wrye.ufrealms.net | Wrye Morrowind]] === Discussion: [[http://www.elderscrolls.com/forums/index.php?showforum=12 | Elder Scrolls Forums]] == Contents =================================================================== {{CONTENTS=2}} == Quick Start ================================================================ **Do you find long docs scary?** Here's a quick guide to Mash's most popular features. === Maintain Your Load Order * You only have to do this once... * Go to Mods tab, right click on "File" column header and make sure that "Lock Times" is checked. * For more information, see **[[#| Load Order Maintenance]].** === Change Mod Load Order * Go to mods tab, and select the mod you want to reorder. * Edit the "Modified" date/time field to the date/time you want. * Click Save. === Merging Leveled Lists * Copy "Mashed Lists.esp" from the mopy\Extras folder to your Data Files folder. * Select the mods you want to load from the Mods tab. * Right click on "Mashed Lists.esp" in the Mods tab and select "Import: Merged Lists". * For more information, see **[[#|Import Merged Lists]].** === Repairing a Save Game * Go to the Saves tab and right click on the save game, then select "Repair All". * For more information, see **[[#| Repair Refs Command]].** === Adding/Removing Mods From a Save Game * Go to Mods tab and check the mods that you want to use. * Go to Saves tab and select the save game you want to play. * Right click on the top of the Masters List, and select "Sync to Load List". * Click "Save". The checkbox for the save game should turn purple. * For more information, see **[[#| Master List Updating]].** === Using an Updated Version of a Mod * **You only need to do this if the new version of the mod adds or removes references from the game!** * Put both new and old versions of the Mod in the Data Files directory. * Go to Mods tab, right click on the **new** mod and select "Updaters...". * Click on the "Add" button, select the old mod and click Open. * Close the Updaters dialog. * Go to the Saves tab, and select the save game that you want to update. * Right click on the top of the Masters List, and select "Update". * Right click on the old mod and select "Change To...". * Select the new mod in the file dialog and then click "Open". * The renamed master should turn bright green (instead of the usual pale green). * Click Save. * For more information, see **[[#| Mod Updating]].** === Tweak Morrowind.ini * Settings in Morrowind.ini control aspects of the game like light attenuation, weather lighting, moon size and appearance, etc. You can tweak Morrowind.ini by hand, or by applying mit files. * To apply an mit file... * Go to mods tab, right click on main column header and select "INI Tweaks...". This will bring up a file selection dialog. * Select one of the mit files from Morrowind\Data Files\Mits and click Open. This will apply the changes in the mit file to Morrowind.ini. === Manage Texture Replacers * **Setup** * Create a directory called "Replacers" in your Data Files directory. * Unpack/unzip the replacer package that you want to use into the Replacers directory. The name of the directory will the name of the replacer. * E.g., "E-Icons Blue Star", or "Redoran, Carnajo" or "Redoran, Lady Rae". * The replacer's directory structure can be one of two forms: * Just like the Data Files directory structure; * Replacers * Bob's Replacement Set * Icons (if you have icons) * Meshes (if you have meshes) * Textures (if you have textures) * Just the textures (for texture replacers only) * Replacers * E-Icons, Blue Star * dds files * Redoran, Lady Rae * dds files * Note that most texture replacement packs have the second form. * **Usage** * Go to Mods tab, right click on the main column header and select "Replacers..." -- this will bring up a checkbox list of the available replacers. * Checking a replacer will apply it. (Large replacer collections may take a while to apply.) * Unchecking a replacer will remove it. === Switch Between Save Profiles * Go to Saves tab and right click on column header, then go to Profiles menu. * Choose Edit... to add, rename, remove profiles. * Choose a profile to switch to it. Current savegames and Morrowind.ini will be archived, and the new profile's savegames and Morrowind.ini will be loaded. === General Advice * **Run Repair All** * Run Repair All on old save files -- this will often find problems to fix. * Run Repair All once in a while after editing Master lists. * **Use Duplicate** * Before making major changes to a save file, create a duplicate and make the changes on it. == 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 bash.py and other bash files under Morrowind\Mopy. === Alternative Python/wxPython ~~Only for gearheads and/or people who need/want to use a different version of python/wxPython for some reason...~~ * Both python and wxPython release new versions on regular basis. Many of the recent ones should work with Mash. Some of the older ones are known not to. If you want/need to use a different installation, then here are some alternatives: * **Most Recent Python/wxPython** . If you want to use the latest version of python and wxPython, get them from: [[http://www.python.org/download/|Python downloads]] and [[http://wxpython.org/download.php#binaries|wxPython downloads]]. When getting the wxPython download, be sure to get the **ANSI** version that **matches the version of python** you downloaded. (Note that Mash does **not** support the unicode version of wxWindows.) * **OR... Python 2.4/wxPython 2.5.3.1** . If you want to use the older well tested set of python and wxPython, download [[http://www.python.org/ftp/python/2.4.3/python-2.4.3.msi|Python 2.4.3]] and [[http://prdownloads.sourceforge.net/wxpython/wxPython2.5-win32-ansi-2.5.3.1-py24.exe|wxPython 2.5.3.1 ANSI for Python 2.4]]. Most development/testing of Mash is done with this set, however it's a little dated. === Starting Wrye Mash * **Double click** the "Wrye Mash for Python 2.4 (2.5)" shortcut in the Mopy directory. * If this doesn't work, see [[#|Non-Standard Morrowind/Python Directories]] or **[[#|If Mash Won't Start]]**. === Non-Standard Morrowind/Python Directories * **Do this if either Morrowind or Python is in a non-standard directory.** * Wrye Mash is not a regular program, but rather a script file. To run Mash, the Wrye Mash shortcut needs to tell Windows to: 1) find the Python script file interpreter (__pythonw.exe__), and 2) use it to run the __bash.py__ script file that is located in the 3) __Morrowind\Mopy__ directory. * Ordinarily the Wrye Mash shortcut does this pretty easily, but if either Python or Morrowind is in a non-standard directory, then you need to alter it to point to the new directories. The rest of this section shows you how to do that. * Copy the "Wrye Mash for Python 2.x" shortcut and give the copy a new name (e.g., "My Mash 2.x") -- this protects your changes from being overwritten by future Mash releases. * Right click on the new shortcut, select __Properties__. This will open the Properties window for the shortcut. * Go to the __Shortcut__ tab in the Properties window. * If **Morrowind** is in a non-standard directory, then edit the __Start In__ field to be . [Morrowind Directory Path]\Mopy **(e.g.** H:\Games\Morrowind\Mopy **)** * If **Python** is in a non-standard place. then edit the __Target__ field to be: . "[PythonPath]" bash.py **(e.g.** "C:\Python24\pythonw.exe" bash.py **)** === If Mash Won't Start * **If Bash refuses to start, or quits after quickly flashing up a window...** * __Check your Mash Shortcut__ * Most users who have problems with Mash simply need to tweak the __Start In__ and/or __Target__ fields of the shortcut. (See [[#|Non-Standard Morrowind/Python Directories]] for more info.) * If that's fine, then there may be a bug with Mash, or a problem with your setup. You can usually figure out the problem by creating a **bug dump** and reviewing it. And if you can't puzzle it out, someone on the Elder Scrolls forums may be able to help. * __Getting the Bugdump__ * Open a command shell (Start: Programs: Accessories: Command Prompt). * __chdir__ to the Mopy directory. "chdir" means "change directory". E.g.: chdir C:\Program Files\Bethesda Softworks\Morrowind\Mopy * Type: c:\python24\python.exe mash.py 0 * If you have a different version/location of python, adapt the first argument accordingly. * That's the number zero at the end, ~~not~~ the letter 'o'. * Doing this will cause any error messages that Mash generates on start to spew to the command shell. This is the bugdump. * __Dealing with the Bugdump__ * First, **look at it!** -- especially the last several lines -- this will often give you a good clue as to what the problem is, and you may be able to resolve it on your own. * Common Problems * **Can't find bash.py:** Make sure that you chdir to the Mopy directory first. * If that doesn't help, then go to the forums and post the whole bugdump. Preferably, you should post the dump in the **Relz/Help** topic (see [[#WryeMash|Discussion]] link at top of page) or you can start a new topic. Be sure to mention "Wrye Mash" in the text of the post. * **Hint:** Control-C does not work in the command line window, but you can still copy text from it by selecting the text, and then hitting the __Enter__ key. == 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. == Mods Tab =================================================================== Mods Tab === Mods List * **Sorting** * Sort Mod list items by (left) clicking on a column header, or by using the sort submenu of the column popup menu. * Reverse a sort by redoing it. E.g., left click on the File column header twice in a row. * "Load Order" is the exception -- it will always appear in correct order. * Force ESMS to the top of the list by selecting "Sort by Type" from the context menu. * Force selected mods to the top of the list by selecting "Sort by Selection" from the context menu. * **Selecting Load Mods** * Select load mods by clicking on the checkbox next to their file name. * Note: When a mod is selected, its master mods will also be selected. * Conversely, when an esm is unselected, any mods that depend on it will also be unselected. * **Line Colors** * **Blue:** An esm file. * **Pink:** A file that shares a modification date/time with another file. Not a problem unless they're both selected, in which case, the lines turn... * **Red:** A file that shares a modification date/time with another file -- with both files being selected. This should definitely be corrected! Use details view to change the modification date of one of the files by a second or more. * **Orange:** Overloaded Exclusion Group (See below.) * **Checkbox Colors** * Checkbox colors indicate the "health" of the mod file's master files. See [[#| Master List Updating]] below. Basically, with mod files, you're okay unless the checkbox is red -- which indicates that a master file is missing. * __Exclusion Groups__ * Oftentimes users will have different versions of the same mod, or different mods which do the same sort of thing in an incompatible way. Exclusion groups can be used to help flag these mods so that you don't accidentally load more than one at once. When an exclusion group is violated, all violating mods will be highlighted in orange. * Defining an exclusion group is easy -- just change the name of the mod to include a comma. The part of the name before the comma is the exclusion group. === Mod Details * Make changes to the file in the details view. * **File Name** Change the file name. * Note that changes to the file name are **not** automatically reflected in any mods that have the current mod as their master. See Doubling below. * **Modification Time** Change the file modification time. * Note that this affects file order. See Doubling below. * **Author** Change the author name. * **Description** * Edit the mod description. * **Masters List** * The masters list show the esm files that the current mod depends on, and the load order (modIndex) of that master. * While there's rarely a need to edit the masters of a mod, if the need does arise, you can use the masters list to do so. **It is recommended that you be familiar with editing masters of save games before you attempt to edit masters of mods.** * For more information, see [[#| Mod Updating]] below. === Using Load Lists * Aside from using checkboxes to select and unselect mods, you can also use load lists. These are accessed through the column context menu. * **None:** Unselects all files. * **Save List...** Saves your currently selected files to a new load list. * **Edit Lists...** Allows you to delete and rename previously defined load lists. * **[Load List]** Selecting a load list causes all of its files to be selected. This action is not exclusive, but ~~additive~~ -- i.e., the files will be selected ~~in addition~~ to the currently selected files. === File Commands * **File Operations** * **Backup** Create a backup of the file. Note that backups are also automatically created (see "Revert to Backup" below). If you want to be sure that you can late restore from a specific point, use Duplicate or Snapshot instead. * **Duplicate** Creates a duplicate of the file in the mods directory. * **Snapshot...** Creates a snapshot copy of the current mod in a subdirectory (Mash\Snapshots). * Snapshots are indicated by appending to "-l.n.m" to the root of the file name. E.g., "My.esp" becomes "My-01.esp" or "My Mod v1.01.esp" becomes "My Mod v1.01-01.esp". * Note that Mash will automatically generate the next available snapshot number. However, you are free to chose a different number if you like. * Also, if there's an existing version line (e.g., "Version NN.MM-LL") in the description field of the mod, then it will updated with the new version plus snapshot number when the snapshot is saved. * **Delete** Deletes the file... **Permanently.** * Also deletes all backups and temp files, but **not** snapshots. * **Hide** Moves the file to a subdirectory (Mash\Hidden). * Use this on seldom used mods to keep them from cluttering the mods listing. * This is especially useful when modding, since the TESCS Data Files list cannot be sorted. * Note that there's a corresponding "Unhide..." command in the column context menu. * If the file's group is defined (e.g. Heads), and if the Mash\Hidden directory has a subdirectory with the same name (e.g. Mash\Hidden\Heads), then the file will be hidden in it. * **Sort** Reorders selected mods to make them sort in alphabetical order. * Modified time of first mod is set to earliest modified time of set. Other mods follow it at one minute increments. * **WARNING: Some mods must be loaded in a certain order (e.g., a patch mod must be loaded after the original). Sort may break that required ordering! Use sort with extreme caution! Note too that there is no "undo" command for sort!** * **Revert to Backup** Reverts the file to the last Backup made of it. * Mash will make a backup of a file the first time it is significantly changed in an application session. * E.g., if you make two or three changes to a file in a given application session, then only the first change will generate a backup. * **Revert to First Backup** Same as Revert to Backup, only it reverts to the very first backup that Mash made of the file. * The first backup is generated the first time that Mash alters a file, and is never overwritten. Hence it is guaranteed to be free of any problem that Mash might introduce. * Of course, this also may mean that it's badly out of date! * **Revert to Snapshot** Reverts the file to a selected snapshot. === Export/Import Dialog * From the mods context menu, select **Export: Dialog** to export all dialog text to a file, or select **Import: Dialog** to reimport dialog text from a file. * The purpose of these functions is to facilitate spellchecking and general text editing. Accordingly, **only the text of the dialog is exported.** (I.e., this is a more focussed dialog export/import than the similar TESCS function.) * **Format** * Exported text is sorted by speaker/topic. However, imported text may be in any order, and can be trimmed to a subset of the originally exported set of entries. * Lines beginning with '#' signs are comments and are ignored. Feel free to add additional comment lines to the exported file -- they'll be ignored in import. * Lines beginning with '@' encode the dialog type, topic and info entry number. **Do not alter these lines!** * **Trimming** * Text is automatically trimmed to some degree on import... * Leading and trailing spaces and new lines are trimmed. * Some characters are replaced or deleted: curly quotes are straightened; single chararcter ellipses are replaced with multi-character elllipses; reserved characters (@, #) are deleted.) * Any remaining text over 511 bytes will be trimmed. If such trims are made, a window will popup detailing them. === Export/Import Scripts * These paired commands will export all scripts in a mod to a text file, and then subsequently reimport them. * Note that after importing, you must manually recompile (in TESCS) any scripts that have been changed. === Import LCV Schedules * Generates LCV schedule scripts from an LCV schedule text file, and inserts the scripts into the current mod file. * **Note: This feature is only useful for modders working with LCV Schedules.** * **Schedule Generation Steps** * Generate the text file. * The current LCV release includes its source text file. This can be used as example when developing the schedule for a new location, or as starting point, when modifying an existing schdule. * The source text file must contain the complete schedule for at least one location. * Select the esp to import schedules to and use the Import: LCV Schedules command on it. * Open the esp in TESCS and make in extra modifications that are required: * Be sure to include the current LCV Schedules esp in your load list. * Add state variables (SC_TownName_State) * Add scriptholders for the master scripts, and place them as needed. * Id: SC_TownName * Name: TownName Schedule * Model: EditorMarker.nif * Script: SC_TownName_Master * Add any extra items needed. E.g., boats for fishermen, etc. * Compile scripts, either manually or by using the **Recompile All** command. * If you only imported a schedule for one town, then recompiling by hand is probably simplest. * If you imported schedule for several towns, then **Recompile All** is probably best. * Errors in your schedule files are most likely to show up during the compile process. To fix them, go back and fix your text file, then re-import and recompile. * Save esp * Note that **Recompile All** typically recompiles several base Morrowind scripts: DagothUrCreature1, EndGame, Float and LorkhanHeart. After you save, you should use the Details view to delete these modified scripts from your esp. Then reload the esp and save again to completely eliminate these bogus scripts. === Import Merged Lists * **Overview** * Leveled lists determine what creatures you will encounter and what items you will find in various containers. Mods that add creatures or items to the world generally modify these lists. However, if two or more mods modify the same list, then the last mod to load will delete any additions/changes made be previous mods. * This function combines changes made to the same leveled lists from different mods and saves the combined list to the current mod. * **Usage** * **This function is only available for mods whose author is "Wrye Mash".** This is a safety feature to prevent overwriting the load lists of a normal mod. * If you don't have such a mod available, then **start by copying "Mashed Lists.esp"** from Mopy\Extras to the Data Files folder. * Note that you may want to have **different versions of the Mashed List esp** for different load sets. If this is the case, just duplicate one Mashed List esp and rename it as desired. * If you have a copy of **Merged_Leveled_Lists.esp** (produced by TesTool), then remove it from your load list. You won't need it anymore. Note too that you won't need to use the **Leveled List Resquencer** tool. The Import Merged List lists are already resequenced. * **Make sure you have your full load list loaded, then right click on the "Mashed Lists" esp and select "Import: Merged Lists".** * Don't forget to update the masters on your save game when you're done. * **Tech Notes** * Mash's Merge List function is a bit more efficient that TesTools -- if there's no need to merge lists, then it won't. * In merging lists, Mash ignores lists from any of the three Bethesda Masters, under the assumption that anything in them will also be in any plugin that tries to modify them. * In merging lists, Mash ignores any mod whose author is "Wrye Mash". * When merging two lists: * ~~Chance None~~ is set to Chance None of last mod to change list. * ~~Calculate for Each Item~~ is true if it's true for either list. * ~~Calculate from All Levels~~ is true if it's true for either list. * All entries from the first list, plus any new items in the second list will be included in the merged list. * A deletion of a leveled list will be ignored unless the deletion comes from the last mod to modify that list. === Import Replacer * **Overview** * Ref replacers allow you to systematically replace one set of references with another. For example you can "NOMify" a mod that adds towns by systematically replacing empty bottles with equivalent NOM bottles; and static ovens, grills, cauldrons and kegs with equivalent NOM activators. * **Setup** * Select Import: Edit Replacers, and use the resulting dialog to add a replacer file. Be sure that the file that you have selected is a replacer file! * **Usage** * Select Import: [Replacer Name]. You'll receive a report on all replacements made and records imported. * **Tech Notes** * The mod replacer file defines which object ids's are to be replaced and with what object ids, and (optionally) which source mod to copy records from. * If multiple replacements are defined, then each of the replacements objects will be used in turn. E.g. for NOM, the first morrowind kegstand will be replaced with a beer barrel, the second will be replaced with a wine barrel, etc. * If you define a source mod (srcmod), then the replacer will grab a copy of each object id used from the srcMod and copy it to the target mod. E.g., if the user only replaces bottles, then only bottle object definitions will be imported into the target mod. If you don't define a srcmod, then nothing will be imported. * In the mod, only the id of the placed object will be changed. Thus, the replacement should work at the coordinate/orientation used by the original, **and the original should not have extra info that is incompatible with the replacements type!** * I.e., if the original is a soulgem and includes info on the type of soul included, then the replacement should not be anything but another soulgem. * This means that you have to to know what you're doing when you're defining a replacement. (Probably the main limitation is not replacing soulgems or things that have uses.) * Be aware that ref replacement doesn't do any spell checking... So be sure that both the original and replacement items are spelled correctly. === Renumber Refs * This is an advanced feature intended to reduce the likelihood of [[ http://www.uesp.net/wiki/Tes3Mod:Mod_Conflicts#Local_References | local refs conflicts]] between mods. It works by renumbering the local refs placed by the esp, so that instead of starting objectIndex numbers at 1, it starts them at some random number between 1,000 and 10,000 (or a user selected number between 1 and 100,000.) * **Notes** * This feature is **experimental!** Seems okay so far, but it does something a little unexpected and perhaps Morrowind engine won't like that. * The main problem with doing this is that every time TESCS is used to edit the esp, it will renumber the object indexes starting from 1. So, this feature is best used by end users rather than by modders. (Since end users don't re-edit the esps.) * This command remembers the starting object index numbers for each mod. If used a second time on the same mod, it will default to the same starting index number it used last time. So, if you have to edit the esp with TESCS, just run the command again. * **Usage** * [Optional] Duplicate the original mod and make changes to the duplicate rather than the original. If you're going to modify an esp that is already in use by save games, you'll need to do this (and create and use an updater) in order to prevent doubling. * After selecting the command, you can either accept the suggested first value (randomly chosen between 1,000 and 10,000), or manually enter a value between 1 and 100,000. === Repair Refs * See [[#| Doubling]] below. === Copy to Esm/Esp * Copies the esm to an esp and vice versa. === Sort Records * This sorts the file records so that they can be more easily found in the TESCS Details view. * **Ordering Details** * TES files are only semi-ordered. Some records **must** be in a certain order, e.g. DIALs and their associated INFO's form a block. Other records seem to have a record preferred by TESCS/Morrowind, while other types of records are loosely intermixed (e.g., most object type records). * The sort record commands follows both the required and preferred record order rules, but also orders records more strictly by record type and by record id (when available, and when not in conflict with other rules). This stricter ordering makes records easier to find. * **Inherited Order** * Records that are modifications of pre-existing records (i.e., records inherited from master esms and even from esps selected in the load list) will be reordered when TESCS saves the esp file so that the inherited records are moved to the top of their TESCS save group (e.g., the "most objects" group), in the order that TESCS originally saw them in -- which is fairly disordered. * However, it seems to be safe to use the Sort Records command on the Bethesda esms themselves. (But don't be surprised if Mash hangs for a minute or so while sorting Morrowind.esm!) Once this is done, when saving your esp, the modified records will still be moved up, but at least they'll be ordered by record type and id. === Statistics * Displays statistics for the file's record types. === Updaters * See [[#| Doubling]]. == Saves Tab ================================================================== Saves Tab === Saves List * **Checkbox Colors** * Checkbox colors indicate the "health" of the mod file or save files master files. See [[#| Master List Updating]] below. === Save Details * Make changes to the file in the details view. * **File Name** Change the file name. * **Save Name** Change the save name. This is the save name that appears in the in-game game load list. * **Masters List** * The masters list show the esm and esp files that the current save game depends on, and the load order (modIndex) of that master. Editing the masters list of a save game is probably the most common use of Mash, since it is the action that is necessary to prevent doubling. For more information, see [[#| Mod Updating]] below. * **Copy List:** Right click on the column header of the master list and select this command to copy the list of masters to the clipboard. * This is useful for forum postings where you want help debugging your load list, or just want to show off how many mods you have loaded! Note that this list is more useful than the list in the morrowind.ini file, since it lists the mods in load order. * Copy list will also **include the version number** of the master if the description field of the master **includes a line like "Version ####".** Note that this is the same version labeling scheme that the Snapshot command uses. === 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). === File Commands * Same as for [[#FileCommands| Mods Tab: File Commands]] above. * Except... **Hide** has been replaced with **Move To...".** * Move To moves the selected save files to the specified directory. Usually this will be one of the subdirectories of Saves\Mash\Hidden, since these subdirectories correspond to your Profiles (see below). === 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. === Journal Browser * Shows the journal entries for the selected save. * Note: **Journal browsing is a memory hog** and will slow down switching between save files! If you're not using it, close the window. === Load Masters * This causes the save game's master files to be loaded. * Note that unlike Load Lists, this function is **exclusive, not additive.** I.e., **only** the masters of the save file will be selected. === Map Notes * From the saves context menu, select **Map Notes** to extract all of the notes that you have added to the map for that save game. * Map Note Tips: * Add map notes by double clicking anywhere on the map while viewing it. * Notes attached to a cell are visible from the map square for for any door that leads to that cell. E.g., map notes placed in a cave will be visible not only while in that cave but in the landscape outside. * So, for caves, tombs, etc. place the note inside the cave if possible. === Repair All * See [[#| Doubling]] below. === Update Map * Updates the world map to reflect added and removed landmasses. Use this after adding or removing mods with landmasses, and using Repair All. * Draws the borders around the visible map area. * Note that lands located outside of this area will never be drawn. I.e., if you're inside, you should see the land; if you're outside, you should see nothing but blue ocean. * Draws a grid with spacing of 5 cells centered on the center of the 0, 0 cell. * Want to use a COE (Center on exterior) console command? Now you can easily figure out what the coordinates are! * You can disable the gridline drawing by unchecking __World Map Gridlines__ on the column header context menu. ~~However~~ if you've previously drawn the map with the gridlines enabled, you may still see some gridline remnants on the land masses that you've visited. These will not disappear until you re-visit the corresponding cells. * **Notes** * If you see marked cells for landmasses that have been removed, try using __Repair All__ first. === 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. == Doc Browser ================================================================ * You can easily and quickly scan through your mod's document files (readme's) from the Doc Browser window. Supported doc types: text files, html and mht (html archives). * To show the Doc Browser window, select "Readme..." from the mod's context menu. === Using the Doc Browser * When you the Doc Browser is showing and you click on the name of a Mod in the Mods Tab, Mash will try to show the document for that mod in the Doc Browser window. If Mash does not know which document to associate with the mod, it will show a blank page. * To associate a document with a mod: * Select the mod in the Mods Tab. * Switch to the Doc Browser and click on "Set Doc..." and use the file dialog to find the document. * To disassociate a document with a mod: * Use "Set Doc..." again to pick a different doc. **Or...** * Use "Forget Doc..." * To change the name of a document, click on the "Rename Doc..." button, and use the file dialog to pick a new name/location. The document will be renamed and/or moved to the new directory. * To view a different document: * Select the document on the Mods tab. **Or...** * Use the mod name combo box to select the desired mod. * To make a text document editable, click the "Edit Doc..." button. * Note that editable docs will stay editable until you unset "Edit Doc...". * Also the Edit doc setting is remembered separately for each mod. As you switch between mods, the "Edit Doc..." button will return to the remembered state for that document. * Any changes to the document will be automatically saved when the mod is changed, the document window is closed or the edit button is unclicked. * To create a new document, just use "Set Doc..." and pick a file name that doesn't exist yet. This will give you a blank document template - and any changes to it will save automatically, creating the new file. === Wiki Text Format * If the mod's doc file is a __.txt__ file in wrye wiki text format, an html version of it will be automatically generated as needed, and this html version will be shown when the doc Browser is not in edit mode. * **Format Documentation and Template:** * The wiki text format is documented in __Data Files\Docs\Mash Readme Template.txt__. * When you create a new readme document (by using "Set Doc..." to a file that doesn't exist yet), you'll be given a template wiki text file. The template will be based either on the Template above, or on __Data Files\Docs\My Readme Template.txt__ if it exists. === 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]].)** === Load Order Maintenance * In order to prevent doubling and to get correct behavior out of mods, it is important that they load in the correct order. Since mod load order is determined by their modified time, it is important to be able to set and keep fixed the modified time. * **To set the load order of a mod,** just edit the Modified field of the mod in the details view. * **To keep the modified time fixed,** Turn on the "Lock Times" feature in the column context menu of the Mods Tab. When this is done, Mash will memorize the modified times for all files that it sees. Then, whenever Mash launches, or comes to the foreground, it will check to see if any Modified times have changed, and if so, reset them to the earlier memorized values. * Note: If you want **to use a non-Mash load ordering utility,** you'll first need to turn off "Lock Times". When you're finished with the external ordering utility, turn Lock Times back on. It will reset to use the times set by the other utility. === Mod Updating * As described above, adding references to (or removing references from) an existing mod is likely to cause doubling. Part of the cause of this is reordering of the mod (which is fixed by **Lock Times** ), but the other cause is ObjectIndex renumbering. Fixing this second problem requires that the objectIndex numbers be remapped in the save file (e.g., remap object number 123 to number 234). This can be done in Mash, but requires several stages. * **Procedure** * **First,** there must be *separate mod files for the original mod and for the updated mod,* and these mod files must have different names (e.g., "AoScrye 1.1.esp" and "AoScrye 1.15.esp"). * For modders, *it's okay to continue to modify the original mod, so long as you do not add or remove refs, and so long as you do not change the id of any placed refs!* * If you need to add or remove refs, then these changes need to be made on a new version of the mod. (Just use the File: Duplicate command and rename the new copy as desired.) * **Second,** you need to generate an "Updater" for each old/new version pair. * Select the new version of the mod in the Mods tab and then select "Updaters..." from the context menu. This will popup a new dialog which will list the updaters available for that mod. * Click on "Add" and select the old version of the mod. This will create the updater, which will now be shown in the list. If some of your save games depend on even older versions (e.g., "AoScrye 1.0.esp"), then you can add additional updaters for those. * **Third,** update the masters list of the save game that you want to update. * In the saves tab, select the save game you want to update, and, in its master list, change the name of the old esp version to the new esp version. I.e., click on the old name and then either edit the master name in place, or use the context menu to select the new master. If you've done this correctly, then the updated master will be hilighted in dark green. (Masters that have been changed, but ~~don't~~ have an updater applied are hilighted in pale green.) * **Merged Plugins** * If you have a save game that is dependent on one or more plugins which are merged into combined plugin, then you can define an Updater from the original plugin(s) to the merged plugin. * E.g., if your save game depends on "Alpha.esp" and "Beta.esp" and these are then merged to form "Gamma.esp", then you can define updaters as above and then, in the save game master list, rename both "Alpha.esp" and "Beta.esp" to "Gamma.esp". * Note that should work well, so long as the merged files do not place the same type of object into the same cell. However, even in this case, running Repair All should fix any problems. === Master List Updating * **Master/Save/Mod Health** Red Orange Yellow Green Blue Purple * In the master list, checkbox colors indicate the "health" of that master. Blue is best, red is worst. Green, yellow and orange represent intermediate levels of health. * In the saves and mods list, the checkbox color is the same as the least healthy of its masters. I.e. if, for a save, one master is orange and the rest are green, then the save's checkbox will be orange. The exception to this is purple, which is a sort of "superblue". * More specifically, and from worst to best, the meanings of master colors are: * **Red:** The master is missing. Either the mod file has been removed, or its name has been changed. * **Orange:** The master file is out of load order compared to the rest of the masters in the master list. * **Yellow:** The master file's size has changed since the game was last saved. This likely indicates a change to the mod file -- which may result in objectIndex caused mismatching. * **Green:** The master file is in order compared to the other files in the master list, but is out of order compared to the files in the current load list. * **Blue:** The master file is synced, has the right size and is in the right order. * **Purple:** This will only appears for saves. It indicates that not only are all of the masters synced, but also that no extra masters are loaded. If a save is blue (not purple), then the load list contains an extra esp that the save is not yet dependent on. If you play the save, then the save will become dependent on that new master. * For save games, you want every master to be blue - i.e. you want the save itself to be blue. * Mod files have much less problems than save files -- so it's sufficient if all masters are orange or better. I.e., as long as the master is present, it should be okay. For this reason, for mod files, "green" is considered to be perfect health. * **When to Update Masters** * If the save game checkbox color is blue, then it's fine -- there's no need to edit it. * If the save game checkbox color is green, then its master list is fine, but it not compatible with the current load list. You can use the "Load Masters" to sync load list with the master list. Note that the load list does not have to be exactly the same as the master list. It can have additional load files, so long as those files will load ~~after~~ the files in the save games master list. * Otherwise, you should edit the load list. * **Updating the Load List** * If you like, you can create a duplicate or snapshot of the file before you edit it. But remember that Mash also will automatically create a backup that you can revert to. So, creating a duplicate is simply an extra measure of safety. * Bring up the context menu for the masters list column header, select "Edit", and then click "Yes" in the dialog that appears. Doing this will result in some initial cleaning of the list: * Master files will be placed in the correct order. * Missing files will be renamed if Mash thinks it knows what the new name is. Otherwise the missing master will be unchecked. * The correct file size will be applied. * Note that files that have had their name or size changed will now be hilighted in green. * If all masters are checked and are either green or blue, then you're probably done and can save your changes. Otherwise, continue... * You can rename masters by editing their label directly or by using the "Change to..." command from the master item popup menu. (Right click on the master name.) This will bring up a dialog allowing you to select an esm or esp. * You can change esm references to esp references and vice versa. (E.g., suppose you depending on an esp that has since been converted to an esm.) * You can change different existing masters to point to the same new master. You might do this if you merged several head mods. (Note that merging may cause objectIndex doubling -- so hopefully the merge has been done in such a way as to prevent that.) When the file is saved, these different master references will be merged into a single reference. * If the rename has an Updater associated with it (i.e., from "AoScrye 1.1.esp" to "AoScrye 1.15.esp"), then the new name will hilighted in dark green. Otherwise, the rename will be hilighted in pale green. (See [[#| Mod Updating]] above for more information.) * You can unselect masters that you want removed. * Note that this will delete any changes that you made to that objects references from your save game. * You can use the "Sync to Load List" command from the column context menu. * This will uncheck unmatched masters and add additional masters as necessary. * **Suggested Action** * In the mods tab, first select the mods that you want to run with. * Then switch to the save tab. If the save you want to use is not blue, then begin editing the master list for it. * If there are any missing masters, then rename them. Also check the autorenames (look for green hilighted items) to see if they look right. * Then use "Sync to Load List, do a final inspection and save the file. * Then use **Repair All** on the file (see below). === Repair Refs Command * **Note:** For save games, the Repair Refs comand has been extended into the Repair All command. Repair All performs all of the work of the Repair Refs command, plus additional cleanup, which is described [[#RepairAllCommand| below]]. * This Repair All function attempts to repair references and other records damaged by past changes to file list. * Note: If the health of the file is not Blue or Green, then you should to update the master list before you can use the Repair All command. * When you run Repair All, you'll either get a report that no repairs were necessary, or you'll get a report of repairs that were made. Repairs will take the form of either rematches or deletions. * Rematches: The Repair All function compares the object id for each reference with the object id expected from the save files master list for the references combined modIndex and objectIndex. If they those id's don't match, then Repair All tries to find a different value of modIndex for with the id's do match. If it finds such a match and if that match is not already used by another reference, then it switches the reference to use the new modIndex. This is a rematch. * If Mash can't find a non ambiguous match, then it will report "NO MASTER" and delete the reference. * If Mash finds a match, but it's already in use, then it will report "DOUBLE" and delete the reference. * Also if Mash finds a reference that is marked as "Deleted" but has a modIndex of 0 (meaning that it's owned by the save file, not any of its masters), then Mash will delete the reference. Note that a save game needs to remember when a master file reference is deleted, but should not remember when a save-game owned reference is deleted -- since there's no need to do so. These bad deletes seem to be responsible for doors, NPCs, etc. that disappear and reappear with every change in the load list. === Repair All Command * In addition to repairing refs, as described [[#RepairRefsCommand| above]], Repair All performs several other cleanup tasks... * **Remove Orphan Contents** * Content records (CREC, CNTC and NPCCC) records that have become disassociated with a place reference are removed. * **Remove Debris Records** * Sometimes gameplay leaves a modified copy of a database object even after the mod that "owns" that database object is no longer in the load list. This is common for globals (GLOBs), but also occurs for a variety of other records (NPC_s, LEVCs, etc.). * The list of object ids in the save game is compared against the object ids provided by the game's master files, and records that are unmatched are deleted. * Exceptions: Some items are intentionally created in game (new spells, enchanted items). Also, the MonthsToRespawn global is created during gameplay. These records are excepted from the Debris removal process. * **Remove Overriding Lists** * Mods that modify leveled lists through the addToLev and removeFromLev script commands will cause copies of those (modified) leveled lists to be added to the savegame itself. This approach conflicts with the use of leveled list mergers since the savegame copy of the leveled list will override even the merged leveled list esp. Accordingly, the scripted approach is now considered obsolete. Mods should no longer use the leveled list script commands. * However, this still leaves the problem of cleaning savegames that are contaminated by older leveled list modifications. Repair All will now (as of version 0.70) do this. * Repair All will remove any leveled list in the savegame if more than one master mod has a copy of the list. (Thus unique lists belonging to a single mod may still use script commands.) * Note however, that if an older script modifying mod is still present in your load list, it will most likely continue to readd the leveled list back into the savegame. The solution to this is to update/patch the offending mod to no longer use the leveled list script commands. * For more info, including a list of problematic mods (and updates/patches for them) see: [[http://www.uesp.net/wiki/Tes3Mod:Leveled_Lists|UESP Leveled Lists]]. == 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. === Mish Commands * **Using Mish** * Chdir to the mopy directory and then (if you have python environment fully defined), type mish commandName [arguments]. * If you don't have the python environment fully defined, then type: . python mish.py commandName [arguments] * I'm assuming that you at least have the python.exe in your command path. * If you're confused, but desirous of learning more, go to python.org and look for info on setting up your python environment. * **refInfo** * This command will give you info on the refs in a file. Typically, I use this for finding which references are changed from the faster. * Usage: . **refInfo "Yadda yadda.esp"** * There's a line in the refInfo function that goes like "if object[0] == 0". Set this way it will tell you about all new references in the file. But if you change it to "!= 0" it will tell you about all changed references in the file. Which is useful if you want to know what you've accidentally bumped into while changing refs in a given cell. * **cleanRefs** * Usage: cleanRefs "Yadda.ess" "Data\Beth All.etxt" * This removes references from Yadda.ess that match the objects listed in "Data\Beth All.etxt". Or you can use one of the other list files or make your own. * **DO NOT USE THIS ON AN ESP FILE** Unless, of course, you **want** to blow away a bunch of the references in that esp. Hmmm... Actually, that might be useful for cleaning gunk out of your file... But you had better know what you're doing -- this file makes no distinction between refs that you've modified from an esm and refs that you've placed yourself. * **genSchedule** * Usage: genSchedule "My Seyda Neen Schedule.etxt" "My Seyda Neen.esp" * Munches a schedule text file and from it generates a set of LCV style scheduling scripts. These scripts will either be written to the specified esp file or to a text file named after the source file (e.g., "My Seyda Neen Schedule.mws") if you leave off the second argument (name of the esp). * While this writes the scheduling scripts to the file, it does not compile them. You'll need to open the esp file in TESCS and either compile each new/updated script in turn, or use the compile all button. (But if you do that, you'll probably need to save, then go to the details view and delete several scripts that were uncompiled or incorrectly compiled in the original morrowind.esm, then open and resave. (Though I think that some of these four are fixed in the other Bethesda esms.) * Note that the "LCV Schedules.etxt" does **not** contain any of the idle defs. That's because all of these are defined in (and loaded frm) mush.py. You can still define and use your own idle (or any other defs), but I would advise that you use the ones in mush.py if possible since they're fairly standard.) * **etxtToHtml** * This command generates html documents from an etxt document. I use this to generate all my html docs -- e.g. this one. * Usage: etxtToHtml yadda.etxt * This will generate yadda.html in the same directory. * For etxt formatting, see "Wrye Mash.etxt" for examples. == 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 Mopy\local. E.g., for English, it would be Mopy\locale\English.pkl. (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., Mopy\locale\English.txt) 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 python mish.py dumpTranslator. This will create a new text language file for you in the locale directory (e.g., Mopy\locale\NEWEnglish.txt). 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.
=== masher.py, 4605
Default profile cannot be removed.
>>>>

=== masher.py, 4611
Delete profile %s and the %d save files it contains?
>>>>
DELETE PROFILE %s AND THE %d SAVE FILES IT CONTAINS?

* Each entry begins with the source file and the line number (in case this helps you figure out how to translate the code). * After that is the original text, then a >>>> dividing line, then the translated text. Here, the second entry has been translated, while the first has not. (Here the the "translation" consists of changing it to upper case. * It's important that you leave the formatting characters in place and in order! Formatting characters are text like %s %d %08X \n. The '%' strings are place holders where file names, counts, etc. are entered -- if they're not present, Mash will throw an exception. The \n combinations are newline characters -- I use them in dialogs and other places where I want line breaks. * In translating, I would suggest that you translate the strings that you see the most first. E.g., a good one for a quick test is masher.py, 2126: Mods -- this is the name of the Mods tab. And right under it is the name of the Saves tab. * To test your translations, just save your changes to the text file, and restart Mash. Your changes should appear immediately. * Of course, it's probably a good idea to keep backup copies of your translator file in case you mess one up. If you revert to a backup copy, just throw the pkl version away to it to update. (Remember it won't autocompile unless the text file is newer than the pkl file.) * Spell checking: If you're using an office suite, you might want turn on dictionaries for both English and your language -- Abot mentions that Open Office allows you to do this. === Python and wxPython * **Python** * I've programmed in something like 20-30 different languages and of those, Python is by far the easiest and most powerful. I strongly recommend it both for first time programmers and experienced, professional programmers. * As you'll see from the code, it's an untyped, object oriented language. (By "untyped" I mean that you don't have to declare the type of variables before using them.) * You'll also notice that it's compact with very little overhead -- it's probably about as close a programming language can get to pseudocode -- i.e., to the way you think the program. * Note that when you installed python, you got a very complete manual. When programming, I just keep this manual open. * **wxPython** * wxWidgets is a cross-platform GUI widget set. wxPython is a python wrapper around that library. Unlike Java, the graphics are native to each platform -- hence drawing operations are fast. * However, while there's a fair amount of documentation for wxPython, between wxPython and wxWidgets, there can be something of a documentation gap. In several places I had to search for a while, and do some experiments before I figured out the right way to do things. In a few other places I couldn't get things to work, that from the wxWidgets documentation seemed like they should work. So, it's not a completely mature platform. * However, the end result looks damned good and is responsive, (not bad for my first real GUI application!) so I'm not regretting the choice. * For your interface work: The closer you stick to my code the easier things will go. * As mentioned before, the wxPython manual and docs are a separate install from the base wxPython install. There are several types of help available in it. * Most useful is the wxPython Demo. This is where I usually start. * Of secondary use are the wxPython manuals. These are fairly complete, but they're primarily designed for the c++ version of wxWidgets. The conversion from C++ call to python call is unfortunately not always documented or obvious. * And of course, there's the web. A well chosen google search will oftentimes help substantially. === Mechanics: Editors and Navigation * If you want to do some serious new code, you'll probably want to get a decent text editor (if you don't already have one). You'll find python plugins for any decent programming text editor. * The files are moderately large (1000-2000 lines). My text editor (Edit Plus) has a function listing ability. I kind of lie to it and tell it that function lines look like "^(#|class|def) " This means that it will list root level classes and function definitions **and** lines that start with '# '. (Note the trailing space.) This allows me to set additional "bookmarks" to navigate by (e.g., "# Util Data ----"). === Getting Started * **Python** * If you're not familiar with it, check out python.org. There are lots of links to good tutorials there. Also, the python installation * **Mish.py** * Command line programming is definitely easier than GUI! So if you just want to understand the data level code, you can restrict yourself to mosh.py and mish.py. * I'd suggest that you make your own copy of mish.py and then play around with extracting data and spitting stuff out. Then when you feel confident, you can start modifying files. * **GUI Programming** * Context menu items are the easiest things to add. They're relatively simple, and I've specifically designed the code to make it easy to add new menu commands. * **Menu definition and Creation** * Both menu items and the Morrowind buttons are subclasses of my Link class. * You'll notice that I define these classes last in the file, and don't actually them into the interface until the InitLinks() function. * **Examples** * **MorrowindLink** creates the Morrowind Launch button in the status bar. It's very simple, and by following it back you can see how it get's added into the bar. * **UnHideLink** Is more complicated, but is still pretty comprehensible. * **FileStatsLink** Is not very complicated in itself, but that's only because it pushes most of the interface work onto a new class FileStatsList. But it's an example of a menu command that introduces a little extra GUI complexity. === Code Layout * The code is self documenting... Yeah, right! Actually, I keep my code pretty clean and well laid out so it shouldn't be too bad. But there are few hints that I can give you... * Python supports internal code documentation through the the triple quote syntax ("""Function does x.""") This is similar to Java's code documenting feature. I've used this a little bit, but not as much as I should have. * **mosh** * **Settings** * The class and singleton are defined in mosh.py and used by other modules. * For convenience, I use dictionary emulation to allow the singleton to be accessed like a dictionary. (E.g., ___getitem___ supports the settings[key] syntax. * **FileInfo and FileInfos** * These are parent classes for ModInfo and ModInfos, and SaveInfo, SaveInfos. * I.e., basically mod and save files and collections of them. * **TES3 File Structure** * Basically, I only defined as much as I had to. * For performance reasons, I don't analyze the data file any more than I have to. E.g., for the remapMasters function, I only care about the objects in the cells. Thus there's all other records (except for TES3) are left in their raw data form, and even for cell objects, I leave most subrecords in raw data form. * Note also the use of the changed flags -- this allows me to skip repacking data if the cell record hasn't been changed. * **masher** * **images** and **colours** are convenience collections for correspond objects. * **Final interface assembly** does not take place until the end, through the various init functions. This is done to make the program more easily modifiable. (And easy to write in the first place!) == Data and Extras ============================================================ The Mash distribution includes additional files that assist in its operation and/or assist the modder in other ways... === Data: Ref Removers * These are text files that define Ref Removers. * **Beth All.etxt** * Bethesda non-unique containers and creatures. * **Beth Containers.etxt** * Bethesda non-unique containers. * **Beth Creatures.etxt** * Bethesda non-unique creatures. * **Beth Doors.etxt** * Bethesda non-unique doors. * **Wrye All.etxt** * Wrye creatures plus Beth containers and MCA 4.1 NPCs. * **Wrye Creatures.etxt** * Creatures from Bethesda plus Mephisto's ~~Creature Pack~~ and Pirate Lords's ~~Creatures.~~ === Data: Ref Replacers * These are text files that define Ref Replacers. * **MCA Refs.etxt** * MCA spawn points. Note that these require that that placeholder spawn points be pre-added to the mod first. * So why not just add MCA spawn points directly? Because this way, MCA becomes optional -- it's up to the user whether they want to install MCA or not. Also, if some other mod provides MCA-like functionality, a replacer can be defined to place their NPCs instead of MCA NPCs. * **NOM Refs.etxt** * Bottles, keg stands, ovens, wells, etc. This replaces certain statics and misc items with their NOM equivalents. === 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}} === 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. === 0.78 [2/18/2007] * Bugfixes/Tweaks * Fix post2038 dates for python 2.5. * WikiText: CSS tag. === 0.77 German, Misc. [1/27/2007] * Tweaks * Improved install debugging help. * Allow shorter internal link specification. * Foreign Language Support * German (by DWS) * Italian tweaks (by Abot) === 0.76 [1/26/2007] * Fixed a tiny little bug that broke the code. === 0.75 [1/25/2007] * Foreign Language Support * Bugfix for translation file reading. * Italian (99% Complete) (by Abot) === 0.74 [1/24/2007] * Foreign Language Support * Minor tweak to bish's dumpTranslation function * Italian (98% Complete) (by Abot) === 0.73 [1/21/2007] * Python 2.5 compatibility. * Tweaked shortcuts to be more generic. * [[#WikiTextFormat| Wiki Text]] Html Generation. * Added support for [[#|Internationalization]]. * Allow No Gridlines on World Map Updating. * Updated/Added Ref Removers: * Pirate Lord Creatures (by Dragon32) * Caits Critters Unleashed (by Dragon32) === 0.72 [1/5/2007] * New/Improved * Tweaked list merging so that chance none is set to the chance none of the last mod to load rather than to the mimimum chance none. Tweak needed for MCA 5.1 Lighter to work with Mash. * Added remover for Fireflies by Thaedyn Vyr (remover by Shasta Thorne). === 0.71 [12/10/2006] * New/Improved * Modified remover creation to accept multiple files. * Removed "Beth All", "Wrye All" and "Wrye Creatures" removers (since these can now be recreated as multi-file remover. * Added many new removers (by Dragon32 and Shasta Thorne) to Data\Removers directory. === 0.70 [11/4/2006] * New/Improved * Removed "blue" mod masters. (Blue is not relevant for mod masters). * Tweaked sorting by name to ignore extension. * Tweaked snapshot file wildcard filter. * Added "Overriding List" check for Repair All on savegames. === 0.69 [10/17/2006] * New/Improved * LCV Schedule generator upgrades (see LCV 03-13) * Added "INI Tweaks..." function. === 0.68 [10/12/2006] * **New/Improved** * LCV Schedule generator upgrades (see LCV 03-12). * **Bug fix** * Ignore directories that are named like mods (e.g. "xxx.esp".) * Fix bugs associated with merging lists where a list is being deleted. === 0.67 [10/9/2006] * **New/Improved** * LCV Schedule generator upgrades (see LCV 03-08 through 03-12). === 0.66 [9/26/2006] * **New/Improved** * Finally fixed zombie progress bars! (I think.) * Profile name is now included in app title. * Added purple color for perfectly synced savegames. * **Bug fix** * Fixed a minor bug related to declining to remove a profile. * Fixed a minor bug with error handling during leveled list merging. === 0.65 Bug fix [7/14/2006] * **Bug fix** * Fix bug with help button setting. === 0.64 Misc. [7/14/2006] * **New/Improved** * Added help button. * Added savegame profiles. * Mash now semi-expects to be installed under Morrowind directory. * Added "Redate" reordering function. * Added exclusion groups ala Bash. * Added save game screenshots. * Moved doc and journal browsing to context menu commands and eliminated the previous document buttons. * Removed static text headers from mod and save details panels. * Use temp files more often to avoid power fail related file corruption. * **Fixes/Cleanup** * Fixed an error reporting bug for replacers. * Prevent 'DaysPassed' global from being deleted. (Apparently, like MonthsToRespawn, it's automatically added by the game engine.) * Cleaned up some vestigial code. (NotesBrowser.) === 0.63 Misc. [1/19/2006] * **Fixes/Cleanup** * Fixed a new bug that broke ref removers. === 0.62 Misc. [1/10/2006] * **New/Improved** * **Doc Editing** Minor bug fix and improvement to make it easier to add/edit new doc files. === 0.61 Misc. [1/9/2006] * **New/Improved** * **Ratings:** Specify ratings (i.e., score, grade) for mods. * **Hiding Files:** Hide will now first try to hide to sub-directory named for author, if it exists. * **Edit Docs:** Can now edit text document files. * **Library Generator:** Feature for generating library books. (CLI only.) * **Fixes/Cleanup** * Fixed bug with list merging that caused incorrect number of records to be written. Only a problem if you then attempted to edit file with Enchanted Editor, which would give an odd error and then truncate the merged esp file. * Complete representation of: BOOK, INFO, GLOB records. * Useful for programmatically modifying these records. See mish.py for examples. * Misc. code cleanup. === 0.60 Object Index Renumbering [11/9/2005] * **ObjectIndex Renumbering** * Experimental feature to renumber object indices reduce likelihood of local ref conflicts between mods. === 0.59 Bugfix [10/16/2005] * **Fixes/Cleanup** * Make sure backup directories exist before attempting to clean them. === 0.58 Misc. [10/9/2005] * **Fixes/Cleanup** * Fix bug with hiding files that hadn't been assigned to a group. * Backup directories now cleaned on application exit. === 0.57 Resource Replacers [10/2/2005] * **Fixes/Cleanup** * Resource Replacers: * Add progress dialog on apply. * Add file types: kf, bmp. * Fix makedirs bug. === 0.56 Resource Replacers [9/30/2005] * **New/Improved** * Resource Replacers: Easily apply/remove resource replacers. * Remove: Debris Cells for saves. * Clean renamers dictionary on quit. === 0.55 Repair Map [9/17/2005] * **New/Improved** * Improved Repair Map function. === 0.54 Repair Map [9/15/2005] * **New/Improved** * Workable version of map repair. Still needs some work. * **Fixes/Cleanup** * Fix UI to upgrade correctly after mod select/unselect. === 0.53 Misc. [9/8/2005] * **New/Improved** * Alpha sort multiple mods! * When duplicating saves, now specify the save name, rather than the file name. * After mod or save duplication, selection will jump to duplicate. * Can now skip warning when clicking on masters list. * Hide now hides to Mash\Hidden\[GroupName] if group is specified for the the file and the directory exists. * **Fixes/Cleanup** * Refactored UI updating. All file changes should now update UI correctly. * Comment out a print statement during global ref remapping. * Cleaned out some junk code; refactored other code. === 0.52 Misc. [8/16/2005] * **Fixes** * Fix error.file bug. === 0.51 Misc. [8/8/2005] * **Fixes** * Mash will now remap global script references as part of Repair All and master file updating process. * Updated Extras\ESTemplate.ini with SCPT.RNAM data. * Added Review function for saves. === 0.50 Misc. [8/3/2005] * **New/Improved** * Renamed Genre -> Group, and added editing of group names. * Added a (very minimal!) ref replacer for MCA 4.1. Only works with mods designed to use it. (E.g., LCV Wolverine Hall.) * For save games, Repair All now replaces Repair Refs, and includes Remove: Orphan Contents. * **Fixes** * Fixed a bug with Genres that broke Ref Replacer importing. === 0.49 Misc. [7/31/2005] * **New/Improved** * Can now specify genre for any mod. * Added dummy marker mods (XXX ===.esp) to Extras folder. * Schedules now supports projects and imports. * **Fixes** * Ref Removers and Replacers menu items are now disabled if more than one file is selected. * **Internal** * Prep for internationalization. * Refactor unpack of structs, and record and subrecord headers. * Refactor Tes3Error handling. === 0.48 Misc. [7/27/2005] * **New/Improved** * Tes3Error's should now print problem file. * **Fixes/Tweaks** * Repair All will no longer remove MonthsToRespawn global. === 0.47 Ref Replacers [7/26/2005] * **New/Improved** * Added ref replacer ability and replacer file for NOM. === 0.46 Mashed Lists [7/23/2005] * **Mashed Lists** * Added support for creating merged, resequenced lists. * **Misc.** * Add LEVI and LEVC to types of debris items removed during Repair All. === 0.45 Misc. Fixes and Tweaks [7/22/2005] * **LCV Script Generator** * More support for off schedule NPCs. * Support for initialization of NPCs through hello dialogs in each town. * **Fixes** * Tweak default and minimum window sizes to fix infinite looping that some people have seen. * Auto-add python root directory to os.environ['PATH'] so that activex dlls will be found. * Auto-create Data Files\Mash and Saves\Mash directories for tables and object maps. * **Misc.** * Tweak journal text display. === 0.44 Journal Browser, Repair All [7/16/2005] * **Journal Browser** * Can now browse the journal for any save file. * **Repair All vs. Repair Refs** * Repair Refs no longer removes Orphan Contents. Instead... * New Repair All does Repair Refs, but also removes Orphan Contents and Debris (GLOBs, BOOKs, CREAs and NPC_s) in save games left over from previous games that are no longer associated with save game. * **Misc.** * More intelligent updater creation. If you try to create an updater when one is not necessary, you'll get a message saying as much and no updater will be created. * **Fixes** * Fix possible bug in script generation. * Fix a bug that prevented user from turning off "Lock Times". === 0.43 Misc. Fixes [7/12/2005] * **New** * Finally added "Revert to Snapshot" command! * LCV Schedule generator now checks for SC_offSchedule item. * **Fixes** * Fixed a problem where snapshot wasn't resetting the file date after updating the version info in the file's description header. * Fixed a problem where some mtimes were being saved even though "Lock Times" was turned off. * Fixed a problem where mod and save details were not updating correctly after a mod file date change. === 0.42 Doc Browser [7/3/2005] * **Doc Browser** * Docs for mod files can now be accessed easily from within Mash. * **Internal** * MTime info is now saved in Data Files\Mash\Table.pkl, along with doc names, and (in the future) other mod specific data * Misc. code cleanup. === 0.41 Misc. Upgrades [7/1/2005] * **Ref Removers** * The remove objects by id function added to the CLI in version 0.38 is now available in the GUI. * **Lock Times** * Lock Times (formerly "Remember Times", formerly "Auto-set Times") will now forget memorized times if you turn it off. This prevents Lock Times from overriding changes made by other load ordering utilities. * **Internal** * Added doc strings. * Misc. code cleanup. === 0.40 Misc. Upgrades [6/29/2005] * **Masters List: Copy List** * Copy the masters list to the clipboard for forum posts, etc. * **Masters List Numbering** * Masters list now shows the load order (modIndex) for each master. * **Import: LCV Schedules** * Tweak to fix problem with sleep scripts. * **Miscellaneous** * Upper limit (255) on number of load files is now enforced. * Added Quick Start section to this doc. * Added continue warning for Sort Records. * Fixed master list sorting. * Items added to master list are now sorted. * **Mish** * etxtToHtml command now included. * **Internal** * Renamed link classes. * Added doc strings. === 0.39 Misc. Upgrades [6/25/2005] * **Import LCV Schedules** * Imports LCV schedules into a mod file. * **Map Notes** * Extracts map notes from save file. * **Remove Orphan Contents** * Removes content records that have become "orphaned" -- i.e., no longer matched to a cell reference. * **Sort Records** * Sorts mod file records for easier searching in TESCS Details view. * **Statistics** * You can now view the statistics for more than one file at a time. (I.e., statistics are now shown in a non-modal window.) * **Miscellaneous** * Menus have been reordered slightly. * This docment has been rearranged and updated. === 0.38 Misc. Upgrades [5/30/2005] * **Mish: Misc** * LCV Schedule Generator * Remove Objects * Sort Records * **Save: Unspawn** * New save file command resets all spawn points. Great for resetting game after changing your spawned creature lists. * **Misc.** * Rearrange Masters link list. === 0.37 Window Closing Bugfix [3/13/2005] * **Closing While Minimized** * Previously, if Mash were closed while minimized, it would save a bogus frame position in settings, which would prevent it from opening correctly on next use. This is fixed now. === 0.36 Misc. Improvements [2/25/2005] * **Circular Masters** * Mash was going into infinite loop if masters were circular. This is fixed now. * Sync to Load ESMs will no longer allow you to create circular masters. === 0.35 Misc. Improvements [2/13/2005] * **Dialog Export/Import** * Deleted dialogs no longer cause a problem. * Entries are now better sorted. * Some characters are now replaced or deleted. (@, #, curly quotes, ellipses, extra spaces). === 0.34 ObjectIndex Mapping, Dialog Export/Import, Misc. Fixes [2/5/2005] * **ObjectIndex Remapping** * Mash now does ObjectIndex remapping, thus completing its program for preventing/fixing doubling. * **Dialog Export/Import** * Can now export and import dialog. * **Snapshot Modifications** * Snapshot numbers can now only be preceded by a '-'. * **Is Snapshot** command has been removed. * **Interior Cells with Water** * Mash was misidentifying interior cells with water as exterior cells. This may have resulted in excessive reference deletion on repair. This is corrected now. === 0.33 Minor Fixes and Improvements [1/29/2005] * **Minor Bugfixes** * Mash was throwing an error when you right clicked on a master that didn't exist. This is fixed now. * Mash was throwing an error when you tried to "Load Masters" when one or more of the masters didn't exist. Mash now gives you a warning message. * **Misc. Improvements** * Add support for '+' at end of version numbers in descriptions (e.g., "Version 1.2.3+". Use this as a note that file has changed since snapshot was taken. === 0.32 Minor Bug Fix [1/27/2005] * **Bugfix: New Lines in Mod Descriptions** * Mash was writing descriptions with unix style new lines when it should have been using windows style new lines. This is fixed now. * If you have a lot of files contaminated with this error, you can use the mish temp3 function to fix it. Ask on the forums for more info if you need it. * AFAIK, this produced no run time problems -- it just messed up your description display in TESCS. === 0.31 New Features, Minor Fixes [1/27/2005] * **Copy to Esm/Esp** * You can now copy an esp to an esm and vice versa. Look for new command on Mod items context menu. * **Editing Masters** * Change menu item name from "Edit" to "Update". * No more warning if select from menu. But clicking anywhere in list will trigger Update query. * For esps/esms, change "Sync to Load Files" to "Sync to Load ESMs". * Can now directly "Sync to Load Files/ESMs". I.e., don't have to "Update Masters" first. * **Snapshot Improvements** * New **Is Snapshot** command for versioned mods. * Version number is now written to description field if description has a pre-existing "Version N.M" line. * **Minor Bug Fixes** * Mash was **failing to remove masters** when the user attempted to uncheck them in the master list. This works now. * **Miscellaneous** * You can now sort mods by file version. * Mash now deletes backups and temp files while deleting files. However, it does **not** delete snapshots or hidden files. === 0.30 Itty Bitty Fix [1/24/2005] * **Minor Bug Fix** * Fix a key not found error that showed up on some Ref Repairs. === 0.29 Misc. Improvements and Fixes [1/23/2005] * **Major Bug Fix: Refs Repair on Exterior Cells** * Mash was misidentifying exterior cells, and as a result erroneously marking a change refs in those cells as BAD::NO MASTER, when they were fine. This is fixed now. * **Repair Refs on Mods** * You can now use Repair Refs on mods. * Also a (hopefully) rare bug on editing masters of esps has been fixed. * **Improved Error Checking** * Mash now checks read size for reasonableness before attempting to read. This fixes the slowness problem mentioned in File Corruption Handing for version 0.28. * During Repair Refs, Mash now generates useful error messages if a master needs to be repaired first. * Mash now checks for second NAM0 records in cells. * **Minor Bug Fixes** * Mash would sometimes crash if a mod file was deleted or renamed from outside Mash. It now handles handles this correctly. === 0.28 Minor Fixes and Features [1/22/2005] * **Major Bug Fix** * Mash was failing on manually unselecting files. (This is a recent "break something while fixing something" bug.) This is fixed now. * **More File Corruption Handling** * Added a new handler for another type of file corruption, but it seems to move pretty slowly (if such a corrupted file is present). Better than nothing, I guess. * **Bugfix: Morrowind.ini** * Mash could enter an infinite loop at startup if the Morrowind.ini file had been altered by hand in certain ways. * Now, Mash handle most (all?) legitimate changes to the Morrowind.ini file. However, a missing [Game Files] section will still result in a failure/exit on startup. === 0.27 Major Bugfix [1/21/2005] * **Bugfix: File Version** * Mash was reading the file version in as a float, but writing it out as an int! This in fact, was the cause of the death animation problem as well as the character's attire becoming confused after header editing. * Now, Mash writes file version as a float and no longer uses the current animation deletion "fix" from version 0.26. * Also, Mash now displays file version in both mod and save details views. * Files with version 0.0 are mostly likely corrupted and should be reverted to backup or first backup. * **Bugfix: Corrupted Headers** * Mash crashed on startup if you had mod or save files with missing or corrupted headers. * Now, Mash warns you and ignores the damaged files. * **Bugfix: Y2038 Bug** * Mash crashed on startup if you had files with modification dates greater than 1/19/2038 (Unix Epoch rollover! Welcome to Y2038!). * Now, Mash resets the modification dates of those files to around 1/1/2037 and notifies you of the change. === 0.26 Major Bugfix [1/20/2005] * **Header Editing** * Instead of blowing away all leveled creatures, I now blow away all current animations. This seems to be a full solution. * Drawbacks: NPCs may stand around for a little while before resuming their normal activities. Also, corpses will repeat their death animations. * **Ref Repair** * Fixed an MVRF bug before I saw it. * **ESTemplate.ini** * This is the Enchanted Editor template that I'm currently using. It has a number of additions related to save files. It has not been massively tested (but that's true for the original templates too, of course). Still, use at your own risk. * Includes some additions from Beryllium as well. === 0.25 Partial Bugfixes [1/19/2005] * **ESM Ordering** * Reworked this in an effort to mimic Bethesda's ordering. Seems to be correct now... * **Header Editing (Partial Bug Fix)** * After editing headers, creature corpses are not able to find their death animations. Living creatures are fine, as are creatures that you kill after the editing. Also, it doesn't seem to be a problem for NPCS -- just for creatures. * As a temporary partial solution, I'm resetting all LVCR references. This is basically safe -- it will just cause those points to respawn. But this still leaves the problems of non-spawned creatures (many of whom are crucial to various quests.) * **Repair Refs** * Maintain original ordering of functions. * Note: This ~~may~~ also suffer from creature death animation bug. * **EE Wrye 0.0.ini** * Enchanted Editor template file with my personal updates. === 0.24 Repair Refs, etc. [1/15/2005] * **New** * **Repair Refs Function** * MenuItem: Backup * **Improvements** * Progress dialog for master save. * Reordered File submenu. * **Fixes** * Changed temp file names to remove potential problem with Morrowind launcher. * Disable Backup menu items on multi-select. === 0.23 First release with docs! {{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.