Giter VIP home page Giter VIP logo

kortex-mod-manager's Introduction

Kortex Mod Manager is a mod-manager that uses a virtual file system (VFS) to isolate mods to provide simple resolution of conflicts between mods, clean installation and uninstallation.

Visit Kortex website if you want to read more about it. If you have any questions, suggestions or anything else feel free to join our discord server.

Supported games

  • The Elder Scrolls III: Morrowind
  • The Elder Scrolls IV: Oblivion
  • The Elder Scrolls V: Skyrim (including Enderal: Forgotten Stories)
  • The Elder Scrolls V: Skyrim - Special Edition (+VR)
  • Fallout 3
  • Fallout: New Vegas
  • Fallout 4 (+VR)
  • Sacred 2 (experiment with a non-Bethesda game if you wanted to ask why exactly this game)

Virtual file system (VFS)

The virtual file system is the core component of Kortex. It allows to quickly change installed mods without having to copy quite a few gigabytes of data around. With the help of the VFS it's also possible to keep the game folder clean as if you have no mods installed at all.

Advantages of the VFS:

  • Quick mod activation since no files are moved.
  • No original game files lost because original game's folder is untouched.
  • No lost files due to new mod overwritten an old one - all files are still in their folders.
  • Easier file collision detection (not yet implemented).
  • Safe mod installation and uninstallation.

There are also disadvantages, mostly the game's startup speed. Kortex uses its own VFS solution based on Dokany 2 Beta - KxVFS. Dokany is a kernel mode file system driver and that means every IO call (read/write operation) in mounted directory will be served by the driver which requires constant user-to-kernel-to-user jumps. User mode solution like the one used in Mod Organizer or something completely different (symlinks, hardlinks) will be faster. I spent a lot of time optimizing KxVFS. It went from 10 minutes startup time for Skyrim to 1 minute in v2.0a7, I hope you'll appreciate that.

Mod management

Kortex provides pretty much standard set of features for a generic mod manager.

  • Drag and drop load order.
  • Instances and profiles support.
  • Linking files from any folder on the system as a mod.
  • Collapsible separators for mod list.
  • FOMod support (XML only).
  • KMP support (Kortex Mod Package - native mod package format).

Plugin management

Kortex provides plugin management tools for all games it supports. At the moment the plugin management that is available for all Bethesda games includes:

  • Drag and drop load order.
  • Calculating correct load order index (including games with ESL support).
  • Sorting using LOOT (both integrated and as an external program) and for older games BOSS.
  • Import and export of plugins list.
  • Active plugins counter.
  • Plugin dependencies scan.

Package creator

Kortex have built-in installer creation tool. This tool can be used to create full featured install packages in KMP and FOMod format.

Other features

  • Virtual folder explorer
  • Saves manager
  • Program list
  • Download manager
  • More features are covered in the comparison table.

Change log

Look here: https://kerberx.github.io/Kortex-Mod-Manager/?page=version-history

Usage info

  • Windows 7 and newer, x64 system is strongly recommended.
  • MSVC 2015-2019 redistributable packages, both for x86 and x86.
  • At least 2GB of RAM.

Installation

Unpack from the archive to any directory (not in the directory with the game). After first installation (or after updating) run Kortex as an administrator. When updating, follow the removal instructions and then the installation instructions.

Uninstallation

Close the program, delete the VFS service by typing the command sc delete KortexVFS in Windows console (cmd.exe, run it as administrator), restart the computer and delete the program's files.

Update

  • 1.x -> 1.3: Plugins order and activation state will be reset, mod order and state should remain untouched.
  • 1.3 -> 2.x: Should probably work without significant issues.

Download location

Building

This paragraph is under construction

Dependencies

MSVC2019+

  • Install KxFramework (using VCPkg) following its building instructions.
  • Install additional packages with VCPkg: kxvfs, libloot (not available yet, manual installation is required for now).
  • Build Release configuration for x86 and x64.

kortex-mod-manager's People

Contributors

al12rs avatar daivan avatar felesnoctis avatar infernio avatar karandra avatar sharlikran avatar yggdrasil75 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

kortex-mod-manager's Issues

Add custom editor dialog for program in program list

Description

Currently program can be edited using inline editor in the list itself. The list is not well suited for such task because program options can be quite long and that requires list to have a horizontal scroll bar. That's not really convenient so I think custom editor dialog would be better.

Tasks

  • Create editor dialog.

Add predefined command line arguments to programs

Description

Some programs can use command line arguments ton configure their behavior. Some of them has this as the only way to use their features. Often user need to quickly change some command line arguments to run program in different mode and it's really inconvenient to specify cmd-line args by hand every time (I'm looking at you, xEdit).

So I'm thinking of an option to specify list of known command line options. User would check required options and Kortex will format final cmd-line automatically.

That requires following:

  • Either store cmd options with program entry or store them separately and link later.
  • Specify format rules because different programs pareses their cmd-line parameters differently.
  • Allow to specify cmd options order. Some programs are sensitive to options order (xEdit again).

Rework About dialog

Description

With added license and opening the source about dialog need to be changed.

Tasks

  • Create separate tab for used libraries and tools. Include license for every library.
  • Remove unwanted entries from Modules tab and put in order module versioning. Most of entries there don't need their own version.
  • Replace Permissions tab by License tab,

Rewrite config manager

Description

Game configurator and it's backend KConfigManager is oldest module that remains untouched after introducing KDispatcher and moving to KxDataViewCtrl as new tree-view control. Because of that it's currently broken and maintained just enough to not interfere compilation. Quite a hard work, probably requires full rewrite.

It must be redone using KxDataViewCtrl and KDispatcher as new version can not be released when one of main modules in such horrid state.

Required features

  • Use of newest KxDataViewCtrl features such as dynamic inline editors.
  • Allow inherit config definition from another definition.
  • Allow to inject user config definition into system definition.
  • Support for ENB configuration.
  • Allow to undo changes.
  • Design backend to work with formats other than INI (XML for example).
  • Allow to add descriptions to any config option.

Allow install arbitrary archives with InstallWizard

Description

Currently Kortex doesn't support installing archives without install configuration (either native or FOMod). Most of mod archives on Nexus and other websites don't have any install configuration so it's important to implement such feature for next version. Especially because Mod Organizer (MO) supports that (and maybe Vortex too).

Tasks

  • Implement folder enumeration for KArchive.
  • Automatic Mod ID extraction from archive name. This task probably need delegation to NetworkProvider.
  • Create special UI to select what to install similar to one from MO.

2018-01-16_17h03_16

UNC paths aren't supported

UNC paths such as network share paths (\\SERVER\Share\Path1\...) aren't supported in Kortex. Underlying mechanisms in KxFramework don't understand them very well and generally don't work with them.

As a workaround it's recommended to create a network drive from an UNC path and use it instead.

Allow users to create game definitions

Description

Kortex don't use hardcoded game information to support a game. Instead it uses special configuration files - instance templates. All games support is implemented using these templates with some exceptions. Exceptions is PluginManager and SaveManager.

These managers must implement their interface for requested game. Instance template specifies what interface it need. There is no completely generic implementation for any game. There is however generic implementation of plugin manager for Bethesda games and its more specialized version for Morrowind and Bethesda games with ESL support. SaveManager does not implement any interface, but it must provide a factory function that creates a save file object that implements save interface for requested game.

Even now user can copy one of existing templates, modify it and use it to allow Kortex support new game. This however requires some knowledge about what you can change in template file and what options are supported.

This enhancement is not assigned to the milestone because it's quite hard to implement in time given that there is so much more important tasks.

Required features

  • Specify dedicated folder for user templates.
  • Remove any hardcoded things from PluginManager and other places.
  • Create UI to modify template.
  • Review instance file structure because I won't be able to change it as freely as I can right now. Or I can, but at the cost of maintaining backward compatibility layer.
  • Write Wiki page about instance templates and how they work.

Allow install engine use Kortex environment variables

Description

All variables that install engine could use is created by package author with exception of requirement group variables which is automatic (though requirement groups is created by package author).

I can see some benefits in allowing to use environment variables to create conditional install that depends not only on installer and requirements state, but also on system state.

Tasks

  • Allow install engine recognize and check environment variables.
  • Add window to select environment variable from their list instead of typing it by hand.
  • Write Wiki article about Kortex environment variables.

Use namespace instead of "K" prefix

Description

It could be better to remove K prefix from all Kortex classes, namespaces and free function and put them all in new Kortex namespace with additional namespace for every module (like PluginManager). This will improve overall program structure and reduce name length for some classes.

Problems

One problem I see (aside from choosing good names) is include files and file structure. Files are already grouped in modules, so there is not much to change there except removing prefix from the file name.

Another problem is very long include list for some files. I really want to get rid of them and currently I see no better solution than combined include file per module. For example there would be PluginManager.h file that will include every public header of this module. Same scheme but with forward declarations can also be added.

Third issue is project folder for source code. I want include path to have one generic include path so it would be possible to use it like this:

#include <Kortex\Application.h>
#include <Kortex\InstanceManagement.h>
#include <Kortex\PluginManager.h>

The problem here is files location Kortex/Source where Kortex is project folder and Source is source code folder. If I use Kortex folder as include path, then I will have to use Source\Application.h as include file name. Renaming Source to Kortex will solve that, but creates a bit ugly looking full path with duplicate Kortex inside it. Though this way it will be consistent with KxFramework includes (which need same namespace redesign).

Advantages

  • Better categorization and navigation (I hope).
  • Shorter class names.
  • Better integration of other libraries into Kortex (no name clashes) and integration Kortex as library into another codebase (plugins).

Difficulty

The entire process isn't much difficult itself, but requires thoughtful actions in order not to redo the whole thing over again. Also requires many manual work of moving and renaming files and classes, creating some additional files, changing includes and such. Quite long process, and most important that if it's started it must be done when no other work on program code is in progress.

Add support for The Witcher 3: Wild Hunt

Description

Add support for The Witcher 3: Wild Hunt, as requested by @Project579. This kind of related to #10, but support for Witcher 3 may require another plugin manager implementation and some other things rendering it impossible to provide support with just an instance template.

Tasks

  • Research Witcher 3 mods system
  • Create new plugin manager implementation if needed.
  • Create instance template.

General enhancement list

This is the list of planned improvements

They are not tied to any particular release. I will work on them when it's would be a good time to implement them.

When another release is ready some of them will be moved to their own issue and assigned to milestone.

So, the list

  • Mod lists backup functionality.
  • Support for BAIN.
  • Support for OMOD.
  • Maybe add option to generate fully NMM and MO compatible FOMod when really complex requirements configuration is present.
  • Drag-and-move image in image viewer.
  • Allow file operations on currently selected file in packages list.
  • Test network functions when no internet connection available.
  • New app settings window UI. Right now it uses ConfigManager UI.
  • Web functions for known providers.
    • NexusMods
    • LoversLab
    • TESALL.RU

Add window to see all assigned condition variables and values assigned to them

Description

This could be useful for complex installers that heavily depends on requirements checking and/or uses conditional install.

Required features

  • Window with list of all created variables with pointers to locations where they are defined.
  • List of all values assigned to this variable and location where the value is assigned.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.