About this mod
Jobasha will perfectly organize all your lists in his library. It is a command line tool for leveled list merging, deleveling and comparison.
- Requirements
- Permissions and credits
- Changelogs
Release announcement
Goals:
There are a bunch of leveled list tools already, but I've decided to make another one nevertheless. My goals were:
- Get merged leveled lists the way I consider correct. E.g. deleted subrecords should go away, there should not be redundant lists in result plugin etc. I haven't been able to get the desired leveled lists result with existing tools. For the past 2 years I've used shell script that ran both OMWLLF and tes3cmd, then mixed output to almost satisfactory result. I've also tried extracting leveled lists from delta-plugin and TES3Merge(don't remember exact details about TES3Merge, but I suppose result differed from what I expected). Tes3cmd v0.40 is the perfect tool for anything, but I've failed to tell it to stop sorting plugins by modification date when creating multipatch.
- Get merged leveled lists where I want. E.g. it should be easier to make merged leveled lists on Android.
- Optionally get more details. E.g. which subrecords were deleted from which list, why list was(or wasn't) placed into the result plugin etc. I'm a control freak when it comes to Morrowind modding - too much conflict solving :-/
- Being able to customize/extend leveled list merging a bit. E.g. I love abot's deleveler and run it(modified to suit my needs) after merging leveled lists. It'd be great to combine both steps to make it faster and more convenient.
Description:
Jobasha will perfectly organize all your lists in his library. It is a command line tool for leveled list merging, deleveling and comparison.
Features:
- Merge leveled lists
- Delete subrecords from merged leveled lists
- Delevel subrecordsSpoiler:Show
- By default all lists are deleveled to level 1 with --delev flag(short -d).
- You may set another level to delevel to with --delev-to flag(short -t):
- jobasha -dt 5 to delevel everything higher than level 5 to level 5.
- jobasha -dt 5 to delevel everything higher than level 5 to level 5.
- You may set different levels to delevel to for creatures and items.
- You may opt out from deleveling either creatures or items:
- jobasha --delev --delev-no-items to delevel only creatures.
- jobasha --delev --delev-no-items to delevel only creatures.
- You may place deleveled list into a separate output plugin.
- Compare leveled lists between plugins
- Process both Morrowind.ini and openmw.cfg
- Show detailed information
Usage:
- Most basic usage: jobasha to merge leveled listsSpoiler:Show
The program is flexible and allows complicated scenarios, though basic usage is simple:
1. To provide non-default game configuration file:
jobasha -c C:\another\profile\openmw.cfg
2. To delevel subrecords to level 1 in addition to merging leveled lists:
jobasha -d
3. To delevel subrecords to level 5 in addition to merging leveled lists:
jobasha -dt 5
4. Almost everything may be done with command-line arguments, though settings file is the better way for advanced usage:
To create settings file: jobasha --settings-write
To use it: jobasha - Type command jobasha -h for brief helpSpoiler:Show
Jobasha - TES3 leveled list tool
Usage: jobasha [OPTIONS]
Options:
-c, --config <PATH>Path to the game configuration file
-o, --output <PATH>Name of the output plugin
-O, --output-dir <PATH> Name of the output plugin directory
--dateAdd date to the output plugin name
--dry-runDo not write output plugin
-l, --log <PATH>Name of the log file
-L, --no-log Do not write log
-s, --settings <PATH> Name of the program settings file
--settings-write Write default program settings file and exit
--no-backup Do not make backups
--ignore-errorsIgnore non-critical errors
-?, --help-option <OPTION> Print help for the specific option
-h, --helpPrint help (see more with '--help')
-V, --versionPrint version
Filters:
-a, --all-listsPlace all leveled lists into the output plugin
-k, --skip-last <0> Do not process last <N> plugins
-K, --skip <PLUGIN(S)> Do not process these plugins
--no-skip-defaultDo not skip plugins defined by default
--skip-unexpected-tags Skip plugins that contain unexpected record types
--no-skip-unexpected-tags-default Do not skip plugins that contain known unexpected record types
--skip-creatures Do not process creature leveled lists
--skip-items Do not process item leveled lists
Subrecord deletion:
-X, --no-deleteDo not delete subrecords from leveled lists
-x, --extended-deleteEnable extended delete mode
-A, --always-delete <PLUGIN(S)> List of plugins to delete subrecords
-N, --never-delete <PLUGIN(S)>Do not delete subrecords from these plugins
--threshold-creatures <67>Threshold for % of deleted/initial creatures per list
--threshold-items <49> Threshold for % of deleted/initial items per list
-T, --no-threshold-warningsDo not show threshold warnings
Delev:
-d, --delevDelevel subrecords mode
-t, --delev-to <1> Set level to delevel subrecords to
--delev-creatures-to <LVL> Set level to delevel creature subrecords to
--delev-items-to <LVL>Set level to delevel item subrecords to
-D, --delev-distinctPlace deleveled lists into the additional output plugin
--delev-output <PATH> Name of the distinct delev output plugin
-r, --delev-random Delevel to a random level between original and target levels
-g, --delev-segment <0>Set level to segment subrecords for different delev rules
--delev-creatures-segment <0> Set level to segment creature subrecords for different delev rules
--delev-items-segment <0>Set level to segment item subrecords for different delev rules
-G, --delev-segment-progressive Make multiple equal delev segments after the first one
--delev-segment-ratio <50> Set minimal level to delev to for the segment via % ratio
Delev filters:
--delev-skip-creatures Do not delevel creature subrecords
-I, --delev-skip-itemsDo not delevel item subrecords
--delev-skip-list <LIST(S)>Do not delevel these lists
--delev-no-skip-list <LIST(S)>Delevel these lists even if they match --delev-skip-list
--delev-skip-subrecord <SUBRECORD(S)> Do not delevel these subrecords
--delev-no-skip-subrecord <SUBRECORD(S)> Delevel these subrecords even if they match --delev-skip-subrecord
Compare:
--no-compare Do not compare plugins
-C, --compare-only <PATH> Do not merge anything, only compare plugins [aliases: compare]
-W, --compare-with <PATH> Plugin to compare output plugin with [aliases: with]
--compare-delev-with <PATH> Plugin to compare delev output plugin with
--compare-common Compare common records only [aliases: common]
Display output:
-v, --verbose... Show more information
-q, --quiet Do not show anything
-B, --progress Show plugins reading progress
-b, --progress-barShow plugins reading progress bar [aliases: bar]
-p, --color Show colored output [aliases: pretty]
-y, --no-press-enter-to-exit Do not pause at the end
-Y, --press-enter-to-exit Pause at the end with "Press enter to exit..."
-S, --no-summary Do not show summary - Type command jobasha --help for extended help
- Type command jobasha -? <OPTION> to get extended help for a specific option
- Example display outputSpoiler:Show
$./jobasha --color --delev
Log is being written into "/home/alvazir/__OMW/jobasha.log"
Found game configuration file "/home/alvazir/.config/openmw/openmw.cfg"
Plugin "MergedLeveledLists - 2023-11-13.esp" will be skipped, because it's name matches output plugin name pattern "mergedleveledlists - "
555 subrecords from 143 leveled lists were deleted, add -v or check log for details
97 merged leveled lists were identical to last loaded lists hence not placed into the output plugin, add -vv or check log for details
6813 subrecords from 925 leveled lists were deleveled, add -vvv or check log for details
Plugin "MergedLeveledLists - 2023-11-18.esp" was written to "MergedLeveledLists - 2023-11-18.esp"
Performance: 1.891s duration, 19 plugins(420917 records) read at 10/s(229701/s)
Lists stats: 6329 total, 5842 unique, 988 placed, 14 masters
Merge stats: 341 merged, 210 untouched, 131 placed, 555 subrecords deleted
Delev stats: 925 deleveled, 925 placed, 6813 subrecords deleveled
Place "MergedLeveledLists - 2023-11-18.esp" last in load order and activate
- 0.5.0
- Breaking changes
- Several short option names has been changed(--no-delete, --extended-delete).
- Several short option names has been changed(--no-delete, --extended-delete).
- New features
- Add --delev-random(short r) to delevel to a random level between original and target levels.
- Skip multipatch.esp(tes3cmd) by default(optional).
- Make program halt at the end and wait for keypress when run without arguments. That's primarily done to prevent terminal window immediately closing when run in Windows by double-click(thanks to Walkihr for feedback).
- Fixes
- Fix formatting and bug in threshold messages output.
- Fix formatting and bug in threshold messages output.
- Miscellaneous
- Add Docs folder to release with settings(jobasha.toml) and help files(help_brief.txt, help_extended.txt). That's to be used when program is run in Windows by double-click(thanks to Walkihr for feedback).
- Print suggestion to add --all-lists when multipatch.esp is skipped.
- Add program run configuration output to log file(or to display with very verbose output -vvvv), showing used command-line arguments, non-default options and settings.
- Breaking changes
- 0.4.0
- Breaking changes
- Option to add datestamp to the output plugin name is now opt-in(--date) instead of opt-out(--no-date).
- Several short option names has been changed(--color, --progress, --progress-bar).
- New features
- Add "hidden" OpenMW-CS data directory to the list of plugin directories.
- Add --compare-only option to only compare 2 plugins without merging anything.
- Add --compare-common option to only show changes to common Masters and Lists.
- Add several options to allow more complicated deleveling. Check help for examples:
- --delev-segment(short g) to make partial deleveling for subrecords with level greater or equal to the value. Example usage: you want to delevel almost everything to level 1, but don't want to encounter anything 21+ at level 1. Passing --delev-segment 21 would make anything 21+ to be deleveled to 11 minimum by default(roughly halved). Formula is:
- new-level = delev-to + (delev-segment - delev-to) * (delev-segment-ratio / 100%)
- default value for delev-to is 1
- default value for delev-segment-ratio is 50%
- new-level = delev-to + (delev-segment - delev-to) * (delev-segment-ratio / 100%)
- --delev-segment-progressive(short G) to make multiple equal segments, e.g. 21+, 41+ etc.
- --delev-segment-ratio(defaults to 50%) to set minimal level to delevel to for the segment.
- --delev-segment(short g) to make partial deleveling for subrecords with level greater or equal to the value. Example usage: you want to delevel almost everything to level 1, but don't want to encounter anything 21+ at level 1. Passing --delev-segment 21 would make anything 21+ to be deleveled to 11 minimum by default(roughly halved). Formula is:
- Fixes
- Ignore plugins that contain non-TES3 record types(CELL::XSCL, TES3::FORM).
- Ignore plugins that contain non-TES3 record types(CELL::XSCL, TES3::FORM).
- Miscellaneous
- Print suggestion to add --all-lists when merged.omwaddon is skipped.
- Print suggestion to add --all-lists or set LEVC = false and LEVI = false in TES3Merge.ini when Merged Objects.esp is skipped.
- Provide exit code 3 when plugins differ in --compare-only mode.
- Add musl Linux build to be used when glibc shipped with OS is old.
- Breaking changes
- 0.3.0
- Breaking changes
- Rename --no-creatures to --skip-creatures to be in line with similar options.
- Rename --no-items to --skip-items to be in line with similar options.
- New features
- Compare plugins:
- Enabled by default and compares output plugin with it's previous version(if there is one).
- Add --no-compare option to disable comparison.
- Add --compare-with option to compare with another plugin instead of previous version.
- New delevel filters:
- Add --delev-skip-list option to skip leveled lists by name.
- Add --delev-skip-subrecords option to skip subrecords(items, creatures) by name.
- Auto-backup of previous output plugin(s):
- Add --no-backup option to stop making backups of output plugins, log file and settings file.
- Add --no-backup option to stop making backups of output plugins, log file and settings file.
- Compare plugins:
- Miscellaneous
- Rename instead of copy for backups to preserve timestamps.
- Increase verbosity level required to display details on deleted subrecords.
- All backups now have .backup file extension.
- Reword several messages.
- Breaking changes
- 0.2.1
- Fixes
- Ignore plugins that contain non-TES3 record types(LUAL) automatically thanks to GeneralUlfric's report.
- Ignore plugins that contain non-TES3 record types(LUAL) automatically thanks to GeneralUlfric's report.
- Fixes
- 0.2.0
- Breaking changes
- Several option names has been changed.
- Several option names has been changed.
- New features
- Delevel leveled lists:
- By default all lists are deleveled to level 1 with --delev flag(short -d).
- You may set another level to delevel to with --delev-to flag(short -t):
- jobasha -dt 5 to delevel everything higher than level 5 to level 5.
- jobasha -dt 5 to delevel everything higher than level 5 to level 5.
- You may set different levels to delevel to for creatures and items.
- You may opt out from deleveling either creatures or items:
- jobasha --delev --delev-no-items to delevel only creatures.
- jobasha --delev --delev-no-items to delevel only creatures.
- You may place deleveled list into a separate output plugin.
- Skip Merged Objects.esp(TES3Merge) and merged.omwaddon(Delta) by default(optional).
- Ignore omwscripts plugins automatically(thanks to Zerafall's report).
- -? option to get help for individual option, because extended help jobasha --help became too long to quickly find something.
- Delevel leveled lists:
- Feature enhancements
- Change summary format to adapt for delev stats.
- Auto-backup of previous log and settings files.
- More forgiving argument names processing. For example --run-dry would be treated as correct form of --dry-run.
- Fixes
- Display proper error when encountering empty/corrupted game configuration file(thanks to Zerafall's report).
- Display proper error when encountering empty/corrupted game configuration file(thanks to Zerafall's report).
- Miscellaneous
- Change license from dual MIT and UNLICENSE to GNU GPLv3.
- Rename program from "Jobasha - yet another TES3 leveled list tool" to "Jobasha - TES3 leveled list merging and deleveling tool".
- Add system requirements to description.
- Update versions of rust and all dependencies, notably tes3 library to latest commit(2fae07a0).
- Improve filesystem-related error messages.
- Switch --color, --progress and --progress-bar behaviour from opt-out to opt-in for maximum compatibility with Windows.
- Breaking changes
- 0.1.0
- Initial release
- Initial release
Files:
Download file contains executables for all platforms I've decided to target(tell me if you need another platform):
- Linux_x86-64Spoiler:Show
- Testing status:OK
- Tested on Arch, though it should work everywhere else.
- Linux_x86-64_MUSLSpoiler:Show
- Only use MUSL build when regular version doesn't work due to old GLIBC(MUSL version is slower).
- Testing status:OK
- Tested on Arch, though it should work everywhere else.
- Android_AArch64Spoiler:Show
- Testing status:OK
- Example usage:
- Install Termux(F-Droid, Google Play)
- Grant Storage permission to Termux
- Download file from Nexus Mods
- Open Termux
- (extra, unzip should be installed by default) Install unzip to extract Android build from downloaded file `pkg install unzip`
- Copy downloaded file into Termux's home directory `cp /storage/emulated/0/Download/Jobasha.zip .`
- Unzip required build `unzip Jobasha.zip`
- Copy extracted file into Termux's home directory `cp Jobasha/android_aarch64/jobasha .`
- Run application `./jobasha`
- Copy result file into desired location `cp MergedLeveledLists - 2023-04-20.esp /storage/emulated/0/mods/leveled_lists/`
- Add `MergedLeveledLists - 2023-04-20.esp` into `omw/config/openmw.cfg`
- Windows_x86-64_MSVCSpoiler:Show
- Testing status:OK(WINE)
- Use MSVC build first.
- Windows_x86-64_GNUSpoiler:Show
- Testing status:OK(WINE)
- GNU build is a fallback variant in case MSVC build doesn't work.
- macOS_x86-64Spoiler:Show
- Testing status:Runs
- This build is for Intel CPUs. Better use AArch64 build with ARM Macs, though this build also works(through Rosetta I suppose).
- MacOS will warn you that application is not signed, so either make following steps or build application yourself(it's easy):
- You'll see message trying to run application:
“jobasha” can’t be opened because Apple cannot check it for malicious software. - Click [OK]
- Go to System Preferences -> Security & Privacy -> click [Allow Anyway]
- Run application again and click [Open]
- You'll see message trying to run application:
- macOS_AArch64Spoiler:Show
- Testing status:Runs
- This build is for ARM CPUs(M1 etc).
- MacOS will warn you that application is not signed, so either make following steps or build application yourself(it's easy):
- You'll see message trying to run application:
“jobasha” can’t be opened because Apple cannot check it for malicious software. - Click [OK]
- Go to System Preferences -> Security & Privacy -> click [Allow Anyway]
- Run application again and click [Open]
- You'll see message trying to run application:
System requirements:
- OS: non-ancient(10-15 years old or younger): Linux kernel 3.2+, Android 4.4(KitKat)+, Windows 7+, macOS 12.3(Monterey)+.
- Memory: ~5x the size of the largest plugin(1GB should be enough for everything), e.g. ~350MB for Morrowind.esm(77MB), ~850MB for TR_Mainland.esm from Tamriel Rebuilt v23.10(167MB).
- Morrowind engine MO2(Mod Organizer) users need ModOrganizer-to-OpenMW to generate openmw.cfg.
Repository:
GitHub
License:
Licensed under the GNU GPLv3.
Image of Jobasha comes from UESP under the Attribution-ShareAlike 2.5 License
Acknowledgments:
This project came to life thanks to the awesome tes3 library by Greatness7(GitHub).
Tools that also work with leveled lists(and do much more):
My other projects:
- alvazir's various patches - Collection of compatibility patches, fixes, mod expansions and tiny mods.
- BTBGIsation - BTBGI balance changes for Project Tamriel and other mods.
- Habasi - TES3 plugin merging and utility tool. Habasi will steal your precious plugins and stash them.