-------------------------
TES4Gecko - Version 14.5
-------------------------

Created by TeamGecko
 - New development and Original TES4 Plugin Utility code: ScripterRon (Ron 
Hoffman)
 - Original Gecko plugin splitter and compare code: KomodoDave (N David Brown)
 - Gecko project leader: dev_akm (Aubrey K McAuley)

Credits: TES4Gecko Version 13 represents ScripterRon's return to working on 
TES4Gecko project, and the results are dramatic. TES4Gecko Version 12 was 
created using the source code from ScripterRon's wonderful TES4 Plugin Utility 
(Version 11.1), which he graciously donated to the project. The vast majority of 
the functionality here was created by ScripterRon -- TeamGecko merely attempted 
to expand and enhance his amazing work.


Overview
----------------------------------

TES4Gecko works with The Elder Scrolls IV: Oblivion plugin and master files 
(*.esp/*.esm). It is designed to let mod-creators manipulate plugin and master 
files in ways that Bethesda either did not imagine or decided to leave out of 
the official Construction Set.

TES4Gecko has a wide variety of useful functions, such as merging two or more 
plugins into a single plugin or removing data that doesn't need to be in a 
plugin (accidental changes).  It can convert a plugin file to a master file or a 
master file to a plugin file, move worldspaces, generate silent dialog MP3s, and 
a ton of other useful stuff. Selected plugin records can be removed from a 
plugin or copied to another plugin. It will also split a single plugin file into 
master/plugin components and compare two plugins, highlighting the differences 
between them.

Please see the Available Functions section below for critical details and 
warnings about how individual functions work.

Discussion of TES4Gecko is on the Bethesda Elder Scrolls Construction Set forum 
(http://www.bethsoft.com/bgsforums/). Search for TES4Gecko if you don't see the 
thread right away.


New Features and Changes
----------------------------------

TES4Gecko Version 13 adds a ton of new features, drastically revamps the code 
base, and fixes a bunch of bugs. Here's a few of the biggest new features.

The Compare Plugins function has been redesigned to improve performance. It now 
allows comparisons of very large files, such as Oblivion.esm, which in turn made 
it possible to add a new "Clean Plugin" function to remove any entries from a 
plugin that do not actually differ from Oblivion.esm (accidental changes). The 
'Toggle Ignore' and 'Copy to Clipboard' functions are now available on the 
Compare Plugins screen. The "Split Plugin" function  now has an option to create 
an independent ESM/ESP pair (where the ESM has no dependency on the ESP). The 
Display/Copy function now displays the plugin master list with the associated 
modindex for records tied to that master, supports both FormID and EditorID 
search functions, and provides automatic highlighting of master records. The 
master list order can now be changed, Worldspaces can be moved into the 
Oblivion.esm modindex (00) to avoid vanishing landscape problems, and BOOK 
subrecords are merged.

See the version history near the end of this document for a complete list of 
changes and fixes.


Installation
----------------------------------

To install this utility, place the TES4Gecko.jar and the TES4Gecko-Silence.mp3 
files into a directory of your choice.  To run the utility, create a program 
shortcut and specify "javaw -Xmx1024m -jar <install-directory>\TES4Gecko.jar" as 
the program to run, where <install-directory> should be replaced with the 
directory where you extracted the jar file. If the path for java isn't set on 
your system, you will need to specify the full path to javaw.

A sample program shortcut is included that specifies \Tmp as the install 
directory.  The -Xmx1024m argument specifies the maximum heap size in megabytes 
(the example specifies a heap of 1024Mb, or 1Gb).  You can increase the size if 
you run out of space merging very large plugins.  Note that Windows will start 
swapping if the Java heap size exceeds the amount of available storage and this 
will significantly impact performance.

The Sun Java 1.6 runtime is required.  You can download JRE 1.6 from 
http://java.com/download/index.jsp.  If you are unsure what version of Java is 
installed on your system, open a command prompt window and enter "java -
version".

=========================================================================
=========================================================================


Available functions:


Apply Patch
-----------

This function will recreate a modified plugin file by applying a patch file to a 
plugin file.  The patch file must have been created by the Create Patch function 
and the plugin file must be the base plugin file that was used to create the 
patch.

The 'Merge Plugins' function should be used if you want to combine two different 
plugin files and the 'Merge to Master' function should be used if you want to 
merge a plugin into a master file.


Clean Plugin
------------

This function will remove records from the plugin that are the same as records 
in the master.  Plugin records that modify or delete master records will not be 
removed.


Compare Plugins
---------------

This function will let you browse the record structures of two plugins side-by-
side.  Differences between the two plugins will be highlighted. This will let 
you easily see what changes have been made in a new version of a plugin.  You 
can copy records from either plugin to the clipboard plugin.  You can also 
delete records in either plugin.  Refer to the "Display Plugin" function for 
more information on copying and deleting plugin records.

Note that records copied from the plugins are not merged into the clipboard - 
they are copied as-is.  This means that a record will not be copied if the 
clipboard already contains a record with the same form ID.


Convert to Master
-----------------

This function will convert a plugin file (*.esp) to a master file (*.esm).  The 
plugin file will not be deleted.  The output file will be overwritten if it 
exists.


Convert to Plugin
-----------------

This function will convert a master file (*.esm) to a plugin file (*.esp).  The 
master file will not be deleted.  The output file will be overwritten if it 
exists.


Create Patch
------------

This function will create a patch file by comparing a modified plugin file to 
the original plugin file.  The master list must be the same for both the 
original plugin and the modified plugin.  The patch file will contain just those 
items that were added, changed or deleted.  The patch file name will be the same 
as the original plugin file name but with an extension of ".esu" instead of 
".esp".  The modified plugin file can then be recreated by applying the patch 
file to the original plugin file using the Apply Patch function.  The 
Display/Copy function can be used to display the contents of the patch file.

A record is considered to be changed if the subrecord data is not identical.  
Since the Construction Set does not always write out the subrecord data in the 
same order when saving a plugin and sometimes writes random data in unused 
subrecord fields, this can cause records to be treated as changed even though no 
changes were made.


Display/Copy
------------

This function will display the records in a plugin.  Records that modify a 
master record will be highlighted to make it easier to distinguish between local 
records and shared records.

The "Ignore" flag can be set or reset to cause a record to be ignored when 
saving the plugin.  The record is physically removed from the plugin when the 
plugin is saved.  The "Ignore" flag for all records in a group will be toggled 
when a group is selected.  An attempt to set the "Ignore" flag for a subrecord 
will be ignored since subrecords do not have an "Ignore" flag.  However, 
subrecords can be deleted and will be removed from the record.

Records can be copied to a clipboard plugin called "Gecko Clipboard.esp".  An 
existing clipboard plugin will be overwritten each time the clipboard is saved.  
The clipboard plugin can be merged with another plugin or loaded by the 
Construction Set.  Optionally, any records referenced by the copied records will 
also be copied to the clipboard plugin.

The "Copy" and "Toggle Ignore" buttons work on the selected rows in the plugin 
tree display.  Multiple records can be selected using the normal Windows 
conventions.  Hold down the SHIFT key to select all rows between the previous 
selection and the new row.  Hold down the CTRL key to add just the new row to 
the selection.

You can search for a record based on its editor ID or its form ID.  The editor 
ID search term is specified as a regular expression while a form ID search term 
is the hexadecimal form ID.  If a match is found, the tree node for the matching 
record will be selected.

An editor ID search expression can be the complete editor ID such as 
"OOOBraidedCuirass".  Or it can contain regular expression constructs to specify 
the match pattern.  The matching is case-insensitive because the editor ID is 
not case senstive, thus "OOO" will match "ooo".  The following are some useful 
regular expression constructs.  Refer to 
http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html for more 
information on regular expression patterns.  A special character can be 
specified as part of the search string by escaping it.  For example, if you want 
to find an editor ID containing a period, specify "\." instead of "." in the 
search expression since an unescaped period will match any character.

. = Any character
X* = Zero or more occurrences of X
X? = Zero or one occurrences of X
X+ = One or more occurrences of X
X{n} = n occurrences of X

For example, to search for any record starting with "OOO", the search term would 
be "OOO.*".  Note that the records are searched in the order they appear in the 
plugin and not in the order they are displayed.  Use the "Find Next" button to 
continue the search from the last match.


Edit Description
----------------

This function will edit the plugin version, creator and summary fields.  The 
version can be set to 0.8 (base Oblivion) or 1.0 (Shivering Isles expansion).


Edit Master List
----------------

This function will edit the master list for a plugin.  A master entry can be 
renamed or removed.  An error will be posted if the master file is still 
referenced by an item in the plugin.  The user can continue and forcibly remove 
the master entry, in which case all records referencing the master will also be 
removed.  The user can also change the order of the master list entries.  This 
doesn't change the order in which master files are loaded, but it can be used to 
synchronize form ID values when comparing two plugins (two items are considered 
to be different if they both reference the same master but the masters are in 
different positions in their respective master lists).


Generate Responses
------------------

This function will create response voice files for each dialog entry in the 
plugin.  Any existing response files for the plugin will be deleted.  The 
TES4Gecko-Silence.mp3 file is copied to the correct file names.  If the dialog 
uses the GetIsID function, a single file will be created based on the NPC race 
and gender.  If the dialog uses the GetIsRace function, two files (male and 
female) will be created based on the specified race.  Otherwise, two files (male 
and female) will be created for each playable race.

The TES4Gecko-Silence.mp3 file provides 8 seconds of silence.  You can replace 
this file with another one of your choice to change the length.  The file must 
be recorded as a mono file with a 44KHz sample rate and a 64Kbps bit rate.


Merge Plugins
-------------

This function will merge two or more plugin files and create a new merged plugin 
file.  The output file will be overwritten if it exists.  The files will be 
merged in the order specified by the assigned priority values.  Priority 1 files 
will be merged before priority 2 files, priority 2 files will be merged before 
priority 3 files, etc.  Files with the same priority will be merged based on the 
file modification timestamps.  A file will not be merged if it has not been 
assigned a priority or if the priority value is not valid (priority values must 
be greater than zero).  Specify priority values by clicking on a row in the 
plugin table and then typing in the desired number.

If you check the 'Delete last master record conflict' box, the second 
conflicting record will be removed from the merged file.  Otherwise, the first 
conflicting record will be removed.  Two records conflict if they both modify 
the same object in the master file.

If you check the 'Edit master leveled list conflicts' box, leveled list 
conflicts will be displayed and you will be able to manually merge the leveled 
list items.  Items can be copied from the plugin leveled list to the merged 
leveled list, items can be deleted from the merged leveled list, and the level 
and count values for items in the merged leveled list can be changed.  If this 
box is not checked, leveled list conflicts will be resolved by adding the unique 
entries from the second leveled list to the first leveled list (an entry is 
considered to be a duplicate of an existing entry if it has the same level 
number and item form ID).

Form ID and Editor ID conflicts are resolved by assigning new values.  For this 
reason, an existing save game may be invalidated if a new merged plugin file is 
created and a conflict exists that did not exist in an earlier merged plugin 
file.  The Form ID and Editor ID will not be changed if there are no conflicts 
with the existing values.

IMPORTANT NOTE: TES4Gecko does not contain support for processing scripts.  If 
an Editor ID conflict occurs and you choose to rename the Editor ID, then you 
must check the scripts in the merged plugin (using the Bethesda Construction 
Set) and manually change the Editor ID from the old value to the new value.  The 
compiled scripts will work properly after the merge without any changes but the 
scripts will fail if they are recompiled without first updating the Editor ID 
values in the script source.

If two plugins modify the same record in a master file, the conflict is resolved 
by selecting those subrecords that are not the same as the corresponding master 
subrecords.  If both plugins modify the same subrecord, the subrecord from the 
first plugin or the second plugin will be used depending on which option was 
selected in the merge dialog.  Lists are handled by adding unique list items 
from the second plugin to the list from the first plugin.

Voice response files for each plugin are merged.  Landscape files are not merged 
since there is no way to tell if a particular landscape record is used by a 
given plugin.  Instead, the Move Worldspaces function should be used to move all 
worldspaces in a plugin to the master index before attempting to merge the 
plugin.


Merge to Master
---------------

This function will merge a plugin file into an existing master file.  Items in 
the master file which are modified by the plugin will be replaced by the plugin 
definitions.  This allows master changes to be tested first in a plugin before 
committing the changes to the master.

Voice response files are merged.  Landscape files are not merged since there is 
no way to tell if a particular landscape record is used by a given plugin.  
Instead, the Move Worldspaces function should be used to move all worldspaces in 
a plugin to the master index before attempting to merge the plugin.


Move Worldspaces
----------------

This function will move WRLD and visible-when-distant STAT records from the 
plugin index to the 00 index.  Distant land files will be renamed if they are 
found in Meshes\Landscape\LOD or Textures\LandscapeLOD\Generated.  Distant 
statics records will be updated if they are found in DistantLOD.  The DistantLOD 
files must be generated before moving worldspaces if a plugin contains visible-
when-distant references to statics defined in a master other than the first 
master.  The DistantLOD files are optional if all of the visible-when-distant 
references are to statics defined in the plugin or in the first master.

Placeholders can be inserted to mark moved worldspaces and statics.  These are 
scrolls with the original form ID and an editor ID consisting of "TES4Gecko" 
followed by the 8-digit relocated form ID.  Placeholders are required if you are 
moving worldspaces in a master and you have one or more dependent plugins that 
reference the master.  Otherwise, inserting placeholders is up to you.

If you want to relocate worldspace in a master with one or more plugins, you 
must first relocate the worldspaces in the master (be sure to insert 
placeholders).  Then relocate worldspaces for each of the dependent plugins 
(inserting placeholders at this point is optional).

If a plugin contains a visible-when-distant reference to a static defined in a 
master but the master version of the static has not been relocated, a cloned 
static definition will be added to the plugin and this definition will be 
relocated.  If the plugin already contains the static definition, the plugin 
definition will be relocated, which means the plugin definition will no longer 
override the master definition for the static.


Set Directory
-------------

This function set the directory containing the plugin files.  This is usually 
<Oblivion-install-directory>\Oblivion\Data but can be set to any directory.  The 
directory must already exist.  Note that some functions require access to the 
files in the master list for a plugin.  If you set the directory to a different 
location, you must copy any required master files to this directory.


Split Plugin
---------------

This function will split a plugin file into an ESM/ESP pair with the ESP 
dependent on the ESM. The resulting split master will be "clean", containing 
only new content that did not already exist in another master. The resulting 
plugin will contain only changes to other masters. Doors linking new cells to 
existing cells will be split correctly to avoid contaminating the master with 
changes (which can cause landscape problems). New content added to existing 
Cells (interiors) and Worldspaces will be correctly kept in the ESP because they 
are in effect changing another master.

In addition, visible-when-distant references will be placed in the split plugin.  
This is necessary because Oblivion has a problem with missing land when a non-00 
master contains visible-when-distant references.

A dependent ESM contains all new items from the original plugin while the ESP 
contains all modifications to another master, including references added to a 
cell defined in another master.  This will cause the ESM to require the ESP if 
any of the items in the ESM (such as packages or scripts) refer to any of these 
references.  Loading the ESM without the ESP will result in errors because these 
references will not be defined.  Items defined in the ESP will use the ESM 
module index instead of the ESP module index so that the master can reference 
them.

An independent ESM contains all new items from the original plugin with the 
exception of items that reference anything still defined in the ESP.  For 
example, if a new script references a character added to a cell defined by 
another master, the script will remain in the ESP and will not be moved to the 
ESM.  The result is the ESM can be used without the ESP.  Items defined in the 
ESP will use the ESP module index since they are not referenced by any items in 
the ESM.

The resulting split files will be saved automatically with an OUTPUT_ prefix, so 
splitting mymod.esp will create an OUTPUT_mymod.esm and an OUTPUT_mymod.esp. 
You'll need to remove this prefix before using the new split pair.

Used in conjunction with Merge to Master and Compare Plugins (see below), the 
Split Plugin feature should help to facilitate large team projects. Once an 
initial split is made and the files are distributed to team members, they can 
keep adding new material to the ESP or can create new plugins based on the 
master. At the end of each development phase (an arbitrary point you agree on 
with other team members), all the new changes and work should be merged back 
into the master and a new set of resulting baseline files distributed back out 
to the team. When conflicting changes occur during this process, you can use the 
Compare Plugins feature to examine the conflicts and use Merge Plugins to 
resolve them.


=========================================================================
=========================================================================


Record merge rules for master object conflicts
----------------------------------------------

ACTI - Activator

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


ALCH - Potion

The initial effects merged list contains all of the effects from the first 
occurrence of the potion in a plugin.  Unique effects from subsequents 
occurrences of the potion are then added to the merged list.  An effect is 
unique if it has a different effect name/subtype.  For a script effect, the 
effect is unique if it uses a different script.

The potion value will be set to the highest value encountered.  Auto-calculate 
will be turned off if it is off for any occurrence of the potion in a plugin.


AMMO - Ammunition

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


ANIO - Animated object

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


APPA - Apparatus

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


ARMO - Armor

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


BOOK - Book

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


BSGN - Birthsign

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.

The initial merged spell list contains all of the spells from the first 
occurrence of the birthsign in a plugin.  Unique spells from subsequent plugins 
are then added to the merged list.


CELL - Cell

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


CLAS - Class

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


CLOT - Clothing

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


CLMT - Climate

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


CONT - Container

Attribute subrecords are merge on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.

The initial merged container contains all of the items from the first occurrence 
of the container in a plugin.  Unique items from subsequent containers are then 
added to the merged container.


CREA - Creature

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.

The initial faction list contains all of the factions from the first occurrence 
of the creature in a plugin.  Unique factions from subsequent plugins are then 
added to the merged list.

The initial inventory list contains all of the items from the first occurrence 
of the creature in a plugin.  Unique items from subsequent plugins are then 
added to the merged list.

The initial merged spell list contains all of the spells from the first 
occurrence of the creature in a plugin.  Unique spells from subsequent plugins 
are then added to the merged list.

The initial merged package list contains all of the AI packages from the first 
occurrence of the creature in a plugin.  Unique packages from subsequent plugins 
are then added to the merged list.


CSTY - Combat style

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


DIAL - Dialog

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


DOOR - Door

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


EFSH - Effect shaders

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


ENCH - Enchantment

The initial effects merged list contains all of the effects from the first 
occurrence of the enchantment in a plugin.  Unique effects from subsequents 
occurrences of the enchantment are then added to the merged list.  An effect is 
unique if it has a different effect name/subtype.  For a script effect, the 
effect is unique if it uses a different script.

The total charge and cost for the enchantment will be set to the highest values 
encountered.  Auto-calculate will be turned off if it is off for any occurrence 
of the enchantment in a plugin.


EYES - Eyes

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


FACT - Faction

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.

Faction ranks are merged as a single entity based on which plugin has a 
different number of ranks than the master.  If both plugins have a different 
number of ranks, then the faction ranks are chosen based on whether the first or 
the last conflict should be deleted.

The initial interfaction relations merged list contains all of the factions from 
the first occurrence of the faction in a plugin.  Unique interfaction relations 
from subsequent occurrences of the faction are then added to the merged list.


FLOR - Flora

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


FURN - Furniture

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


GRAS - Grass

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


GLOB - Global Variable

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


GMST - Game Setting

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be delete.


HAIR - Hair

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


IDLE - Idle animation

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


INGR - Ingredient

The initial effects merged list contains all of the effects from the first 
occurrence of the ingredient in a plugin.  Unique effects from subsequents 
occurrences of the ingredient are then added to the merged list.  An effect is 
unique if it has a different effect name/subtype.  For a script effect, the 
effect is unique if it uses a different script.

The ingredient value will be set to the highest value encountered.  Auto-
calculate will be turned off if it is off for any occurrence of the ingredient 
in a plugin.


KEYM - Key

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


LIGH - Light

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


LSCR - Load screen

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


LVLC - Leveled Creature, LVLI - Leveled Item, LVSP - Leveled Spell

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.

The initial merged list contains all of the list items from the first occurrence 
of the leveled list in a plugin.  Unique list items from subsequent leveled 
lists are then added to the merged list.


LTEX - Land texture

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


MGEF - Magic effects

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


MISC - Miscellaneous item

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


NPC - Non-player character

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.

The initial faction list contains all of the factions from the first occurrence 
of the NPC in a plugin.  Unique factions from subsequent plugins are then added 
to the merged list.

The initial inventory list contains all of the items from the first occurrence 
of the NPC in a plugin.  Unique items from subsequent plugins are then added to 
the merged list.

The initial merged spell list contains all of the spells from the first 
occurrence of the NPC in a plugin.  Unique spells from subsequent plugins are 
then added to the merged list.

The initial merged package list contains all of the AI packages from the first 
occurrence of the NPC in a plugin.  Unique packages from subsequent plugins are 
then added to the merged list.


PACK - Package

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


QUST - Quest

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


RACE - Race

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.

Racial abilities and reactions are merged by adding unique entries from each 
plugin to the current merged list.

Face and body meshes/textures are chosen based on which ones are different from 
the corresponding master value.  If both plugins are different from the master, 
then the mesh/texture is chosen based on whether the first or the last conflict 
should be deleted.


REGN - Region

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


SBSP - Subspace

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


SCPT - Script

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


SGST - Sigil stone

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


SKIL - Skill

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


SLGM - Soul gem

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


SOUN - Sound

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


SPEL - Spell

The initial effects merged list contains all of the effects from the first 
occurrence of the spell in a plugin.  Unique effects from subsequents 
occurrences of the spell are then added to the merged list.  An effect is unique 
if it has a different effect name/subtype.  For a script effect, the effect is 
unique if it uses a different script.

The total cost and skill level for the spell will be set to the highest values 
encountered.  Auto-calculate will be turned off if it is off for any occurrence 
of the spell in a plugin.


STAT - Static

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


TREE - Tree

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


WATR - Water

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


WEAP - Weapon

Attribute subrecords are merged on a one-by-one basis.  A plugin subrecord is 
chosen if it is not the same as the corresponding subrecord in the master.  If 
both plugin subrecords are different from the master subrecord, then the 
subrecord is chosen based on whether the first or the last conflict should be 
deleted.


WRLD - World space

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


WTHR - Weather

The entire record is merged.  A plugin record is chosen if it is not the same as 
the corresponding record in the master.  If both plugin records are different 
from the master record, then the record is chosen based on whether the first or 
the last conflict should be deleted.


=========================================================================
=========================================================================


Version 1: TES4Plugin
---------------------

Initial release.


Version 2: TES4Plugin
---------------------

Top-level records marked as 'Ignore' will not be copied to the merged plugin.  
Records in sub-groups will still be copied even if marked as 'Ignore' until I 
know more about what happens when you omit records found in a sub-group.

Compressed records are expanded as needed instead of expanding all records when 
loading the plugin.  This should significantly reduce the storage requirements 
when merging large plugins.

WRLD and CELL records in a master can be modified by multiple plugins.  An error 
will still be posted if any other record type is modified by more than one 
plugin.  Research is continuing to determine what can safely be modified without 
breaking the merged plugin.


Version 3: TES4Plugin
---------------------

Add the capability to convert a master file to a plugin file.

Add the capability to edit the plugin description.

Create the application preferences data directory if it doesn't exist.

The XCHG subrecord is now recognized.

References in additional subrecords are now adjusted when merging plugins.

The CS ignores underscores in an Editor ID, so conflicts will now be resolved by 
appending 'X' to the Editor ID.


Version 4: TES4Plugin
---------------------

Add the Display Records function.

All ignored records are deleted during a merge.

Leveled lists (creature, item, spell) are now merged.


Version 5: TES4Plugin
---------------------

Add the capability to display the complete subrecord data in a popup window.

Conditions are now processed properly in quest (QUST), package (PACK) and dialog 
(INFO) records.

Top-level groups now have descriptive names instead of the 4-character record 
type.


Version 6: TES4Plugin
---------------------

Deleted records are indicated in the record display tree view.

Eyes (ENAM) and Hair (HNAM) subrecords are now processed properly for Races.

Conflicts will be removed from the merged file.

Duplicate items will be removed from the merged file.

The plugin merge list is now sorted by the last modified date.

The Set Directory function now uses a file chooser dialog.

Leveled list conflicts can be edited during the merge.


Version 7: TES4Plugin
---------------------

Both references in the race voice override subrecord (VNAM) will be updated 
during a merge.

Add the capability to generate silent dialog response files.

Add the capability to merge a plugin file into a master file.

Merge the associated voice files when merging plugins.

The merge order is now specified explicitly by the user instead of being 
determined by the file modification dates.

Change the Display Records function to display both master files and plugin 
files.

WRLD, CELL and DIAL subgroups will be merged instead of being duplicated.


Version 8: TES4Plugin
---------------------

Fix problem with form ID conflicts after a master record conflict.

Duplicate references not removed when merging subgroup.

Group label not updated when the label is a form ID (WRLD/CELL/DIAL).

Update references in XTEL and XLOC subrecords.

Replace NL with CRLF in plugin summary.


Version 9: TES4Plugin
---------------------

Use a case-insensitive compare when checking for Editor ID conflicts.

When displaying a plugin, sort the records for a top-level group based on the 
Editor ID.

Correctly handle ENAM subrecord for SKIL record.

Correctly handle MGEF record.

Correctly handle SCIT subrecord for ENCH and SPEL records.

Correctly handle adding a tail to an existing race.

Add spill file support.

Toggle the "Ignore" flag for all records in a group when "Toggle Ignore" is 
selected for a group.

Accept Version 1.0 plugin files.  New plugin files are still created as Version 
0.8.

Don't save ignored records and empty groups.


Version 10: TES4Plugin
----------------------

Add subrecord merge support.

Copy records referenced by the selected records for the Display/Copy function.

Don't build the subrecord nodes for the Display/Copy function until they are 
needed.

Correctly handle the same CELL record in different groups.

Correctly handle XCLR subrecord for CELL records.

Allow a plugin to rename an object in a master file.


Version 11: TES4Plugin
----------------------

Allow any record or group to be copied.

Update GetDistance function references.

Handle escape sequences (%xx) in file URL paths.

Initialize the merged plugin description to the description from the first 
plugin in the merge.

Add confirmation dialog if the output file already exists.

Add function to edit the plugin master list.

Add functions to create and apply plugin patches.


Version 12: TES4Gecko
---------------------

Renamed the project TES4Gecko.

Added Plugin Splitter to create an ESM/ESP pair from a source plugin.

Added Compare Plugins to view two plugins and highlight differences between 
them.

Added "Yes to All" button on Merge to Master.

Fixed other minor interface issues.

Revised documentation.


Version 13: TES4Gecko
---------------------

Check master file size as well as master timestamp to decide if the index file 
should be rebuilt.

Set the initial directory to the Oblivion\Data directory.

Preserve the plugin version whenever the plugin is modified.

Add progress bar when loading/saving/updating plugins.

Add support for patching master files as well as plugin files.

Fix problem with "\r\r\n" sequences when the edited description already contains 
"\r\n".

Fix reversed 'Yes' and 'No' options in merge confirmation dialog.

Use file chooser when renaming a master list entry, allow selection of master or 
plugin file.

Allow a master list entry to be deleted even if the plugin contains references 
to the master.  The records containing the references will be deleted.

Fix bug where removing a master did not update the plugin record form ID values.

Allow the master list order to be changed.  While this doesn't affect the order 
in which master files are loaded, it can be used to synchronize form ID values 
for the Compare function.

Redesign the Compare Plugins function to improve the performance.

Add 'Toggle Ignore' and 'Copy to Clipboard' functions to the Compare Plugins 
dialog.

Add Clean Plugin function.

Add Move Worldspaces function.

Form ID references in LNAM subrecords were not being updated.

Subgroup CELL record references were not getting updated, causing CELL 
references to be lost or moved.

Allow the plugin version to be changed by the Edit Description function.

Correctly merge GMST and MGEF records with the same editor ID but different form 
ID values.

Add the ability to split a plugin into an independent ESM/ESP pair.

Update the Display/Copy function to display the plugin master list and the 
associated index values.

Add search option to the Display/Copy function.

Highlight master records for the Display/Copy function.

Merge BOOK subrecords.

Fix dialog chains when merging/copying info records.

Form ID references in PGRL subrecords were not being updated.

Add the ability to copy an item without also copying its references.

Add the ability to delete subrecords.

Insert the 'visible distant children' subgroup before the 'temporary children' 
subgroup.

Form ID reference in SNAM subrecord of WTHR record were not being updated.

Form ID references in WLST subrecord of CLMT record were not being updated.

Form ID references in ATXT subrecord of LAND record were not being updated.

The "Move to plugin index" option for the Move Worldspaces function has been 
removed because it does not work for plugins referencing relocated masters.

Visible-when-distant statics defined in a master but referenced in a plugin will 
be cloned in the plugin if they need to be relocated.


Version 14: TES4Gecko
---------------------

Add the exterior cell X,Y coordinates to the tree node description.

Assign interior cell block/subblock based on the merged form ID for the cell.

Change the Split Plugins function to move visible-when-distant groups to the 
plugin.

Form ID references in DATA subrecord of IDLE record were not being updated.

Creature sounds merged incorrectly.
