Force Software

ru en

Force Tech game engine


My name is Force, I'm a lone programmer developing the Force Tech game engine. It is being created with the expectation that it will someday be able to replace the Dark Engine, namely to improve the visual and gameplay experience of games made on it. I'm talking about such industry pillars as the original Thief: The Dark Project, Thief Gold, Thief 2: The Metal Age and System Shock 2.

The start of work on Force Tech can be considered as far back as 2011, and since 2017 it has been developed primarily for the Dark Engine resource viewer application, which is so called — Dark Engine Viewer. Since 2018 I started doing public releases of the viewer, they are available to everyone and come out about once a year. You can download them for free on this site. The engine is still evolving, increasing functionality.

Dark Engine Viewer

Dark Engine resource viewer program, based on the Force Tech game engine:

— Opens levels, object and character models, textures and sounds.

— Has a free camera mode for quick viewing of levels.

— Has a game mode (simulation mode), with the realization of basic gameplay mechanics.

— Plays built-in object animations and skeletal character animations.

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

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

— Does not require installation and preconfiguration. Can be placed in any convenient place on the system.

— Runs on OpenGL 3.2 (there is a compatibility mode with OpenGL 2.1).


Dark Engine Viewer v. 2023‒08−17 23:40 MSK (UTC+3:00)

If for some reason you don't have full versions of Thief or System Shock 2 games, here you can download their official demos, so that the viewer has something to view:

Thief demo (Assassins)

Thief 2 demo (The Unwelcome Guest)

System Shock 2 demo

Old Viewer versions:

Dark Engine Viewer v.0.6.9 2023‒07−25 8:00 MSK (UTC+3:00)

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

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)

Force Software communities

Main Website:

Force Software

It is most convenient to follow the development of the project on social networks or forums:


TTLG Forum

VK (ru)

DTF (ru)

Telegram (ru)

Dark Fate Forum (ru)

Report all bugs, errors, wishes and suggestions to, or to any of the above mentioned communities. If something doesn't work as expected, don't look for workarounds, write and we'll try to fix the problem directly in the engine TOGETHER!

How to launch

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 and dropping a file or folder onto the program icon;

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

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

Launching on 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.

How to use

The list of files is scrolled with the mouse wheel, resources are opened by clicking in the list, "previous/next" resources are scrolled by keyboard arrows, PgUp, PgDn, Home and End.

If the model has a skeleton, it is possible to play skeletal animation for it: the button "Animation player" appears in the upper right corner, clicking on it will open the animation player, where you can specify a directory with animations and run them by clicking on an item in the list or by pressing the Play key at the bottom of the list. By default, the animation list opens a directory a level above the open model. Navigating through the animation list is done in the same way as browsing files. If the model has internal animations, the same "Animation player" button will appear, and clicking on it will open the list of internal animations of individual parts of the model.

The opened model can be zoomed in or out from the camera with the mouse wheel, rotated with the left mouse button, dragged with the right mouse button.

B — switch gray/black background color

I — show/hide information about the object

O — open the directory of the currently viewed file

M — memorize model/camera position (when viewing a mission)

R — restore the saved model/camera position (when viewing a mission).

When opening a mission, two buttons appear in the upper right corner of the program: "Free camera mode" — "free flight" mode, and "Simulation mode" — game mode, which allows you to walk around the level and interact with objects.

Control in these modes is performed by the following keys:

WASD and arrows — move the camera, mouse — rotate x and y axes

C — move the camera down

SPACE — move the camera up/jump

SHIFT + move key — accelerated movement

ESC — display interface

H — on/off shadows

J — on/off soft shadows

K — on/off SSAO

P — on/off Parallax Occlusion Mapping

The following keys work in all modes:

L — on/off lighting

G — on/off debugging information

+/- — increase/decrease brightness

ALT + ENTER — full-screen mode (resolution is set in config.cfg file by FullscreenSize parameter)

F1 — context help

Assignments of numeric keys (needed only for debugging purposes, may change in different builds):

1 — output final frame with all effects (by default)

2 — output frame normals

3 — output frame illumination

4 — output frame SSAO

5 — output depth buffer

6 — output original color of polygons without illumination

7 — output penumbra mask of the nearest point light source

8 — no buffer

9 — output result of the shadow penumbra mask formation algorithm.

Toggling Parallax Occlusion Mapping will probably show no difference because you don't have height maps for the textures. If you want to see how it will look like, add the necessary texture maps to the main texture directory. The names of the additional texture maps must match the name of the corresponding texture + the suffix "_h" for the height map, and "_n" for the normal map. Thus, if the texture is called bricks.pcx, the height map should be called (the texture format can be any of the supported ones), and the normal map should be called


I would like to thank:

— Dark Fate community member with the nickname Chuzhoi for his invaluable contribution to the design and visual style of the program, its testing, and useful UI/UX advices. He is the reason why Dark Engine Viewer looks and works the way it does.

— Dark Fate community member with the nickname nemyax for his help in researching the object model storage format.

— Other members of the Dark Fate community without whom this viewer would never been created, their nicknames are in alphabetical order: Boris3000, Glypher, HellRaiser, Maxim, Ollibony, Silentor, 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!

Copyright and liability

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.