Command-line UI handling a full Mods' ecosystem for Bethesda's games.
Heavy mods' user often have hard times when they want to get a stable modded game. A lot of tools are already helping a lot:
Most of the time, gamers have to perform the following tasks every time their mods list changes:
Given those tedious tasks, gamers have basically few choices:
Modsvaskr is here to help gamers do the following:
The goal as a gamer using Modsvaskr is to be able to:
The list of games that should be compatible with Modsvaskr are the following:
The list of supported games in the current version of Modsvaskr is found in the lib/modsvaskr/games
folder.
Adding a new compatible game should be as easy as adding a file in this directory and implementing its API in Ruby.
3 tools and 2 mods are needed for Modsvaskr to work:
Via gem
$ gem install modsvaskr
Using bundler
, add this in your Gemfile
:
gem 'modsvaskr'
Modsvaskr needs a configuration file to be created in the current directory from which it is executed, named modsvaskr.yaml
.
Check the modsvaskr.yaml.sample
file to know how to create it.
Running Modsvaskr is done this way:
modsvaskr
Modsvaskr is a simple command-line UI organized as hierarchical menus, in which you navigate with the arrow keys, page up/down, Home
, End
, Esc
, and select/enter elements using mostly the Enter
key. Specific items may have different actions linked to other keys, documented at the bottom of the UI.
The following sections describe a bit more each main use-case you have with Modsvaskr.
Modsvaskr can automate a lot of testing in your modded game.
For this you go into your game's menu, and select Testing
.
The tests menu will display all tests suites Modsvaskr can run, along with the number of tests passed over the total number of tests registered.
At first no test is registered, so you'll get 0 / 0
tests passed over total.
You first need to discover the possible tests to be run for each tests suite. To do so:
Register tests from selected test suites
. This step will discover all the test cases for the selected suites. Some test suites will require xEdit for this: it will run xEdit automatically (if xEdit prompts you with the list of plugins, keep the default by just hitting OK).Once tests have been registered, you can select which tests you want to run, by selecting (Enter
) each tests suite to be run. Hitting d
on a tests suite will give you details about all the test cases registered for this tests suite, and allow you to select those test cases individually.
Once tests have been selected among the tests suites, you can run those tests by selecting Run remaining selected tests
.
Running tests can require to execute those tests in-game. In such a case, Modsvaskr will use the AutoTest and AutoLoad mods to automatically run tests in your game, and will tell you about it before executing the tests.
Please note that Modsvaskr will not run tests that have already passed successfully. That allows you to interrupt testing anytime and re-run it later without having to change the tests selection.
Once tests have been run, you can check the tests statuses by looking at the counters next to each tests suite in the tests menu, and by looking at individual test case statuses in each tests suite's menu (using the d
key).
In case your game keeps executing tests automatically at game launch and you want it to stop you can just remove the file SKSE/Plugins/StorageUtilData/AutoTest_Config.json
from your game's data folder. It will be re-created the next time you ask for tests to be run automatically.
Here are the different tests suites covered by Modsvaskr.
Test suites are defined as plugins following the pattern lib/modsvaskr/tests_suites/*.rb
. It's simple to add new ones, just by adding new files in this directory.
This suite is using in-game testing.
This suite tests exterior cells by issuing a Center-On-World console command (cow
) on a given exterior cell coordinates and performs a short camera rotation to ensure the cell is loaded properly.
This suite registers tests by getting xEdit information about which vanilla cells are being modified by mods. It won't register tests for cells that are not modified, nor cells that are not vanilla. It will also optimize the choosen cells to test by using the 5x5 grid load of each cell: any cell that is in the 5x5 grid vicinity of another tested cell will not be tested, as in-game testing will anyway have loaded it.
This suite is using in-game testing.
This suite tests interior cells by issuing a Center-On-Cell console command (coc
) on a given exterior cell coordinates and performs a short camera rotation to ensure the cell is loaded properly.
This suite registers tests by getting xEdit information about which vanilla cells are being modified by mods. It won't register tests for cells that are not modified, nor cells that are not vanilla.
This suite is using in-game testing.
This suite tests NPCs by teleporting both the Player and the NPC to a photo-shoot location in a test cell, and taking a screenshot of the NPC to be tested, without any inventory.
This suite registers tests by getting xEdit information about which NPCs are being defined by mods. It will register 1 test per NPC having a full name, whatever the mod defining it.
This suite is using in-game testing.
This suite tests NPCs by teleporting both the Player and the NPC to a photo-shoot location in a test cell, and taking a screenshot of the head-part of the NPC to be tested, without any inventory. Useful to check for neck seams or gaps.
This suite registers tests by getting xEdit information about which NPCs are being defined by mods. It will register 1 test per NPC having a full name, whatever the mod defining it.
Tests execution logs useful information in Modsvaskr logs, which can you read:
See logs
)Modsvaskr.log
)Modsvaskr creates JSON files in your game's Data folder to track its registered tests statuses, following the pattern Modsvaskr/Tests/Statuses_*.json
. In here you'll find all tests statuses.
Example from Modsvaskr/Tests/Statuses_interior_cell.json
[
[
"AAADeleteWhenDoneTestJeremy",
"ok"
],
[
"AbandonedPrison01",
"ok"
],
[
"AbandonedShackInterior",
""
]
]
When selecting your game, you can ask Modsvaskr to easily install SKSE in it. This is useful when SKSE gets upgraded.
By selecting the Install SKSE64
item in the game menu, Modsvaskr will download and install the latest SKSE version in your game folder.
If you run this feature under Mod Organizer, don't forget to save the modified files from the Overwrite mode in a dedicated ModOrganizer mod to not lose them.
Modsvaskr has a menu dedicated to ModOrganizer, where you can see the various mods and plugins configured in Modsvaskr.
Logs of execution of Modsvaskr are stored in the current folder: Modsvaskr.log
.
Here is an example of execution logs:
[ 2020-11-18 13:02:42 ] - Launch Modsvaskr UI v0.0.1 - Logs in C:/Programs/Modsvaskr/Modsvaskr.log
[ 2020-11-18 13:04:41 ] - Launch Game (#0) using configured launcher...
[ 2020-11-18 13:04:51 ] - SkyrimSE.exe has started with PID 13344
[ 2020-11-18 13:04:51 ] - Start monitoring game testing...
[ 2020-11-18 13:06:42 ] - ===== Test statuses changes:
[ 2020-11-18 13:06:42 ] - * NPCs:
[ 2020-11-18 13:06:42 ] - * skyrim.esm/7: ok
[ 2020-11-18 13:06:47 ] - ===== Test statuses changes:
[ 2020-11-18 13:06:47 ] - * NPCs:
[ 2020-11-18 13:06:47 ] - * skyrim.esm/78421: ok
[ 2020-11-18 13:06:47 ] - * skyrim.esm/78428: ok
[ 2020-11-18 13:06:52 ] - ===== Test statuses changes:
[ 2020-11-18 13:06:52 ] - * NPCs:
[ 2020-11-18 13:06:52 ] - * skyrim.esm/78431: ok
[ 2020-11-18 13:06:52 ] - * skyrim.esm/78432: ok
[ 2020-11-18 13:06:58 ] - End monitoring game testing.
[ 2020-11-18 13:06:58 ] - Test statuses after game run:
[ 2020-11-18 13:06:58 ] - [ NPCs ] - 5 / 5 - Next test to perform: None
They are also accessible through Modsvaskr's UI, in the See logs
menu item.
When a new version is available, Modsvaskr will mention it in the header of the main menu:
Updating Modsvaskr to the latest version is done the standard way for any Rubygem:
gem update modsvaskr
Or if you are using Bundler:
bundle update modsvaskr
Please see CHANGELOG for more information on what has changed recently.
Any contribution is welcome:
The BSD License. Please see License File for more information.