xGMM Generic Mods Manager
=========================

xGMM is a JSGME compatible generic mods manager with mod updating capability.
It uses the same directory layout, and uses the JSGME ini files.
To switch from JSGME, deactivate all mods in JSGME before starting xGMM.
To switch back to JSGME, deactivate all mods in xGMM. 
Without access to JSGME source, compatiblity is only verified by testing. 
Some JSGME features are not available, but basic functions with file backup are supported.
The interface is similar but simpler, not supporting some advanced features.

What is added is hard links and reversed mods updating when activated mod files are changed.
Right-click on a Available Mod to set update options before activating.
Updating is automatically done when mod is deactivated, except when Hard Links are used.
If hard links are used, files in the mod are updated when an activated file is modified.
When a mod is activated, a time stamp is saved, used for mod updating.
Hard links is recommended for all large mods, as it is faster and save disk space.

All file operation are logged, logging to file is supported.
As logging slows it down, log window is updated at the end of operation unless logging to file is selected.

Select mods with mouse, Crrl & Shift for multi select.

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

Interface:

"  >  " will activate selected mods in the Available Mods list.
	
===

"  <  " will deactivate selected mods in the Activated Mods list. 
	
===

"  <>  " will update selected mods in the Activated Mods list. 
	Selected mods will be updated and get new time stamp without being deactivated.
	
===

"  <<  " will deactivate All Activated Mods. 

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

Right click in the "Available Mods" on a mod to open a menu.

"Mod Updating:"

Mods updating is not trivial, as the full install directory tree may contain
many files. There are several update options available to handle most cases.

Mods Updating Options:

Update Newer Files:
Update mod files when active file time is newer than mod file time.

Update Changed Files:
Update mod files when active file time or size is different from mod file.

Add Newer Files:
If a mod directory contains files, the matching active directory is scanned.
This will add new files not in mod if active file time is newer than mod install time stamp.

Add All Files:
If a mod directory contains files, the matching active directory is scanned.
This will add all files missing in all mod directories containing any file.

Remove Deleted Files:
If a mod directory contains files, remove files from mod if missing in active set.

Include Directories:
Only works in mod directories containing files and in directories created by mod activation.
Add / Delete directories including files from mod to match active set.

Delete Backup Files:
Delete all *.bak backup files before deactivating mod.

Use Hard Links:
Use hard links to mod files, a second directory entry to an existing file.
Option only available if file system supports it (Same file system, NTFS or higher).
Files with READ ONLY attribute set will not be hard linked, as the link can not be deleted.
Hard links to mod files instead of copying is very fast and uses no extra disk space.
If a hard linked (activated) file is updated, the mod original is also updated.
However, if replaced, the link is broken, so "Update ... Files" may still be needed.
For large static mods, using hard links is much faster as no files are copied.
If you are moving files around between groups, deactivate any hard linked mods first.
Otherwise, the active files are still hard linked to the same moved file.
Hard links are On as default.

===

"Rename Mod"
To rename a mod, use the "Rename Mod", as this will preserve any options and groups.

===

"Delete Mod"
Deleting a mod using "Delete Mod" will remove any saved options, but not change groups.

===

"Explore Mod"
This will open selected mod directory in the explorer.

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

Mod Groups
Activated Mods can be saved as a group for later activation or deactivation in same order.
Mod groups can be used for snapshot of activated mods or to load/unload mods in correct order.

Select mod name from drop-down list or type mod name in the Mod Groups edit box.

"Mod Groups:"
To show and select mods in a group, select the name in the Mod Groups list and click "Mod Groups:".
	Mods in the group are selected and highlighted in both mod lists. 
	
===

"  -->  ":
To activate a mods group, select the name in the Mod Groups list and click "  -->  ". 
	All mods are first deactiveted, selected group will be activated in the order it was saved.
	
===

"  ++>  ":
To add a mods group, select the name in the Mod Groups list and click "  ++>  ".
	No mods are deactiveted, selected group will be activated after current active mods in the order it was saved.
	If some mods are already activated, they will stay put in the Activated list.
	
===
	
"  <--  ":
To deactivate a mods group, select the name in the Mod Groups list and click "  <--  ".
	Active mods in the selected group will be deactivated in the reversed order it was saved.
	
===
	
"  >-<  ":
To update a mods group, select the name in the Mod Groups list and click "  >-<  ".
	Selected group will be updated and get new time stamp without being deactivated.
	
===
	
"  Save  ":
To save activated mods as a group, type or select the name in the Mod Groups list box and click " Save "
	
===

"Save Sel.":
To save some of the activated mods as a group, select the mods you want to save, 
 type or select the name in the Mod Groups list box and click "Save Sel."

To delete a group, use "Save Sel." with no mods selected.
 
======================

JSGME functions not supported:
No Drag&Drop
Only documentation\info.jsgme is read for hints
No keyboard quick functions
No snapshot or integrity testing
No command line argument support
No support for JSGME .mep mod profiles
Propably some more...

Unless you need the updating functions or fast hard link copy there is no reason to switch,
JSGME is an excellent tool, well tested and widely used.

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

Installing:
Installing Generic Mod Manager is similar to installing JSGME: 
Copy it to your game's root folder.
Or create a shortcut to it, with your game's root folder as the "Start in" directory.
If you have JSGME running, that's all, just deactivate all mods in JSGME and exit it.
Start xGMM, check/change mods options and activate the mods you want.
If you install from scratch, you will be prompted for the MODS directory name (default: "MODS").
If you don't use the default MODS folder name, JSGME.INI is created in the root folder.

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

Installing Mods is identical to installing mods in JSGME:
Create a folder in MODS with the name of the mod. You can use the "Create new" button, then open it with "Explore Mod".
Inside the new folder, replicate the game's folder structure you want to change/add. 
Doubleclick on "Available Mods" to open the mods root folder. For JSGME packaged mods, just copy it there. 
Doubleclick on "Activated Mods" to refresh mods lists. 

- Game Root folder
  game folder1
  ...
  game foldesX
  MODS ( the mods root folder with all mods )
    - Folder with Mod Name (use "Create new" to create, then "Explore Mod" to open it)
      - game_folder1
        - sub_folders <etc...>
	  - game_folderX
		- sub_folders
		
    - Folder with Mod Name ( your other mods )
	  - ....
		
======================

Notes:
Unless started as administrator, xGMM runs as a normal non elevated process. UAC may prevent or redirect file operations. 
A mod with conflicts can not be updated or removed until the conflicting mods are deactivated. A warning message will show.
While possible and handled in xGMM, avoid using "=" in your mod names as it is the INI file delimiter.
Group names with "=" will replace it with a "-".
Do not make changes in mod directory structure or files when it is activated.

You can remove files from the game by including a 0 size file with -remove added to the filename (i.e. "filename.ext-remove").
 File will be restored when mod is disabled.

You can generate conflict warnings by including a 0 size file with .conflict extension (ie "ModTypeName.conflict").
 No file is copied, it only create a conflict warning with other mods containing the same file & location.
 Use if your mods has conflicts without sharing file names.
 It will also require uninstall of conflicting mod first.

You can generate warnings if files are reqiured files are missing by including a 0 size file with .required extension (ie "NeededFile.exe.required").
 If you ignore the warning, the file is not included, it only create a dependence warning.

A Pre Install command file can be created. It will be fully executed before mod file scan, so any generated output will be included.
 It must be named "PreInstall.xGMM.cmd" (case ignored) and located in mod base dir.
 To find mod base dir, add "SET CURDIR=%~dp0" as first line, you can then use %CURDIR% as the current mod directory base (includes trailing backslash).
A Post Install command file can be created. It will be fully executed after mod file scan and copy.
 It must be named "PostInstall.xGMM.cmd" (case ignored) and located in mod base dir.
A Post Remove command file can be created. It will be fully executed after mod files are removed.
 It must be named "PostRemove.xGMM.cmd" (case ignored) and located in mod base dir.
"*.xGMM.cmd" files are not included in the mod install.

Hard links are On as default. To make Off default, edit the MODS\JSGME.INI
In the [XGMM OPTIONS] section add "Default Flags=0"

======================
 
Most of the JSGME info and help except as noted above also applies to xGMM.


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

Those not making proper Backups should not use this utility! 
This is potentially destructive beta state software.

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

History:
0.1.0.1
Added update without deactivating.
0.1.0.2
Blocked updating on conflicted mods.
Added command line switch -U: Update all active mods and exit for automated backup.
Read Only files will always be copied, not hard linked as link will be read only.
Read Only files will not be updated when updating mods.
0.1.0.3
Added .required dependece files.
Added preinstall .cmd file.
