A fan mission loader for Thief Gold, Thief II: The Metal Age, Thief: Deadly Shadows, and System Shock 2
Table of contents
- Getting started
- Main window
- Settings window
- Windows 7 SP1, Windows 8.1, or Windows 10 Anniversary Update or newer
- .NET Framework 4.7.2 or newer (the Windows version requirements are a direct result of this)
Program Files (x86)).
Some examples of good locations might be
When you start AngelLoader for the first time, you'll see the initial setup window:
LanguageIf other languages are available, you can choose them here. Changes will take effect immediately.
Thief 1, Thief 2 and System Shock 2 must be patched with NewDark in order for AngelLoader to be able to use them. Thief 3 must be patched with the Sneaky Upgrade. Version 188.8.131.52 or above is recommended; while versions as far back as 1.1.3 may work, they haven't been tested and are not officially supported.
Steam optionsIf you own one or more supported games on Steam, you can specify the location of
steam.exeand choose which games should be launched through it. Launching a game in this way enables access to Steam features such as the in-game overlay, play time counter, etc.
FM archive pathsHere you can set the directory or directories where your fan mission archives (.zip or .7z files) are located. If you enable "Include subfolders", then all subfolders inside all directories you specify will also be searched for FM archives (this matches NewDarkLoader's behavior). Otherwise, only the exact directories you specify will be searched. A note on fan mission archive directories: Because multiple directories are allowed, there is the potential for duplicate files. In this case, AngelLoader will simply use the first file it finds, and ignore any further files with the same name. It is recommended that you don't put duplicate files in your archive directories, but if you do, then as long as they're exact copies (ie., not different files with the same name) then it will be fine. It's also recommended that your archive directories should only contain fan missions and/or FMSel/NewDarkLoader backup files. While AngelLoader does attempt to reject non-mission archives on scan, it's still best to keep unrelated files out of your FM directories.
Startup scanWhenever new FMs are detected, they will be automatically scanned. If you cancel the scan, then they will be scanned when manually selected, similar to DarkLoader. It's recommended that you let the scan finish, especially if you're using game tabs, as it will result in FMs being categorized properly.
Filter barHere you can choose to filter your FM list by game, title, author, release date, last played date, tags, finished status, and rating. If you've chosen to organize your games by tab, then these tabs will take the place of the game filter buttons. Settings window. The default is 15 days.
Refresh from disk buttonReloads the list of FMs from disk. This will always occur on startup, but this button is useful if you've added new FMs since starting AngelLoader.
The list can also be refreshed from disk by pressing
Shift-F5when the mission list is focused.
Refresh list buttonWhen you edit a mission's data, the list of missions is not refreshed. This is to prevent a mission that no longer fits the filter criteria from being filtered out of the list in the middle of being edited. If you've edited an FM and want to re-filter the list, click this button.
The list can also be refreshed by pressing
F5when the mission list is focused.
Clear filters buttonClears all filters.
Reset layout buttonResets the main window to its default proportions.
Draggable splittersYou can drag these horizontally or vertically to resize the sections of the window. If you drag at the corner between the two splitters, you can resize all three main sections at once. Readme controls).
Ctrl-0, or by holding
Ctrland scrolling the mouse wheel while the cursor is over the readme area.
Play FM buttonClick this button to play the currently selected FM. If the FM is not installed, it will be installed automatically first.
Play original game buttonClick this button to bring up a list of supported games. Only games that you've provided a path to will be enabled; others will be grayed out. Clicking on one of these games will let you play it without loading an FM.
If you have NewDark 1.27 or later and have installed the multiplayer option (meaning Thief2MP.exe exists in your Thief 2 directory), then there will be an additional option in the list to play Thief 2 in multiplayer mode.
Install / Uninstall FM buttonIf the currently selected FM is not installed, this button will install it; otherwise, it will uninstall it.
Only the fields you select will be scanned for and overwritten; non-selected fields will not be touched. The exception to overwriting is tags: tags will only ever be kept the same or added to, not overwritten.
Web search buttonClick this button to search the web for the selected mission. You can set the search URL in the Settings window.
Import from buttonClicking this button will bring up a list of other loaders you can import data from. Supported loaders are DarkLoader, NewDarkLoader, and FMSel. If you have a large collection of FM data from one of these loaders (comments, ratings, finished statuses, etc.) then you can import that data into AngelLoader, replacing any current data (so be careful).
Settings buttonBrings up the Settings window.
This is the main area where fan missions are displayed, sorted, and filtered. You can change the columns' size, visibility, and order. Drag a column left or right to change its order. Clicking on a column header will sort by that column. Click once to sort by ascending, and click again to sort by descending. Double-click the size grip to the right of a column to auto-size that column to fit its content.
Right-click on any column header or any blank space in the list to bring up the column header context menu.
Right-click on an FM to bring up the FM context menu.
Double-click on a mission or press Enter when a mission is selected to play that mission. By default you will be asked for confirmation in this case; see Play FM on double-click / Enter.Press the Delete key while an FM is selected to delete that FM's archive from disk. You will be asked for confirmation first.
You can zoom the FMs list either with the zoom buttons on the top bar, or with
Ctrl+0, or with Ctrl+mousewheel.
GameDisplays an icon based on which game the mission is for. If unknown, it will be blank. The icons are:
- Thief II
- Thief: Deadly Shadows
- System Shock 2
- Unsupported mission or non-mission archive (these only appear when the Show Unsupported filter is enabled).
InstalledDisplays a icon if an FM is installed; otherwise remains blank.
TitleDisplays an FM's title, taking into account the Move article setting. If no title has been scanned for, or a title otherwise can't be found, this will display the FM's archive name without the extension. If no archive name can be found then it will display the FM's installed folder name.
ArchiveDisplays the FM's archive name with extension.
AuthorDisplays the FM's author if one can be found.
SizeDisplays the FM's compressed (archived) size if possible. If no archive can be found, then it will display the FM's uncompressed (installed) size.
RatingDisplays the FM's rating using the selected style.
FinishedDisplays an icon representing which difficulty or difficulties you've finished an FM on.
- Normal (Easy for Thief: Deadly Shadows and System Shock 2)
- Hard (Normal for Thief: Deadly Shadows and System Shock 2)
- Expert (Hard for Thief: Deadly Shadows and System Shock 2)
- Extreme (Expert for Thief: Deadly Shadows, Impossible for System Shock 2)
Release DateDisplays the FM's release date in the specified format.
Last PlayedDisplays the FM's last played date in the specified format.
Date AddedDisplays the date the FM was added to the list.
Disabled ModsDisplays the disabled mods, if any, for the FM. If all mods are disabled for the FM, it will display "* [All]".
CommentDisplays the FM's comment, if any, up to the first 100 characters or the first linebreak, whichever comes first.
Right-clicking on any column header, or any blank space in the main list, will bring up this menu. Here you can choose to hide or show columns, or reset their visibility, width, or positions.
Right-click on a fan mission in the list to bring up this menu.
Play FMPlays the currently selected FM. If the FM is not installed, it will be installed automatically first.
Play FM (multiplayer)This item will only appear if Thief2MP.exe was found in the Thief 2 directory. Clicking it will allow you to play the selected FM in multiplayer mode (requires NewDark 1.27 or later). If the FM is not installed, it will be installed automatically first.
Install / Uninstall FMIf the currently selected FM is not installed, this will install it; otherwise, it will uninstall it.
Delete FM archiveThis will allow you to delete an FM's archive from disk. You can also press the Delete key while the FMs list is focused to achieve the same thing. In both cases, you will be asked for confirmation first.
Open FM in DromEdThis item will only appear if DromEd.exe (or ShockEd.exe for System Shock 2) was found in the game directory. Clicking it will open the currently selected FM in DromEd or ShockEd, installing it first if necessary.
This option does not apply to Thief: Deadly Shadows.
Scan FMThis will scan the selected FM. If you only want to scan for certain fields, see the Edit FM tab.
Convert audio submenuThis menu contains the same audio conversion options as in the Settings window, but they can be run at any time here.
This option is only available for installed FMs.
Rating submenuHere you can rate the selected FM. The ratings will appear as they've been set in the Settings window: either 0-10 or 0-5.
Unknown - this is mainly for compatibility with imported FMSel data, which doesn't mark difficulties for its Finished value.
For Thief 1 and Thief 2, the other difficulties are Normal, Hard, Expert, and Extreme.
For Thief: Deadly Shadows, they are Easy, Normal, Hard, and Expert.
For System Shock 2, they are Easy, Normal, Hard, and Impossible.
"Extreme" is not an official Thief difficulty, but is provided for compatibility with imported DarkLoader data, or to use as you see fit (to denote Ghost, etc).
Web searchClick this to search the web for the selected mission. You can set the search URL in the Settings window.
Collapse / expand buttonClick this to collapse (hide) the top-right section. Click it again to expand it.
Here you can see information on what kind of custom resources a fan mission has. If the FM has not been scanned for custom resources, none will be shown. If the FM is for Thief: Deadly Shadows, none will be shown in any case, as the custom resource scan is not supported for that game.
Here you can edit an FM's data. If you want to re-scan for a certain field, click the icon beside the field.
Alternate titles buttonSometimes, multiple different titles will be detected during a scan. If the default title doesn't look correct, try clicking this dropdown button to see if another is available. Clicking an alternate title will change the FM's title to the one that you've selected.
Release date and Last playedIf a date hasn't been scanned for or cannot be detected, its checkbox will be unchecked and no date will be shown.
Disabled modsYou can disable certain mods per-mission here. To see which mods you have installed, look at
cam_mod.iniin your game folder. This string must be in the format
modname1+modname2+modname3etc. So to disable the Enhancement Pack 2, it should be:
To disable the Enhancement Pack 2 and the HD mod, it would be:
To disable all mods for the current FM, check the Disable all mods checkbox.
Language selectionHere you can choose to play an FM in a particular language. Only languages the FM supports will be available.
Here you can enter a comment for the FM. This comment will also be displayed in the Comments column (up to the first 100 characters or the first linebreak, whichever comes first), and will update as you type.
Here you can manage the FM's tags. You can click the Add from list... button to choose a tag from the global list (which includes standard presets as well as any other tags that have been found for any other FMs), or you can start typing in the textbox to see a real-time list of tags and categories that match what you've typed. If no matching tag or category is found, a new one is created. The format for creating a new tag is
category: tag. If you don't specify a category when creating a new tag, that tag will be placed in the
Here you can apply patches and customizations to an FM. "All changed files" backup setting, then these fixes will be backed up and restored the next time you install the FM.
.dml patching is not supported for Thief: Deadly Shadows.
Open FM folderIf you want to manually modify the FM's installed folder, you can open it here.
NOTE! FM folders contain a special file,
fmsel.inf, which must not be deleted. This file contains metadata and is, due to its nature, not included in differential backups. While AngelLoader will sometimes be able to regenerate it or work without it, deleting it is asking for trouble. Don't do it.
The settings here are the same as the Initial Setup window, except that Language has been moved to the Other section. See Initial Setup for an explanation of these settings.
Game organizationHere you can choose to either organize games into their own tabs, or to display your FMs as one list and allow filtering by game. When game tabs are enabled, each game will have its own selected FM and set of filters that will be retained between tab switches. Organizing games by tab can make things cleaner, but if you want to filter without regard to game (say, to find all missions by a single author who has released missions for multiple games), then having one list with game filters will work better.
If you select the Use short names on game tabs checkbox, game tabs will be displayed with abbreviated names to save screen space.show recently added FMs at the top of the list, only FMs added within the selected number of days will be included.
LanguageIf other languages are available, you can choose them here. Changes will take effect immediately.
This option has no effect for Thief: Deadly Shadows.
Convert .oggs to .wavs on installQuoted from the FMSel manual:
The game can play OGG files but it can under some circumstance cause short hiccups, on less powerful computers, performance heavy missions or with large OGG files. In such cases it might help to convert them to WAV files during installation.
This option has no effect for Thief: Deadly Shadows.
Confirm before uninstallingIf this is enabled, you will be prompted for confirmation when uninstalling an FM. .dml patches to the FM, or made other modifications such as creating or modifying an fm.cfg file, fixing readables, etc. Because AngelLoader aims to be patch-friendly, this option is the default. You can also choose to always be asked if you want to back up data when uninstalling an FM.
$TITLE$can be placed anywhere in the URL to insert the fan mission's title into the final string. For instance, if the URL was
and the currently selected FM's title was "Broken Triad", then the final URL actually passed to your web browser would be:
https://www.google.com/search?q="Broken Triad" site:ttlg.com
Hide "Install / Uninstall FM" buttonFor extra-strength misclick prevention, enable this. You will still be able to install and uninstall FMs from the FM context menu.
Hide FM list zoom buttonsSince you can zoom the FMs list with the keyboard or Ctrl+mousewheel, you can hide these buttons to free up room.
Use a fixed-width font when displaying plain textSome readmes may look better when displayed in a fixed-width font. This option only applies to plain text readme files; other file types will use their own fonts. This behavior matches DarkLoader.
English.inifile is included in that folder as an example, and other language files are available for separate download. Language files use a simple
iniformat, and must be saved with UTF8 encoding in order to guarantee correct display of text.
Most user interface elements will be automatically resized to accommodate translated strings, but a few will not. These include the date and rating filter windows and some of the buttons in the tags filter window. It's up to the translator to ensure everything looks correct.
Archive filesZip (.zip) and 7-Zip (.7z) files are supported. But see here for a note about 7-Zip files.
Audio filesMP3 (.mp3), Ogg Vorbis (.ogg), and Wave (.wav) files are supported in fan missions. MP3 files will be automatically converted to WAV files on install, as NewDark does not support playing them directly.
Readme filesPlain text (.txt), Rich text (.rtf), HTML (.htm, .html), and GarrettLoader Markup Language (.glml) files are supported. HTML files can be a great deal fancier than any of the other formats, but they must be viewed in a web browser (AngelLoader does not support viewing them in-app, although it provides a button to launch them in the user's web browser).
- 7z files are, by default, solid archives. This means that it is not possible to decompress individual files within the archive in random-access fashion: the archive must be decompressed starting at the beginning and continuing until the desired file entry is found. This is fine for simple installation, as the entire archive needs to be extracted anyway, but for scanning an FM, it's an order of magnitude slower. In fact, when AngelLoader's scanner comes across a 7z file, it simply extracts the whole thing to a temp directory on disk, because doing so is on average faster than seeking around in a compressed solid archive to read what it needs to read.
- 7z files are just slower to extract all-around.
Dahenjo for helping me hunt down some bugs and suggesting features.
Xanfre for contributing some excellent improvements to the RichTextBox behavior.
EnYB0La for providing the impetus to start writing what became FMScanner, AngelLoader's scanner module. Without it, I never would have attempted to create a standalone NewDark-supporting loader!
Björn Henke and Telliamed for creating DarkLoader, the de facto standard Thief loader for many years, and the original inspiration for AngelLoader's UI and standalone nature.
R Soul for creating NewDarkLoader, a modern loader with the classic DarkLoader UI, and also a source of inspiration for several aspects of AngelLoader.
potterr for creating GarrettLoader, the first loader (as far as I know) to support all three Thief games, the first loader I ever used, and the source of the GLML file format.
Le Corbeau, the mysterious group behind NewDark as well as FMSel, the official NewDark fan mission loader.
All of the above programs were of tremendous help in developing AngelLoader, so thank you all!
I'd also like to thank Looking Glass Studios for creating Thief, the TTLG community for keeping it alive, and my viewers for watching me goof around on YouTube for all those years.
AngelLoader uses the following libraries:7z.dll
and portions of code from the following:Ookii Dialogs
Modified portions of .NET Core's System.IO.Compression code (tuned for scanning performance)
AngelLoader is open-source under the MIT license. You can view the source at AngelLoader's GitHub repository.