Morrowind
0 of 0

File information

Last updated

Original upload

Created by

alvazir

Uploaded by

alvazir

Virus scan

Safe to use

Tags for this mod

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
Preface:
Spoiler:  
Show

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 subrecords
    Spoiler:  
    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.
    • 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.
    • 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 lists
    Spoiler:  
    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 help
    Spoiler:  
    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 output
    Spoiler:  
    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

Changelog:
Spoiler:  
Show

  • 0.5.0
    • Breaking changes
      • 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.
    • 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.
  • 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%
        • --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.
    • Fixes
      • 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.
  • 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.
    • 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.
  • 0.2.1
    • Fixes
      • Ignore plugins that contain non-TES3 record types(LUAL) automatically thanks to GeneralUlfric's report.
  • 0.2.0
    • Breaking changes
      • 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.
        • 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.
        • 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.
    • 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).
    • 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.
  • 0.1.0
    • Initial release


Files:
Download file contains executables for all platforms I've decided to target(tell me if you need another platform):
Spoiler:  
Show

  • Linux_x86-64
    Spoiler:  
    Show
    • Testing status:OK
    • Tested on Arch, though it should work everywhere else.
  • Linux_x86-64_MUSL
    Spoiler:  
    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_AArch64
    Spoiler:  
    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_MSVC
    Spoiler:  
    Show
    • Testing status:OK(WINE)
    • Use MSVC build first.
  • Windows_x86-64_GNU
    Spoiler:  
    Show
    • Testing status:OK(WINE)
    • GNU build is a fallback variant in case MSVC build doesn't work.
  • macOS_x86-64
    Spoiler:  
    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]
  • macOS_AArch64
    Spoiler:  
    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]


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.