Force Software

The site is under construction. Please treat with understanding.

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

Dark Engine Viewer (eng)

Dark Engine Resource Viewer.

Opens object and character models in BIN format.

Plays skeletal animations in MI/MC format for these models.

Has a free camera mode for viewing levels in MIS format.

Opens textures in DDS (DXT*), PNG, TGA, PCX, GIF, JPG, BMP formats.

Allows you to listen WAV sounds supported by the original Dark Engine.

No installation or pre-configuration required. Program can be placed in any convenient place in the system.

Works on OpenGL 3.2, compatible even with old computers (there is a hardware legacy mode with OpenGL 2.1), on Windows and Linux systems.


Actual build:

Dark Fate 20th Anniversary edition 2021‒09−29 15:00 MSK (UTC+3:00)

Outdated builds:

Thief 2: The Metal Age 21st Anniversary edition 2021‒04−23 20:00 MSK (UTC+3:00)

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

Thief: The Dark Project 21st 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

2021‒09−29 15:00 MSK (UTC+3:00) Dark Fate 20th Anniversary Edition

+ fixed bugs in finding textures for loaded objects

+ added logging of the texture search process

+ refactored animation player, now it loads faster and does not blink when loading a new model

+ added writing and reading program parameters from the config.cfg configuration file

+ many other minor fixes

2021‒08−24 14:00 MSK (UTC+3:00) Dark Fate 20th Anniversary Edition

+ added skeletal animations support of dynamic models

+ added animation player with controls

+ many internal enhancements to introduce a new rendering mode with streaming data support in future releases

2021‒04−23 20:00 MSK (UTC+3:00) Thief 2: The Metal Age 21st Anniversary Edition

+ compilation of builds is now performed with the maximum level of compiler optimization, this should slightly increase the speed

+ added generation of mip-levels for Legacy Hardware mode

+ added shadow support for spotlights

+ redesigned command system. Now when loading multiple commands, only the result of the last one selected by the user is executed

+ fixed the menu loading. It is now loaded in parallel with the object

2021‒03−27 16:00 MSK (UTC+3:00) Thief 2: The Metal Age 21st Anniversary Edition

+ reworked loading of BIN models. Now you can view models with broken tree structure.

+ slightly redesigned help screens.

+ added the ability to open the directory of the currently viewed object in the explorer with the O hotkey.

+ the message type is now displayed in the log.

2021‒03−23 15:00 MSK (UTC+3:00) Thief 2: The Metal Age 21st Anniversary Edition

Almost a year has passed since the last public release. During this time, a huge number of changes have been made. Here are the main ones:

+ implemented a simple audio player for streaming sound based on OpenAL

+ added image view mode (all supported texture formats)

+ added lighting to object view mode

+ redesigned interface work, it now loads by parts and works much faster

+ implemented a filter to search for files in the menu with simple text input

+ made a help screen that opens with the F1 key

+ added font outline for text in viewport to improve readability

+ added support for system mouse pointers over interface elements

+ transparency and alpha test are implemented in the object view mode

+ skybox is displayed for missions with Low Sky support

+ added loading screen for menus and missions

+ rendering reworked to stream geometric data

+ implemented octree construction, which is currently used only to optimize geometry clipping outside the frame

+ redesigned thread system

+ large-scale internal refactoring, introduced a system for managing the current state of the application

+ redesigned logging system

+ many cosmetic improvements and fixes

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, MIS, OBJ, etc...) 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, but, unfortunately, it is not included in this release.

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. If the model has a skeleton, then skeletal animation can be played for it: the "Animation player" button appears in the upper right corner, clicking on it will open the animation player, where you can specify a directory with animations and play them by clicking on the list item or by pressing the Play key at the bottom list. By default, the animation list opens the catalog one level above the opened model. Navigation through the list of animations is similar to file browsing interface.

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.

B — toggle black/gray backround

I — show/hide object info

O — open containing directory of the currently viewed file

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

H — on/off shadows

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

K — on/off SSAO

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

The following keys work in all modes:

L — on/off lighting

+/- — increase/decrease exposure (brightness)

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

F1 — contextual help

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 — output of self illuminated polygons

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

Experiments are welcome! Post your screenshots!


Since the program is still in development, support for many file formats is not fully 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.

WAV — only two internal formats are supported: PCM and IMA ADPCM.

Development plans

In a global perspective, the viewer should turn into a full-fledged 3D engine — Force Tech. 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.

Wishes and Support

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. Thank you!


I am very grateful:

— to a member of the Dark Fate community with the nickname Chuzhoi for his invaluable contribution to the development of the design and visual style of the program, its testing, and useful UI/UX advices. It is thanks to him that Dark Engine Viewer is made the way it is.

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

— to Juliusz Kaczmarek aka PinkDot, who helped to add the New Dark Engine mission format support to the program, in decoding the format of dynamic MESH objects, tips on how Dark Engine animations work, and provided character test animations.

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

— to the developer with the nickname HardKern, who pointed out the problems he encountered during the development of his System Shock 2 VR project (which, unfortunately, is already closed :( ) and helped to understand the Dark Engine animation format.

— 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 Tech would never have come true, their nicknames in alphabetical order: Telliamed, Volca, and everyone involved.

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