This is an old revision of the document!
The Drag[en]gine is based on three main supports. The first is the Game Engine Layer. This layer is responsible for managing modules and resources. This layer is maintained by the Drag[en]gine coders. To use this engine in any way you are not required to alter this layer in any way.
The second support are the Modules. They provide the capabilities of the engine. Modules are classified into various Module Types.A module type describes the part of the engine a module is providing support for. For example a Graphic type module is responsible for rendering to the screen while an Image type module is responsible for loading an image from disk. Module types are either Single Type or Multiple Type. Single Type Module there can be only one module loaded at every time. This is rather logic taking the Graphic Module as an example. Running OpenGL and DirectX at the same time would result in a hell of troubles. Therefore such modules are restricted to one running module. Multiple Type modules on the other hand can be run alongside each other without a problem. The Image Module from the previous example is such a Multiple Type module. It is rather logic that you can have one module for loading PNG images and another for loading JPG images. The rule of thumb is that a module is Multiple Type if it is a loader module able to load a resource from disk ( or save it to dosk ). On the other hand a module is usually Single Type if it provides a services on a devices like the monitor where only one client can access at the same time. The Modules and their types are listed on this website providing informations about their usage.
The third support are the launchers. Games usually do not link directly to the game engine library but use a Launcher to run. This has been done for two main reasons. First the game in question does not link against the game engine libraries and is therefore not required to use the GPL. Many games would like to go retail and there exist systems out there where a GPL license for a game is simple not possible ( for example game consoles ). The second reason is that using a launcher the entire task of updating and managing games is moved out of the game into the hands of a trusted and central software. You can call this also a 'Frontend' if you like but launchers are capable of more than that. For example the DEMovie launcher is able to play a movie file using the game engine. A typical application thereof would be Machinimas. In general a launcher for running games is required to take a Drag[en]gine Game Definition File and to run the game using the informations stored inside. This file is an XML file and therefore easy to read and modify by hand. The launchers check if the required modules are present for the game to run properly. If missing the launcher can tell the user to download the missing modules or doing it on its own. After all requirements are satisfied the launcher runs an engine instance and hands the control over to the game scripts. This principle is a simple, clean and stable way to run games with the added benefit that the user is able to choose his launcher of choice.