Developer Network
  File Specs
  Source codes
  Mailing lists
  Knowledge Base

Other Games



Descent Developer Network
Descent 1/2

DETLEF server specs


This document describes the DETLEF server format, as used by Descent Manager DETLEF32.

These specifications were defined and written by Heiko Herrmann. Thanks a lot to Jeff "ZappaFan" Guynn for the great support.

Get Descent Manager DETLEF32 client software
Go to *.DET specs for advanced level information on DETLEF server sites
Support for DETLEF servers


Technical background information

A DETLEF server provides several (text) data files for the DETLEF client application plus a logo file. These files can be anywhere on a HTTP or FTP server, but of course the client application has to know the location. For Descent Level Network this is the directory . Although not necessary it is recommended to put these files -as we do- in an own directory, like /detlef. Please note, that these files do not need to be on the same server as the level files. You can even switch protocols here (DETLEF on HTTP, the levels on FTP) and you can spread your level files on several servers.

The client application now downloads these files (the logo will only be loaded if needed) which contain the main information for each level available on the server. The search query etc. is made by the client application using these files, the DETLEF server has nothing to do with the search itself. This also means, that after these files are downloaded, the search query can be made off-line as long as you don't do an advanced search query.

Advanced search queries however need additional files. These files have the extension .DET, standing for DETLEF or also DETails. This file has to be in the download directory with the levels, not the DETLEF directory. However a DET file is not necessary, the client application will just ignore levels that contain no DET file. (These just cannot be queried, when doing Advanced search queries.) The DET files will be downloaded then, when an advanced search query was initiated. To speed the thing up, only those files are actually downloaded, that match non-advanced search settings. So if you want to search for D2 anarchy levels by "Luke Schneider", newer than 100 days, that contain 0 earthshakers, then only the DET files will be downloaded, that are actually D2 anarchy levels by Luke Schneider, newer than 100 days. This pre-search is made using the main DETLEF files. Also DET files are cached. So the next time the client application needs a specific DET file, that is already downloaded, it uses the cache copy. Of course this option can be turned off and also you can delete the current cache at any time in the client application.

Summary: The DETLEF server does not need any special requirements. It just must be able to get HTTP or FTP files. Not more. So you don't need any Java, CGI or FrontPage rights on your server...


DETLEF 02 extensions

The DETLEF 02 file format is an extension of the original DETLEF 01 file format, adding new features. Both specs are combined on this page. As soon as something DETLEF 01 or 02 specific comes up it will be enclosed by lines looking like this:

#DETLEF 01 specific START---
<text, that only applies to DETLEF 01 files>
#DETLEF 01 specific END---


#DETLEF 02 specific START---
<text, that only applies to DETLEF 02 files>
#DETLEF 02 specific END---

Note that only DETLEF Beta 02 clients and higher are able to read DETLEF 02 files. DETLEF 01 files can be read by all versions of DETLEF.


The main DETLEF server definition files


#DETLEF 01 specific START---
Here is a short overview over the DETLEF server files, every DETLEF-server needs (important: all of these filenames must be written in low-case!):
detlef.inf Main DETLEF file. The presence of this file defines the server as a DETLEF server. Contains general information about the server and some alias definitions.
detlef.d1a List for Descent 1 Anarchy levels available on the server.
detlef.d1b List for Descent 1 Architectural levels available on the server.
detlef.d1c List for Descent 1 Single-Player levels available on the server.
detlef.d1d List for Descent 1 Archives (unsorted) levels available on the server.
detlef.d2a List for Descent 2 Anarchy levels available on the server.
detlef.d2b List for Descent 2 Architectural levels available on the server.
detlef.d2c List for Descent 2 Single-Player levels available on the server
detlef.d2d List for Descent 2 Archives (unsorted) levels available on the server.
detlef.jpg Logo for the site. Must be in JPG format and of 400x100 size.

sign_note.gif (1726 bytes) If you don't provide for example Descent 1 Architectural levels, simply provide an empty "detlef.d1b" file!

How you sort your levels into the four categories Anarchy, Architectural, Single-Player and Archives is each's DETLEF web-admin's own decision. However we recommended the "Archives" for usage of new levels, that you haven't time to look at yet (to decide what type it is) and/or not really good ones (this is how the Descent Level Network use the "Archives").
#DETLEF 01 specific END---


#DETLEF 02 specific START---
Since DETLEF 02 you are not fixed to the given structure listed above anymore. So you can create own lists like one for "My missions", one for "Best missions", one for "Cooperative missions", one for "My friend X's missions" and one for "Other missions". The lists are defined in two files called DETLEF.D1 and DETLEF.D2. (See definitions for them here).

Here is the list of the DETLEF 02 files:

detlef.inf Main DETLEF file. The presence of this file defines the server as a DETLEF server. Contains general information about the server and some alias definitions.
detlef.d1 Descent 1 list definition file.
detlef.d2 Descent 2 list definition file.
detlef.* List files with the extensions you defined in the list definition files.
detlef.jpg Logo for the site. Must be in JPG format and of 400x100 size.

#DETLEF 02 specific END---



The detlef.inf file uses the common Windows-INI-format. Please note that all caption-names and keywords are case-sensitive! Here is the description of the sections:



#DETLEF 01 specific START---
If you are generating a DETLEF 01 site the line must be "FileVersion=1".
#DETLEF 01 specific END---


#DETLEF 02 specific START---
If you are generating a DETLEF 02 site the line must be "FileVersion=2".
#DETLEF 02 specific END---


Note: DETLEF Beta 02 and higher clients can both read from both DETLEF 01 and DETLEF 02 servers, while DETLEF Beta 01-01d clients can only read from DETLEF 01 sites.


exe=rar x -c- -std -y %f
zip=pkunzip -o %f

These lines define the command-line to launch for extracting files, in dependancy of the file extension. %f stands for the file including the path. Please note that the dearchiver needs to be in the [DETLEF32]\UNPACK directory, and the DETLEF32 client application only installs PKUNZIP and RAR there. So if you want to use a different one, you need to let the user install it in that directory, OR ask us to include it next time.

As you might see we use RAR to extract EXE files. Of course we could use "exe=%f" also, but this way a virus can't get active...

The extension is case-sensitive, so if you upload "eXe" files, then you need to define "eXe"... Files types that are not defined here force an error when trying to download them...

Also note that you should provide all switches to make the unextracting automatic - deactivate all user inputs etc. . In our example we use "-c-" switch for RAR to skip our comments we display for every download. Don't forget: DETLEF32 is easily able to download and install 2000 missions, and you wouldn't want it as user to press 2000x a key, do ya ;)?


WebAdmin=Alexander Streule alias Assassin
Name=Descent Level Network

This section provides information about you and your web-server. Enter your name at "WebAdmin", the name of your homepage at "Name", your direct URL to the homepage at "Homepage" and your eMail-adress at "eMail". Please note, that you don't need to specify the page which contains actually the levels you provide. The information here is only used with the menu commands "View informations about the site", "Visit homepage" and "eMail web admin" with your server active.

Very important is the "ShortName" key: Here you specify which sub-directory will be used for list, cache and query files for your server. Let's say someone has installed DETLEF32 to its default dir: C:\DMTOOLS\DETLEF32! Now if you have set "ShortName=XYZ", the files will be saved into the directory C:\DMTOOLS\DETLEF32\SITES\XYZ for default (the user can still change it). So it is important a) to specify a directory name, that the chance is low that no other DETLEF site wants to have and b) that the name has a maximum length of 8 characters and contains no special characters like "\,./?*"!

The "Logo" key specifies the size of your logo file. It must be exact and the logo must be in the DETLEF directory with the name "detlef.jpg".


Welcome to the Descent Level Network.
We generally divide levels into two categories: Sorted ones, that have been
tested by us for quality, and unsorted ones, that did not reach the status of
a quality level. The sorted ones are subsorted in Anarchy, Architectural and
Single Player ones. You can be sure, that when you download from any of these
sorted three categories, that these are great ones...
Descent 1 levels are not yet available here at the Descent Level Network, that
is one of our future plans.
Have fun and CU in the mines :)...

Here you can specify a short description for your web-site, that will be displayed when you click on "View informations of site" in the "Sites" menu. You can specify up to 65535 characters here (including spaces and carriage returns).

sign_note.gif (1726 bytes) You can also provide a logo. Name it "detlef.jpg" and put it in your DETLEF directory. The logo has to be of size 400x100, so you might first need to resize it to that size.

#DETLEF 01 specific START---
DETLEF 01 also has the alias directives in the detlef.ini file => see below.
#DETLEF 01 specific END---


#DETLEF 02 specific START---
The following entries are new to DETLEF 02:

These point to the directory to where the detlef.d1 and detlef.d2 files can be found as well as the list files. This has been made out of three reasons:

  • You can store the DETLEF 02 inf file in a different directory than the DETLEF 01 inf file while both pointing to the same list files. This makes your site both DETLEF 01 compatible and you gain DETLEF 02 features. Note that DETLEF 01 clients only can read from detlef.d1a to detlef.d2d file names.
  • You can disable a game for your site. Your site has no D1 levels? Write "D1=n/a" instead then.
  • You can store D1 levels incl. their lists somewhere else than D2 levels. Maybe someone else administrates your D1 level database than the one who administrates your D2 level database.
  • Support for new games will come soon: FreeSpace (F1), Descent 3 (D3) and FreeSpace 2 (F2) at least. Some groups (like DNet) have different servers for each game. So that makes it important to also store the files somewhere different.
  • FreeSpace 1 (F1) support will be added in DETLEF 03.

Also -since DETLEF Beta 02d- the site admin can now make announcements, which are listed in your DETLEF.INF file. See the caption "Announcements" below for details.

#DETLEF 02 specific END---


Game definition files


#DETLEF 01 specific START---
In DETLEF 01 there are exactly 8 lists: 4 for each D1/D2 (Anarchy, Architectural, Single-Player, Archives). This is exactly how DNet has structured its level databases at the Descent Level Network. There are no list definition files in DETLEF 01.
#DETLEF 01 specific END---


#DETLEF 02 specific START---
However, you might divide your level sections into different cathegories, and thats why since DETLEF 02, you can create the lists like you want. This is done by two new files: DETLEF.D1 and DETLEF.D2.

The format of these is like this:


d2a,D2 Anarchy,1
d2b,D2 Architectural,2
d2c,D2 Single-Player,3
d2d,D2 Archives,4

  • [General]\FileVersion=2 indicates the file version.
  • [Lists] lists the list files. In this example we just list our DLN specific lists, so this one behaves like DETLEF01. Each list gets one line with three parameters: the first one is the extension of the list file (e.g. DETLEF.D2A). The second is a name/desciption of it to be displayed in DETLEF. The third one is the icon displayed for each mission in that list: 1=Anarchy, 2=Architectural, 3=SinglePlayer, 4=Archives. 5-7 are reserved for FreeSpace icons (but not yet implemented).
  • [Alias] is the list of aliases for this game. See description of "Aliases" below.

#DETLEF 02 specific END---


Alias definition

The files detlef.d1a to detlef.d2d contain the complete URL of each level to download. As these URLs will most time start with the same characters (the server name + the directory), using alias numbers will make these files much smaller and faster to download. You can define up to 10 aliases.


  • Assume that all your levels are in the directory "".
  • Set the alias "2" to ""
  • So the complete name for would be ""
  • Instead of that you can then write "2/" at the URL of this level.

Another advantage of using aliases is, that when you switch servers later the only things you have to update are the alias names.

However you are not forced to use Alias names...

The place where to store the Alias names is:

  • #DETLEF 01 specific START---
    In the DETLEF.INI file.
    #DETLEF 01 specific END---


  • #DETLEF 02 specific START---
    In the file for the current game (e.g. D2 aliases are in DETLEF.D2).
    #DETLEF 02 specific END---

The syntax is the same in both file versions:


This is all what is currently used by DETLEF. However you can add remark lines at any row. Just begin the line with a semicolon ";" and you can write after this symbol whatever you want. However, the semicolon MUST be at the first position of the line. You can NOT add a ";" after a line (like in " ;my eMail-adress").


Level listing files

These files contain the list of all levels you provide. As said before the allocation of the levels to the four categories is your job. The format of each of these files is as follows:

Each line can be:

  • Either a remark line (introduced with a semicolon ";" character)
  • Or a blank line
  • Or a level definition line.

Here is an example file with 3 list entries, that should be enough to understand the format:

CRAZYX,Crazy X,5/crazyx.exe,1.01,Luke Schneider,Vizor,Luke Schneider,10,239,05/21/1997,08/18/1997,1,M
KAOSCTRL,Kaos Control,5/kaosctrl.exe,1.0,NuKE,NuKE,Jesse Cameron,6,310,11/11/1996,08/18/1997,0,M
ECLECTIC,Eclectic II,5/eclectic.exe,1.0,,,,5,217,,08/18/1997,0,
MIDGCOLL,Midgard Collection,5/midgcoll.exe,1.32,Midgard,Midgard,Dave Monson,8,821,10/01/1997/10/01/1997,0,T
ENTROPY2,Entropy 2,7/entropy2.exe,1.0,Luke Schneider,Vizor,Luke Schneider,6,865,11/27/1997,11/27/1997,2!,MRPB

So you see, each level is listed with 10 informations, seperated with commas each, in the following order:

Parameter nr/name Descent 1/2 meaning FreeSpace 1 meaning
(1) HOG_NAME Name of the HOG-file without the extension. Name of the FSM/FSC/VP file without the extension
(2) MISSION_NAME Mission Name. Mission/Campaign Name.
(3) DOWNLOAD_URL URL-Location, either complete or starting with an alias-nr. (warning: case-ensitive!). <- dito.
(4) REVISION Revision (e.g. "1.0","1.01" and so on) <- dito.
(5) AUTHOR Name of the author as s/he is usually called (some authors are better known with their real name (like Luke Schneider and Dan Wentz) and some with their nick names (like Midgard and NuKE). <- dito.
(6) AUTHOR_REALNAME Realname of the author. <- dito.
(7) AUTHOR_NICKNAME Nickname of the author. <- dito.
(8) NUMBER_OF_LEVELS Number of levels in the mission (including secret ones). Number of missions in the campaign (if not a campaign, then =1)
(9) SIZE_OF_DOWNLOAD_FILE Size in bytes of the download file (packed). Needs to be exact! <- dito.
(10) RELEASE_DATE Release date: when the author released the mission. <- dito.
(11) POST_DATE Post date: when you have post the mission on your page. <- dito.
(12) ICON_ATTRIBUTES to sign additional attributes that show up in the icon that is used for this mission. See below... <- dito.
(13) FEATURE_ATTRIBUTES blank or any mix of the characters "T",M","R","P","B", that specify the features of the level. See below... blank or any mix of the characters

As you can also see in the example, values that you don't know (like author name or the release date), can be just left out, by writing another comma directly after the previous one.

Important: the dates must be specified in the form MM/DD/YYYY. So "05/04/1997" would mean the 4th of May, 1997. Invalid values would be "5/4/1997", "05-04-1997", 04.05.1997" and "05/04/97".

Icon Attributes:

0 STANDARD_MISSION - Normal (can also be blank then)
1 GOOD_MISSION - Super Mission
2 PERFECT_MISSION - Fantastic Must-Have Mission
b BETA_VERSION - Beta version of a mission: handle with care and check for a final soon
- BAD_MISSION - Bad mission
! HANDLE_SPECIAL - (this one must be specified after 0/1/2/b/-) Important! Has to be handled specially! Check out the readme or description before using the mission.
Examples for proper usage of this attribute:
- Entropy 2 (the user needs Vertigo)
- EON X (special rules to play)
- Orion Nebula Project for D2 (need to start a batch file for full soundtrack)

Feature Attributes:

Descent 1/2 meaning FreeSpace 1 meaning
T Features new texture(s) Features new texture maps
M Features new (MIDI) music(s) Features new (WAV) music(s)
R Features new robot-behaviour Features new TBL files, editing ship and/or AI specs
P Features new polygon-model(s) (of any kind) Features new polygon-model(s) (of any kind)
B Features briefings (and a story) Features full-voiced briefing/debriefing (otherwise just text)
A n/a Features custum animations (ANI)
S n/a Features new voices
C n/a Is a Campaign

sign_note.gif (1726 bytes) You can specify up to about missions, so you don't need to pay attention on letting the list grow too big :)...


Server announcements


#DETLEF 02 specific START---
Starting with Beta 02d, DETLEF supports displaying announcements, which the DETLEF site admin can define. These announcements can contain DETLEF news, site news and announcements for new big level sets. Each announcement can link to a webpage. After a user has seen an announcement, the DETLEF client saves this and will not show it again.<(p>

To make an announcement, first make a new caption [Announcements] in your DETLEF.INF file. Each entry now consists of the name of the caption where the text for it is listed in this inf file, and optionally a webadress, which the user will get to, if he clicks on "Click here for more information". The third parameter is a short header. It is used for DETLEF 03's upcoming history feature, where you can see old announcement messages again (Beta 02d will not use it).

sign_note.gif (1726 bytes) Note that each announcement caption name must be unique, otherwise DETLEF might remember it as already being read. It must be even unique for ALL DETLEF sites, so best is you use a name containing your site name and a number, like DBs_SuperLevelServer001, DBs_SuperLevelServer002, etc. Here is an example announcement:

DBs_SuperLevelServer001,,Server updated to DETLEF 02!
DBs_SuperLevelServer002,,New great mission released!

Hey, my site is not DETLEF 02 compatible. Hope you like the new features :).

I have released a very cool mission called "SuperMission". It has a lot of custom bots, great music, and much more. Have a look at its features and details by clicking on the "More information" button below and then be sure to download and install it right via DETLEF.

You can create as many announcements as you want, DETLEF shows all of them to the user after he updated the list files, that he did not yet see. Of course you should not make too many announcements at once, since that might upset the user and logoff your DETLEF site. So only post important announcements once in a while. Do not announce usual updates, like "uploaded this and that level", since new missions since hie last update are shown bold anyway. If you think an announcement expires (you don't want it to be shown to any new user) then simply delete the caption and the entry in your [Announcement] caption.

sign_note.gif (1726 bytes) DETLEF 02, 02b and 02c will simply ignore your announcements. However as soon as the user installs 02d he will get them all.

#DETLEF 02 specific END---


DET files

DET files are used for extended level information (like the lists of available weapons) and for advanced search queries, like "search all missions with 0 earthshakers and at least 4 anarchy player-starts". DET files have to be in the same directory as the level download file and has to have the same filename. For example would have a crazyx.det (warning: case-sensitive!) in the same directory. Each mission has its own DET file. In multi-level-missions contain the sum of each item in the levels (so if 2-level-mission has 2 afterburners in level 1 and 1 afterburner in level 2, the value of afterburners would be "3").

DET files are not needed for a DETLEF server. You do not need to support the advanced search queries. You can even decide that some levels have DET files and some not. An example would be letting all Archives levels have no DET file. All levels that do not contain a DET file are simply excluded from advanced search queries.

DET files are automatically made by the LVLREP and soon also LVLREP32 modules of the Descent Manager. For the DOS version LVLREP you need V1.0 Alpha 01 Build 03 or higher, as available with the DETLEF Server Tools. To make DET files specify the /DET switch. For example LVLREP /DET *.MN2 will make DET files for all missions in the current directory. Then just upload the DET files into the directory with your level downloads to enable this feature.

Go to *.DET specs for advanced level information on DETLEF server sites


DETLEF 04 news

The recently released Beta 04 of the DETLEF32-client adds some new features, which for which however support from the server-side must be added. It is not required to add support for them on your website, so you can decide yourself, which of them you want to support, and which not.

  • List caching
    Updating the mission lists from a server does take some time, updating the lists from all registered servers at once does take a long time. So wouldn't it be good to only let the client download the whole lists from your server if something has changed at all since his last update? DETLEF Beta 04 and higher does this by checking the values in the DETLEF.INF file under [CacheLists]. Each game gets an own entry named "LastUpdate_D1" for D1, "LastUpdate_D2" for D2, and so on. The trick is the following: If the value for a LastUpdate_** key is the same in both the previously downloaded (locally cached) INF file and the just downloaded INF file from the server (the INF file will be downloaded in any case!) this game will be completely skipped. So add the following to your DETLEF.INF:


    Now every time you update one or more lists or the game definition file of a game, increment the value of the appropriate LastUpdate_** key. Alternatively to just numbers you can use the date of the last change or anything else (you are not limited to numerical characters either, you can use any string you want). Just make sure it *changes* each time you change a list to a new value. Note: if either the local version or the online version contains an empty value or does not exist, this feature is turned off for this game or the whole site and the lists are *always* completely downloaded. So you can always turn this feature off on your site if you see later that it takes too much time for you or you forget too often to update it. However you should never forget that this feature can save a lot of time and nerves on the client side and you want that people browse your site often, don't ya :)?

  • Compressed Lists
    The above feature lets you minimize the amount of unneccessary list downloads. It however does not speed up when an update happens on the lists (at least not for the one game whose lists were updated). And the first startup list download for a new DETLEF client user still takes a lot of time. This is what the new "Compressed Lists" feature takes care of. The server can provide a compressed file for each game that contains the game definition file (e.g. detlef.d3) and all of its list files (e.g. detlef.d3a to detlef.d3e). This will not only halve the number of downloaded bytes for the lists, it will also speed it up some more since e.g. 5 files of 10 kB take a lot more download over a network than one 50 kB file (because of the file request header overhead).

    To support this, all you have to do is to a) add the following to your INF file: [CompressedLists]

    (we have "n/a" for F2, since we don't have F2 missions and lists for now) and b) pack the d1, d1a, d1b, ... files in detlef.pd1, etc. using WinRAR. Note: the contra of this feature is that you will have to update both the list files and the compressed file(s) where a change occured each time you update your lists. So again you may want to evaluate if you want to take this little extra time to provide your visitors some service... You can always take the [CompressedLists] off of your INF file later again, if you decide to not support it any more.

  • Installation Points
    While the new features above improve the update speed, this last new feature adds something to the ease of installation of special missions and MODs. Normally DETLEF downloads missions and installs all downloaded missions to a pre-defined installation directory, which is for example the MISSIONS subdirectory in Descent 2 and 3. However some missions/MODs need to be installed somewhere else, e.g. a MOD might be installed right into the games' root dir or one of the other subdirectories of the game. You can now specify for each mission you provide where DETLEF shall extract the files to. Alternatively you can tell DETLEF to not extract the files but to launch them instead after download, like self-extracting EXEcutables that contain a Setup routine which is needed to install the mission/MOD.

    Add a new section [Install] to your game definition file, e.g. detlef.d2 for Descent 2. Now list up every mission that needs to be handled specially in the format \={,,...}. For example: d2c\EAF2=OPERATION_EXECUTE lets the mission EAF2 in the list detlef.d2c be installed by just executing the file eaf2.exe. Here is a parameter description: can be * to include all missions in a specific list (e.g. "d3e\*=OPERATION_EXTRACT,$gamerootdir\NETGAMES"). can be OPERATION_EXTRACT for normal extraction the old-style (2nd parameter is the directory then, where $gamerootdir stands for the games' root dir, so that $gamerootdir\MISSIONS for example specifies the MISSIONS subdir of the game), OPERATION_EXECUTE to start the downloaded EXE file (2nd parameters can be command-line switches to be posted to the application) or OPERATION_COMMAND which call a command (2nd parameter, use %f in the command as the variable to be replaced by the mission download file). Also note that *= specifies the default operation for all other missions, which you only need to override if you don't want the hard-coded default (which is MISSIONS dir for D2/D3 and the game's root dir for D1/F1/F2).


All pages (C) 1996-2000 Descent Network Team
Everything taken from the Descent, FreeSpace, Red Faction and Summoner series games are
Copyright Interplay Productions , THQ Inc. , Parallax Software , Volition Inc. and/or Outrage Entertainment