Skip to content
A standalone fan mission loader / manager for the original Thief trilogy.
Branch: master
Clone or download
FenPhoenix Fix corner case where added tag might be rejected
If you had an invalid tag in the textbox and then selected a tag from the menu, it would reject it because it was looking at the textbox for its data, rather than its passed parameter
Latest commit 09c22ca May 21, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
AngelLoader Fix corner case where added tag might be rejected May 21, 2019
AngelLoader_Stub Cleanup May 21, 2019
doc Update doc, and add debug stuff to make screenshots easier in the future May 6, 2019
.gitattributes Vendorify DllExport bat files Mar 21, 2019
.gitignore Add non-tracked folder for release stuff Apr 1, 2019
AngelLoader.sln Guard clause for making sure row was doubleclicked Apr 6, 2019
DllExport.bat Add project files. Mar 14, 2019
DllExport_Configure.bat Add project files. Mar 14, 2019
LICENSE Add license Mar 14, 2019
LICENSE_DllExport Add project files. Mar 14, 2019



AngelLoader is a new fan mission loader for Thief 1, Thief 2, and Thief 3. Current loaders for those games (FMSel, NewDarkLoader) must be attached to each game individually, necessitating multiple installs, multiple setting of config options, the inability to manage all your missions in one place, etc. AngelLoader is a standalone one-stop shop for all your missions: every FM can be viewed, played, edited, installed, and uninstalled from one place.

The list of fan missions is filterable by game and many other criteria, and provides the option to either organize games by tab or to treat them as ordinary filters.

The interface is inspired by DarkLoader (by Björn Henke and Tom N. Harris) and NewDarkLoader (by Robin Collier). AngelLoader emulates the classic DarkLoader/NewDarkLoader UI design, with its simple "everything at your fingertips" layout making for a quick and intuitive experience. It also incorporates features from NewDarkLoader and FMSel, such as tags, filtering, rating, optional audio file conversion, etc.

FM loaders have traditionally had FM scanning functionality, and AngelLoader's scanner is second to none, detecting titles and authors from the trickiest of fan missions with a speed and accuracy rate not seen from any loader before. It also detects NewDark game types accurately, in contrast to DarkLoader which requires manual editing of its .ini file in order for NewDark Thief 1 missions to work.

In short, AngelLoader aims to be a complete successor to DarkLoader, being an all-in-one loader and manager with an intuitive interface, high performance, and many features both classic and modern.


  • Download FMScanner

    • Add FMScanner.csproj to the AngelLoader solution in Visual Studio
    • Add a reference from AngelLoader.csproj to FMScanner.csproj in Visual Studio
  • Download a 32-bit build of FFmpeg (must be 32-bit) or use this custom minimal build

    • For the regular build:
      • Create a folder named "ffmpeg" in the solution base dir.
      • Extract the ffmpeg archive. It should have a bin folder in it. Copy all files from the bin folder to the ffmpeg folder you just created.
    • For the minimal build:
      • Just extract the ffmpeg folder to the solution base dir.
    • My custom build should be a NuGet package, but I can't figure out how to make a NuGet package consisting only of binaries, as no matter what I try it just gleefully vomits out an empty .dll along with the actual stuff
  • (Optional) Download AL_FenGen. Change its Build Events copy line to point to [your AngelLoader solution directory]\FenGen and build it (must be built in Release mode as Debug mode will show a form and not complete automatically!) .*

* AL_FenGen is an extremely Internal ToolTM and liable to screw up spectacularly if you don't have an intimate knowledge of its internal functionings. It's not strictly needed, it just regenerates some files that already exist and which you can edit by hand if you absolutely need to (eg., it generates ini readers and writers in order to avoid runtime reflection, unnecessary IndexOf()s and string concatenations, etc. and therefore achieve the fastest possible performance, which is critical for files of unbounded length that need to be read on startup).

If you're just changing or adding language strings, if you follow the format that's already there, it shouldn't have any problem. Changing the FanMissionData class is much more problematic. Adding fields that are enums (or making changes to enums that are already there) or non-primitive types will most probably require additions to AL_FenGen's code. AL_FenGen is provided as a convenience only.

You can’t perform that action at this time.