BOSSv3
Introduction
BOSS is a plugin load order optimiser for TES IV: Oblivion, TES V: Skyrim, Fallout 3 and Fallout: New Vegas. It is designed to assist mod users in avoiding detrimental conflicts, by automatically calculating a load order that satisfies all plugin dependencies and maximises each plugin's impact on the user's game.
BOSS also provides some load order error checking, including checks for requirements, incompatibilities and cyclic dependencies. In addition, it provides a large number of plugin-specific usage notes, bug wawrnings and Bash Tag suggestions.
Although BOSS is able to calculate the correct load order positions for the vast majority of mods without any user input, some plugins are designed to load at certain positions in a load order, and BOSS may be unable to determine this from the plugins themselves. As such, BOSS provides a mechanism for supplying additional plugin metadata so that it may sort them correctly.
BOSS is intended to make using mods easier, and mod users should still possess a working knowledge of mod load ordering. See the "Introduction To Load Orders" section of the BOSS readme for an overview.
Downloading BOSS
At the moment, BOSSv3 is in beta testing, and so is not recommended for use unless for testing purposes. The load orders it produces should not be used in-game unless found to be valid by manual checking beforehand. Any releases can be found by clicking on the releases button above the coloured bar on the repository homepage.
About This Repository
This repository holds the source code and documentation for BOSS v3. The masterlists for v3 are stored in separate repostories on GitHub. The source code, documentation and masterlists for previous versions of BOSS are stored on Google Code.
Building BOSS
BOSS uses CMake v2.8.9 or later for cross-platform building support, as though it is a Windows application, development has taken place on Windows and Linux.
BOSS requires the following libraries (version numbers used in latest development revision given):
- Alphanum
- Boost v1.55.0.
- Libespm
- Libgit2 v0.20.0.
- Libloadorder
- OpenSSL - only if HTTPS support in libgit2 is required using compilers other than MSVC.
- PugiXML v1.2.
- wxWidgets v3.0.0.
- yaml-cpp.
- zlib v1.2.8.
BOSS expects all libraries' folders to be present alongside the BOSS repository folder that contains this readme, or otherwise installed such that the compiler and linker used can find them without suppling additional paths. All paths below are relative to the folder(s) containing the libraries and BOSS.
Alphanum, Libespm and PugiXML do not require any additional setup. The rest of the libraries must be built separately. Instructions for building them and BOSS itself on Windows and Linux are given below. They assume that Visual C++ 2013 is being used on Windows, and mingw-w64 is being used on Linux, though they should be similar for other compilers.
Windows
Boost
bootstrap.bat
b2 toolset=msvc-12.0 threadapi=win32 link=static variant=release address-model=32 --with-log --with-date_time --with-thread --with-filesystem --with-locale --with-regex --with-system --with-iostreams --stagedir=stage-32
wxWidgets
Just build the solution provided by wxWidgets.
zlib
- Add
/safesehto both lines incontrib\masmx86\bld_ml32.bat. - Build the solution in
contrib\vstudio. - Copy
build\zconf.hto.\zconf.h.
yaml-cpp
- Set CMake up so that it builds the binaries in the
buildsubdirectory of the yaml-cpp folder. - Define
BOOST_ROOTto point to where the Boost folder is. - Configure CMake, then generate a build system for Visual Studio 12.
- Open the generated solution file, and build it.
Libloadorder
Follow the instructions in libloadorder's README.md to build it as a static library.
Libgit2
- Set CMake up so that it builds the binaries in the
buildsubdirectory of the libgit2 folder. - Configure CMake.
- Undefine
BUILD_SHARED_LIBS. - Generate a build system for Visual Studio 12.
- Open the generated solution file, and build it.
You may need to make sure that the configuration properties for the Visual Studio project are set to use the multithreaded DLL runtime library (C/C++->Code Generation).
BOSS
- Set CMake up so that it builds the binaries in the
buildsubdirectory of the BOSS folder. - Define
PROJECT_ARCH=32orPROJECT_ARCH=64to build 32 or 64 bit executables respectively. - Define
PROJECT_LINK=STATICto build a static API, orPROJECT_LINK=SHAREDto build a DLL API. - Define
PROEJCT_LIBS_DIRto point to the folder holding all the required libraries' folders. - Configure CMake, then generate a build system for Visual Studio 12.
- Open the generated solution file, and build it.
If building on MSVC 2012 or 2013, Windows XP is not supported unless Configuration Properties->Platform Toolset is set to v120_xp.
Linux
Boost
./bootstrap.sh
echo "using gcc : 4.6.3 : i686-w64-mingw32-g++ : <rc>i686-w64-mingw32-windres <archiver>i686-w64-mingw32-ar <ranlib>i686-w64-mingw32-ranlib ;" > tools/build/v2/user-config.jam
./b2 toolset=gcc-4.6.3 target-os=windows threadapi=win32 link=static runtime-link=static variant=release address-model=32 cxxflags=-fPIC --with-log --with-date_time --with-thread --with-filesystem --with-locale --with-regex --with-system --with-iostreams --stagedir=stage-32
wxWidgets
./configure --host=i686-w64-mingw32 --disable-shared --enable-stl
make
zlib
mkdir build && cd build
cmake .. -DCMAKE_C_FLAGS=-m32 -DPROJECT_ARCH=32 -DCMAKE_TOOLCHAIN_FILE=../BOSSv3/mingw-toolchain.cmake
make
cp zconf.h ../zconf.h
yaml-cpp
cmake . -DCMAKE_C_FLAGS=-m32 -DPROJECT_ARCH=32 -DCMAKE_TOOLCHAIN_FILE=../BOSSv3/mingw-toolchain.cmake -DBOOST_ROOT=../boost
make
Libloadorder
Follow the instructions in libloadorder's README.md to build it as a static library.
OpenSSL
./Configure --cross-compile-prefix=i686-w64-mingw32- mingw
make
Libgit2
mkdir build && cd build
cmake .. -DBUILD_SHARED_LIBS=OFF -DOPENSSL_ROOT_DIR=../openssl -DCMAKE_C_FLAGS=-m32 -DPROJECT_ARCH=32 -DCMAKE_TOOLCHAIN_FILE=../BOSSv3/mingw-toolchain.cmake
make
If building with SSL support using OpenSSL, also pass ``.
BOSS
mkdir build && cd build
cmake .. -DPROJECT_LIBS_DIR=".." -DPROJECT_ARCH=32 -DPROJECT_LINK=STATIC -DCMAKE_TOOLCHAIN_FILE="mingw-toolchain.cmake"
make
Using The Masterlist Converter
The masterlist converter is a command line utility that takes two optional command line arguments:
masterlist-converter.exe [v2 masterlist input file] [v3 masterlist output file]
If only one argument is given, or if no arguments are given, the converter assumes it was called as
masterlist-converter.exe masterlist.txt masterlist.yaml
On encountering an error, it will print an error message to the console, and will not output a v3 masterlist.
The converter does not perform a lossless conversion. The following do not get transferred into the new masterlist:
- Silent comments. (Search regex:
^IF(NOT)?.+MOD:.) - Plugin conditions. (Search regex:
REQ:.+(\.esp|\.esm).) - Requirement messages containing plugin filenames. (Search regex:
^(/\*|//).) - Dirty message content. The ITM, UDR and Navmesh counts, along with CRCs and the dirty utility referenced are transferred, but any additional content, such as links to additional instructions, are lost. (Search regex:
DIRTY:.)
In addition, while other data is retained, it needs some manual adjustment, eg. translated messages need are converted as separate messages and should be placed into message content objects.
Packaging Releases
Installer and zip archive releases for the main BOSS application can be handled by running the scripts installer.nsi and archive.py in the src folder respectively. The installer script requires NSIS 3 to be installed, while the archive script requires Python to be installed.