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 alpha 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.

Build Instructions

BOSS uses CMake v2.8.9 or later for cross-platform building support, though development takes place on Linux, and the instructions below reflect this. Building on Windows should be straightforward using analogous commands though.

BOSS requires the following libraries:

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.

BOSS also requires GraphVis and Subversion binaries, which can be obtained here and here respectively and should be installed as detailed below.

Alphanum, Libespm and PugiXML do not require any additional setup. The rest of the libraries must be built separately.

Subversion

Put the following binaries into resources/svn/ in the BOSS repository root.

  • int3_svn.dll
  • libapr-1.dll
  • libapriconv-1.dll
  • libaprutil-1.dll
  • libdb48.dll
  • libeay32.dll
  • libsasl.dll
  • libsvn_client-1.dll
  • libsvn_delta-1.dll
  • libsvn_diff-1.dll
  • libsvn_fs-1.dll
  • libsvn_ra-1.dll
  • libsvn_repos-1.dll
  • libsvn_subr-1.dll
  • libsvn_wc-1.dll
  • ssleay32.dll
  • svn.exe

GraphVis

Put the following binaries into resources/graphvis/ in the BOSS repository root, then run dot.exe -c.

  • cdt.dll
  • cgraph.dll
  • dot.exe
  • freetype6.dll
  • gvc.dll
  • gvplugin_core.dll
  • gvplugin_dot_layout.dll
  • gvplugin_gd.dll
  • gvplugin_pango.dll
  • iconv.dll
  • jpeg62.dll
  • libcairo-2.dll
  • libexpat.dll
  • libfontconfig-1.dll
  • libfreetype-6.dll
  • libglib-2.0-0.dll
  • libgmodule-2.0-0.dll
  • libgobject-2.0-0.dll
  • libgthread-2.0-0.dll
  • libpango-1.0-0.dll
  • libpangocairo-1.0-0.dll
  • libpangoft2-1.0-0.dll
  • libpangowin32-1.0-0.dll
  • libpng12.dll
  • libpng14-14.dll
  • libxml2.dll
  • ltdl.dll
  • Pathplan.dll
  • zlib1.dll

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 --stagedir=stage-mingw-32

wxWidgets

./configure --host=i686-w64-mingw32 --disable-shared --enable-stl

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

Libloadorder

Follow the instructions in libloadorder's README.md to build it as a static library.

Libgit2

mkdir build && cd build
cmake .. -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS=-m32 -DPROJECT_ARCH=32 -DCMAKE_TOOLCHAIN_FILE=../BOSSv3/mingw-toolchain.cmake

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.exe expects a v2 masterlist named masterlist.txt to be present in the same directory as it, and produces a v3 masterlist named masterlist.txt.yaml.

The converter is a command line utility and will print any errors in encounters to the console. It also won't create a v3 masterlist file if errors are encountered.

Languages
Rust 69.9%
C++ 28.1%
CMake 1.6%
Python 0.2%