Force Software

The site is under construction. Please treat with understanding.

Сайт находится в разработке. Прошу отнестись с пониманием.

Dark Engine Viewer (eng)

Dark Engine Resource Viewer.

It does not require installation and pre-configuration. It can be placed in any convenient place of the system. It supports OpenGL 3.2 (there is a compatibility mode with OpenGL 2.1), which means that it can work even on older computers, on Windows and Linux systems.


Actual build:

Thief 2: The Metal Age 20th Anniversary build 2020‒04−06 14:30 MSK (UTC+3:00)

Outdated builds:

Thief: The Dark Project 21th Anniversary build 2019‒11−30 23:55 MSK (UTC+3:00)

Thief: The Dark Project 20th Anniversary build 2018‒11−30 12:58 MSK (UTC+3:00)

Download links will always be available:

— on this website

— on the Dark Fate forum (rus)

— on the TTLG forum (eng)

Last changes

2020‒04−06 14:30 MSK (UTC+3:00) Thief 2: The Metal Age 20th Anniversary Edition

+ fixed display of file names and directories in the navigation list, they are no longer wrapped to a new line.

+ LEGACY HARDWARE mode now requires OpenGL version 1.0 instead of 2.1. But work in this mode has not been tested. I would be grateful for the response.

+ added glow of objects that have the Self Illumination property.

+ added support for the Anim Light property. In some modes, it affects Self Illumination property of objects. Full animation of this property has not yet been implemented, only the initial state is applied.

+ added support for languages specified in the dark config file. Resources will be searched in the appropriate subdirectories at the priority specified in darkinst.cfg or install.cfg.

2020‒03−28 13:00 MSK (UTC+3:00) Thief 2: The Metal Age 20th Anniversary Edition

+ improved mechanism for determining directories with game resources. Now the mission, located inside any directory of the game, easily finds the path to resources.

+ improved texture search engine for models. Added support for nested directories with language name (though now only "english" is being searched for so far).

+ added support for replaceable textures described by the TxtRepl r* parameter, where * is the texture number [0, 3].

+ increased maximum exposure limit (to increase brightness with the "+" and "-" keys).

+ now Thief 1 missions display high-poly models (if available).

+ added support for opening a program in the desired directory by passing a parameter on the command line or by dragging and dropping the directory onto the program window.

2020‒03−23 01:50 MSK (UTC+3:00) Thief 2: The Metal Age 20th Anniversary Edition

+ added display of character models (thanks to Juliusz Kaczmarek aka PinkDot and Randy Sybel aka Shadowspawn).

+ using the "+" and "-" keys you can now change the brightness of the image in "Free camera mode".

+ attenuation in the shader switched to quadratic.

+ fixed inheritance of object hierarchy properties.

2020-03-06 14:00 MSK

+ reduced radius of SSAO and, accordingly, bent normals. The latter are now included in the final picture result, which makes it look a bit noisy. You can disable the SSAO and bent normals contributions by pressing k.

+ verticall FOV value increased from 50 to ~74 degrees, which corresponds to the FOV of New Dark Engine.

+ refactored interaction with the object hierarchy. The Render Type and Self Illumination properties are read, this allowed not to draw extra mission objects and fixed the rendering of shadows from the lanterns.

+ fixed polygon offset for inversed depth buffer. This prevents shadows from flickering when rotating or moving the camera.

2020-02-26 20:00 MSK

+ added support for New Dark Engine mission format! Hooray! Special thanks to Juliusz Kaczmarek aka PinkDot!

+ slightly faster mission loading

+ when opening a mission, the camera is positioned in the starting point

+ color class refactored for storing data in a floating-point vector, this provides better accuracy

+ "sticky keys" is disabled to prevent the accumulation of camera offsets when managing the interface

+ increased brightness of the mission view mode

2020-02-17 23:00 MSK

+ added support for colored polygons in models

+ fixed path clipping for textures placed in the same subdirectory with the open model (on screen texture information)

+ various internal optimizations

2020-02-05 23:30 MSK

+ fixed rendering of some problematic models consisting of several bones

2020-01-14 15:00 MSK

+ fixed level rendering on AMD video cards

+ recursive traversal of the BSP tree in model opening refactored, recursion is removed

+ fixed program crash when opening some old or damaged models

+ adjusted the layout of mipmap texture levels available for sampling

+ added debug render scheme

2020-01-04 00:55 MSK

+ fixed rotation of an object immediately after opening it, without prior mouse movement

+ fixed the orientation of some objects in missions

+ fixed building AABB and OBB for objects and their bones

+ shaders are now able to accept data arrays as input

+ added draft render scheme for bounding boxes debug rendering

2019-12-18 23:30 MSK

+ the paths to the game resources are deleted from the program if we exit the game directory (so that the resources of different games do not get mixed up at boot time)

+ fixed crash when clicking or scrolling on the error page on first launch

+ the program window at startup is located in the center of the screen

+ fixed behavior of the PgUp key, rewinding the list to the very end, when pressed at the top of the list

2019-12-11 16:00 MSK

+ fixed compiler error for depth_tree shader on AMD cards

+ extended logging for texture search errors to simplify log analysis

2019-12-10 15:00 MSK

+ fixed unpacking of model normals, now all objects are correctly illuminated by light sources

2019-12-06 15:00 MSK

+ closing the archive descriptor when we exit archive contents using the interface

How to run

A simple way: run the program from any place of your system, and use the interface to open the directory with the desired model or mission file on the disk.

Advanced method: the program takes the input path of the resource being opened, whether it be an object or a mission. Thus, you can open the desired file in four ways:

— from the command line, specifying the path to the file to be opened, for example like this:

dark_engine_viewer_x64.exe "D:\Games\Thief 2 - The Metal Age\MISS13.MIS"

— dragging the file onto the program icon;

— dragging and dropping a file onto an open program window;

— creating an association of model and mission file extensions (BIN and MIS) with the viewer and double-clicking on them directly from Explorer.

Launching on Linux and legacy hardware

For older video cards that do not support OpenGL 3, a special version was made — LEGACY HARDWARE. Its functionality is very limited, but it allows you to use the basic functions of the viewer. To run it, use the dark_engine_viewer_legacy.exe executable file.

In addition, there is a linux-build of the viewer: dark_engine_viewer_x64. Currently, it works in LEGACY HARDWARE mode and also very limited in terms of graphics capabilities, but unlike the legacy version, it will become fully functional over time.

How to use

Everything should be intuitive: the file browsing interface is scrolled by the mouse wheel, the models are opened by clicking, the previous/next models are scrolled by the arrow keys of the keyboard, PgUp, PgDn, Home and End. Opened model can be brought closer or farther away from the camera with the mouse wheel, rotated with the left mouse button, and dragged with the right mouse button.

When a mission is opened, the "Free camera mode" button appears in the upper right corner of the program, clicking on it switches the program to the "free flight" mode. In this mode the camera is controlled by the following keys:

WASD and arrows — camera movement, mouse — rotation along the x and y axes

C — move the camera down

SPACE — move the camera up

SHIFT + navigation key — accelerated movement

ESC — display interface

ALT + ENTER — full screen mode (HD Ready — 720p)

+/- — increase/decrease exposure (brightness)

I — on/off lighting

K — on/off SSAO

O — on/off shadows

P — on/off parallax occlusion mapping (off by default, revision required)

U — on/off soft shadows (off by default, revision required)

Y — on/off contact shadows (off by default, revision required)

The assignment of the number keys (will change in subsequent builds):

1 — output of the final frame with all effects (default)

2 — output normals

3 — output illumination

4 — output SSAO

5 — frame depth output

6 — output of bent normals

7 — depth output with the addition of a height map

The effects that are turned off by default do not work correctly. Enabling parallax occlusion mapping will not show any changes, because you most likely have no height maps for textures. But if you want to see how it will look, place the necessary texture maps, turn on the effect with the P key. When adding a height map, add the postfix "_h" to its name, by the way, for normals it is "_n", so if the texture is called bricks .pcx, then the height map should be called (the texture format may differ and be any supported by the game, not necessarily DDS, but DDS is preferable), and the normal map should be

Supported texture formats: DDS (compressed only), PNG, TGA, PCX, GIF, JPG, BMP.

Experiments are welcome! Post your screenshots!


Currently, the program supports three formats of models: BIN, MIS and OBJ.

Since the program is still in development, support for some formats is only partially implemented.

BIN — both static and dynamic models are supported, located in obj.crf and mesh.crf files, respectively.

MIS — supported missions made on both the original and the new extended DromEd for New Dark Engine.

OBJ — the format is supported at a basic level, without textures.

Development plans

In a global perspective, the viewer should turn into a full-fledged 3D engine — Force Engine. I'm not going to compete with Unreal Engine and Unity, my personal task is to create my own game based on this engine.

Closer plans are support for all the necessary Dark Engine resources, to hone common game mechanics on them, such as physics, rendering, sound propagation, movement system, interaction with characters and objects, artificial intelligence. All this is planned to be implemented with Dark Engine resources, so it is logical to expect from this project the appearance of some kind of game prototype that looks similar to Thief. The degree of readiness of this prototype will be discussed with those who are interested in the project.

It's planned to regularly publish updates. Therefore, I will wait for your suggestions on the necessary functionality and correction of the priorities of the tasks from the TODO list, which can be found on the Dark Fate forum (rus).


Please inform me of all errors, bugs, wishes and suggestions found to my email:, or to the Dark Fate forum (rus) or TTLG forum (eng). Also, if you have any other questions — please contact!

Dissemination of information about this project in all possible ways is welcome! I will be very grateful for any mention of Dark Engine Viewer and my website — — in social networks.


I am very grateful:

— to Dark Fate community members, without whom this viewer would never been created, their nicknames in alphabetical order: Boris3000, Chuzhoi, HellRaiser, Maxim, nemyax, Zontik and others...

— to developers and programmers who reverse engineering the original Dark Engine and launched the Open Dark Engine project, without which the idea with Thief resources for Force Engine would never have come true, their nicknames in alphabetical order: Telliamed, Volca, and everyone involved.

— Juliusz Kaczmarek aka PinkDot, who helped add New Dark Engine mission format support to the program and also helped in decoding the format of dynamic MESH objects.

— Randy Sybel aka Shadowspawn for helping to figure out how to use decoded data obtained from dynamic MESH objects.

— to everyone who in any way advised, supported and motivated me, including Vorob and my wife Tatyana!

Thank you all!


Using this program, you agree that its author is not liable for any harm caused to equipment or software directly or indirectly associated with the use of this program. The author’s goal is not to infect your computer or spread viruses, so be critical of possible antivirus warnings.