Oblivion
0 of 0

File information

Last updated

Original upload

Created by

Team Gecko

Uploaded by

Silgrad Tower

Virus scan

Safe to use

Documentation

Readme

View as plain text

--------------------------
TES4Gecko - Version 15.2F
--------------------------

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)
- Random Guy with Code Access: Steve Carrow
- Gecko project leader: dev_akm (Aubrey K McAuley)

Credits: For Version 15, Steve would like to thank:
- ScripterRon and dev_akm for the use of their code and the answering of my
stupid questions,
- The guys at Silgrad Tower (http://www.silgradmodding.org),
especially sandor. ST is a pretty demanding mod to work with and the guys there
were invaluable with their suggestions, encouragement and patience while testing.
- bg2408 at BSF for suggestions and observations incorporated into version 15.1.

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.

Questions:
http://silgradmodding.org/forum/index.php?page=Thread&postID=186345#post186345


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

To access these new features an extensive right-click system on the tree nodes has been added;
this is where most of the new functionality resides.

Version 15.2F adds or fixes the following:
- A fix for merging idles (merge order)
- It's now possible to set the clip distance for every interior cell


Version 15.2 adds or fixes the following:
- Added quest reference (QSTI) and landscape texture (LTEX) search.
- Added abilty to dump all dialogue for a plugin.
- Slightly better memory management, which should allow for using the same instance of Gecko more times before having to restart.
- Added factions to lip-synch plugin generation; I'll post a HOWTO after I release this one.
- Now silence file gen algorithm is 3 words per second, not 4. Also added additional voice files for 16- through 20-second lengths.
- Added the ability to set the starting form ID for the merge.
- Added the option to "manage" the merge to master. If merge is not managed, default behavior as in v14 and v15.0 takes place.
- Fixed a bug that Vagrant0 found that would throw an exception in managed merging if an exterior cell is in more than 5 regions.
- Fixed an error in cleaning reported by RMWChaos.
- Added more subrecord types for viewing.
- Finally (I think) fixed the merging of deleted INFOs.
- Added a "remove extraneous quest references" feature for porting dialogue quests to different masters.

Version 15.1 adds or revamps the following:
- Now the music type of all exterior cells can be changed to one common type (Default,
Public or Dungeon). Apparently StreamMusic operates more consistently if the music
type for the cell is Public.
- Thanks to the observations of bg2408, the generation of silence files and the
production of the LIP ESPs have been revamped. Now all plugins in the master list are
loaded to determine if there are races or NPCs that have dialogue added or modified in
the current plugin. For the LIP ESP generation, NPCs used in the dialogue have been added
to the ESP and also conditions relating to NPC or race are now kept, which results in far
less editing of conditions in the LIP ESP. For a brief discussion on LIP ESPs, please see
the dev thread.
- Also at bg2408's suggestion, generic LIP files have been added to the silence file
generation so that lips are moving as the dialogue captions are seen.

***
Version 15 came about mostly because Steve wanted TES4Gecko to do stuff that it
didn't do and that nobody else wanted. Since Steve on occasion gets paid to write
Java code, he asked if he could try his hand at it. ScripterRon and dev_akm
graciously gave both their consent and the then-current code base. :) Since then
Steve has been beavering away in the decrepit and ill-lit back rooms of Silgrad
Tower, working with the advice, requests and encouragement of the rest of the
Silgrad Core, in particular sandor, our Master of the Master File. :D Steve started
out with his list of wants, which were mostly related to quest cloning and working
with dialogue. As time went on, more requests were received relating to the
maintenance of a very large landmass mod as the "stone-souping" of this version
continued. Now we feel it's ready to unleash upon the world. :D Here is an
incomplete list of features added in this version:
- The ability to generate reports on objects modified within a certain plugin that
are defined in master files to detect contamination.
- The ability to dump quest or NPC dialogue into a text file, or to modify that
text file and put the result back into the plugin.
- The cloning of dialogue quests by selecting a quest and associated topics,
copying them to the clipboard, renumbering the form IDs and renaming the quest.
- The ability to copy quests and dialogues as shown above, and then "boiling down"
the clipboard plugin to the minimal size needed for loading in CS1.0 for LIP
generation.
- Now the clipboard can be saved to a new file and then cleared to allow for
further copying and saving. Also saving is now disabled unless something has
actually changed.
- Generate reports for a plugin of objects introduced by that plugin.
- Searching has been greatly extended. Searches can now be done of form ID, editor
ID, XY location for cells, base reference ID, script text and response text among
others. String searches can use the asterisk as it is used in Windows, e.g. *bat*
will match "bat", "abattoir" and "Black Sabbath's Greatest Singer: Ozzy or Dio?"
- Generation of silence files has been revamped. Rather than one 10-sec silence
files, there are now 15 more, from 1- to 15-sec with a basic word count done for
each response to roughly guess the correct length; no more waiting for ten
seconds after "Hello".
- References with a common base ID can now be removed or changed en masse at the
cell, region, world space or plugin level.
- Now when merging, there is the option to include or exclude sets of regions; very
useful with landscaping claims.
- Displaying subrecords as their actual type.
- Fixed the VWD merging bug (missing interiors).
- Fixed the cell deletion bug.
- Fixed the deleted topic merging bug.

Incorporated into this release is an extensive right-click system on the tree nodes;
this is where most of the new functionality resides. Although thoroughly tested, all
users should still back up their plugins while working with this version. Public
release has a way of uncovering what even the best beta testers miss.

***
Hot on the heels of the last release, Version 14 mostly adds several important
worldspace fixes. It now adds the exterior cell X,Y coordinates to the tree node
description, assigns interior cell block/subblock based on the merged form ID for
the cell, and changes the Split Plugins function to move visible-when-distant groups
to the plugin.

***
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 and
LIP files into a directory of your choice. To run the utility, create a program
shortcut and specify "javaw -Xmx1024m -jar \TES4Gecko.jar" as
the program to run, where 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.5 runtime is required. You can download JRE 1.5 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:
- editor ID [formID],
- form ID [formID],
- item name,
- XY location for cells [integer, integer],
- ownership [formID],
- base reference ID [formID],
- script text,
- response text
All searches not otherwise specified use regular expression while form ID searches
use hexadecimal form IDs. 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. Also note that "*" may be used as in
indows; see that *bat* example earlier in this file. It's possible that this
alteRnate usage may collide with the POSIX usage in weird cases. If this happens,
please post on the release thread at BSF.

There are many changes to this function not listed here. Please check either the
BSF release thread or the ST dev thread referenced in the release thread OP for
more details.


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 Slient Voice Files
------------------

This function will create response silent voice files for each dialog entry in the
plugin. Any existing response files for the plugin will be deleted. One of the
TES4Gecko silence. MP files is copied to the correct file names; which files is copied
depends on the word count of the entry. Races and genders are filtered based on both
quest and response conditions; any logic errors biased toward generation rather than
exclusion. If no conditions are found, two files (male and female) will be created for
each playable race.

There are 16 silence files: the TES4Gecko-Silence.mp3 file provides 8 seconds of silence,
while 15 others provide from 1 to 15 seconds of silence.. You can replace
this file with another one of your choice to change the length. The files 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.

If there are exterior cells in the file to be merged, the user is given the option
to either include or exclude cells based on assigned region.


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\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.