Doom Legacy 1.46 User Reference Manual

  1. Introduction
  2. Install
  3. Basic gameplay
  4. Console
  5. Network games
  6. Commandline options
  7. Notes


Hello all Doom fans of the world, welcome to the latest release of Doom Legacy!

Since Doom was out we have been fans of deathmatching. Don't ask us why, but we liked Doom more than Duke Nukem, Quake or other clones. We simply enjoy the atmosphere, look and feel of Doom. We always dreamed of Doom sources being released. How many days we spent talking about the features we'd put in it! In the middle of 1997 we heard a rumour that the Doom sources would be released. Some months later the miracle happened: In December 1997, id Software made the full source code of Doom public. A great number of open source projects have started around the sources since, and Doom Legacy is competing to be the best of the choices!

Doom Legacy can play Doom, Boom, and Heretic maps. In addition to the original games by id Software and Raven Software, there are hundreds of free, fan-made maps available on the Internet. These maps are typically distributed as PWAD files, which are not fully self-contained. For each game you will also need the corresponding IWAD data file, which contains all the graphics, sounds and music in the game. For example, if you want to play Doom II maps, you'll need the file doom2.wad. Doom Legacy itself is free software, meaning that you can copy and distribute it without charge. The original Doom and Heretic IWAD files (doom.wad from Doom, doomu.wad from Ultimate Doom, doom2.wad from Doom2, tnt.wad or plutonia.wad from Final Doom, heretic.wad from Heretic) are still copyrighted products and available commercially.

There are also some free replacement IWADs which can be used instead. FreeDoom (doom2.wad or freedoom.wad) is a free substitute for Doom2. Blasphemer (heretic.wad) is a free substitute for Heretic, but it does not have monsters yet (it needs volunteers to work on it!). The Legacy engine will recognize and play Chexquest (chex.wad), Chexquest2, and Chexquest-Newmaps (newmaps.wad), but not Chexquest3.

In addition to the now fundamental and de-facto-standard Boom extensions, Legacy also has implemented among other things 3D floors, swimmable water and other special effects using extended linedef codes, and supports the FraggleScript scripting language.

To get started with Legacy, we recommend the following PWADs:

We hope that this new release brings you a lot of enjoyment. Have fun!!

-The Doom Legacy Team

What's new

See here for the latest changes.

What's coming

We have planned other features. See our website.


Installing Doom Legacy depends upon the operating system and the user preferences: A full explanation of the source packages install is in the INSTALL manual.


Select one of install methods. This will determine where the binary, wads, and docs are installed. In some cases a directory may be specified.

System Share Install

Install to a System executable directory, like "/usr/local/bin" or "/Program Files". The docs and wads are installed to a user share directory, like "/usr/local/share/games/doomlegacy" or "c:/games". The owner of the files will be privileged.

Games Share Install

Install the binary in the games directory, but wads and docs in a system share directory, for use by all system users. The default games directory is games/doomlegacy and the default share directory . The owner of the files will be privileged. A directory may be specified.

Games Install

Install in the games directory, for use by all system users. All components will be installed into the same games directory, which by default is "/usr/local/games/doomlegacy" or "c:/games/doomlegacy". The owner of the files will be privileged. A specific directory may be specified.

User Install

Install for the use of the immediate user, owned by the immediate user. The install directory must be within the user directory space. The User may specify a directory.


The installation can be system-wide or just for the user. Some wad files can also be installed system-wide. These can be put into one of the system wad directories. The user can also keep private wad directories. All will be searched, see the search directory list in the INSTALL manual.

The IWAD files should go in a separate directory that can be shared between all Doom source ports (such as /usr/local/share/games/doomwads). You can set the DOOMWADDIR environment variable to point this directory in a login script or a game starting script. If DOOMWADDIR is not set, Doom Legacy will try the directories of the search list, and the installation directory.

You can also make soft links one of the above mentioned directories to point to the actual IWAD files. The valid file names for each game selection can be found in docs/technical/wad_selection.txt.

$ ln -s wads/idgames/doom1.wad doom1.wad $ ln -s wads/idgames/doom2.wad doom2.wad $ ln -s wads/idgames/doomu.wad doomu.wad $ ln -s wads/idgames/plutonia.wad plutonia.wad $ ln -s wads/idgames/tnt.wad tnt.wad $ ln -s wads/freedoom-iwad-0.7/doom2.wad freedoom.wad $ ln -s wads/freedoom-iwad-0.9/freedoom2.wad freedoom2.wad

Doom Legacy will use the HOME environment variable, which is usually set by your Linux login, to find your home directory. It will make a hidden directory named .doomlegacy there for storing your configuration files and saved games. If HOME is not set, Doom Legacy will look for /usr/local/games/legacyhome, and if that is not present then will use the current directory. This behavior can be overridden by using the -home and -config switches:

$ doomlegacy -home ~/doomstuff -game plutonia $ doomlegacy -home ~/doom -config ~/doom/plutconfig.cfg -game plutonia

PWAD and DeHackEd files can be included using the -file switch. Examples:

$ doomlegacy -game tnt $ doomlegacy -game plutonia -file pwad/pl2/PL2.WAD $ doomlegacy -iwad freedoom.wad -file new_map13.wad $ doomlegacy -file pwad/Twilight/TWILIGHT.DEH pwad/Twilight/TWILIGHT.WAD

Script files can also be used to start Doom Legacy:

#!/bin/sh cd /usr/local/games/legacy/ USER="Shotgun-wizard" DOOMWADDIR=wads doomlegacy -iwad doom2.wad -file DM8.WAD


The installation can be system style, a games directory, or within the user home directory. Some wad files can be put into one of the absolute path wad directories, making them available to all users and all doom programs. The user can also keep private wad directories relative to HOME. All will be searched, see the search directory list in the INSTALL manual.

The installation should put all files in known directories, which makes it easy to start Doom Legacy without needing to change to the program directory. If there is difficulty, it will be due to Doom Legacy not finding your HOME directory, not finding where legacy.wad is stored, or not finding the IWAD. Ensure there is a consistent HOME directory to use the same config file each time you play. Put the needed files in known directories, and check that that the HOME or UserProfile environment variable is set to your home directory. When started with the "-v" switch, Doom Legacy will print to stderr.txt where it finds directories and the search list. Support files, like wads, legacy.wad, autoexec.cfg, and config.cfg, need to be found by Doom Legacy. The known directories are listed in the INSTALL manual.

Put your wad files in known directories of the search list, like "\doomwads", or "\games\doomwads", or in the current directory. Doom Legacy will look in all directories of the search directory list. Setting DOOMWADDIR environment variable specifies an additional wad directory to be searched. This can be set at login, or in a batch file that starts Doom Legacy.

A "legacy" directory will be created in your home directory for savegames and saved config files. Set the environment variable "HOME" in a batch file, or use the -home switch when starting Doom Legacy. In Windows, "UserProfile" will be checked as an alternative to HOME. Otherwise, it will check for an alternative home directory exists, "legacyhome". As a last resort, it will try to create "legacyhome" in the program directory. Overriding by using the -home and -config switches, examples:

> doomlegacy -home c:\games\doomsave -game plutonia > doomlegacy -home c:\games\doomsave -config c:\games\plutconfig.cfg -game plutonia

Use the verbose switch -v, and Doom Legacy will print to stderr the directory names that it used. On Win98 this becomes a file named stderr. The use of directory names with spaces may fail.

It is difficult to start a program under windows and set command line switches. Most of the settings that the launcher supported can now be set from menus and the console. However the -game, -file, and -config must be set from command line switches.

Doomlegacy will invoke a Launcher window when it is started without switches. It will also invoke the Launcher window when the game selection results or iwad selection are invalid. The Launcher window provides input of the game switches, iwad, config, home, and doomwad directories.

Another way to start Doom Legacy is to create shortcuts. These can be executed using a mouse. Specify in the shortcut the command line, and change the starting directory to where the doomlegacy program resides.

Example shortcut for Doom Legacy with plutonia2 wad: Shortcut: dl_plut2 command: doomlegacy -game plutonia -file c:\games\pl2\PL2.WAD current directory: c:\games\legacydir

Creating a batch file with the necessary commands is also an easy way to record a combination of switches. Run the batch file to start doomlegacy with the particular game and PWAD. In the following batch file examples, legacydir, homedir, configdir, and waddir stand for directories that you specify.

DOOM2.BAT cd c:\legacydir\ doomlegacy -game doom2 DM8.BAT cd c:\legacydir\ doomlegacy -iwad waddir\doom2.wad -home c:\homedir\ -config c:\homedir\config8.cfg DM2MOD.BAT SET HOME=c:\games\home SET DOOMWADDIR=c:\games\wads cd c:\games\legacydir doomlegacy -game doom2 -file levl9.wad mod2.deh mod8.bex

Windows with launcher

The previous separate launcher is no longer actively supported, but older launchers will still work. Other Launchers can also be used, as most command line switches are somewhat standard. Most of the settings that a launcher supports can now also be set from the console also, or using an autoexec file.

The launcher has some problems with setting home and config directories. You will likely have to include "-config mydir\config.cfg", and/or "-home homedir" in options.

Environment variables

The following environment variables alter Doom Legacy behavior. None of them are required.

Setting up the game

Legacy uses a configuration file (config.cfg) to setup the game. Your personal control settings are saved in your config.cfg file. They can be changed by menus in Legacy, and are saved when quitting the game.

When config.cfg does not exist, Legacy will write one using a default config.

OpenGL uses a separate file, 'glconfig.cfg', so that the OpenGL settings do not disturb an existing config file. This does mean that switching to OpenGL requires setting up the controls again.

Develop mode (-devgame or -devparm), will use devdataconfig.cfg as its config file.

Setting up the controls

Setting up the controls, mouse and joystick, video mode etc. is done while in the game, using the main game menus: Setup Controls, Video Options, Game Options. You can change all game settings at any time during the game.

The mouse will be activated by default, to disable it, change the 'use_mouse' variable in the console. The joystick will not be used as default, set the 'use_joystick' variable at the console.

The mouse and joystick sensitivities can be set using the console variables, and there is some menu support.

Setting up the sound

The binary downloads of Doom Legacy use SDL sound. The other options require downloading source code and compiling with your own selection of compile options.

Setup Controls menu

You can bind actions to one or two keys, like in all decent games. Select an action, press ENTER, and then press the desired key, mouse button, or joystick button. To CLEAR the keys attached to a control, use the BACKSPACE key.

To setup the DOUBLE CLICK for mouse/joystick buttons: enter the click one time, so that it displays, e.g. 'MOUSEBUTTON1'. Then re-enter the click a second time, and it will transform into a dbl-click, e.g. 'MOUSEBUTTON1' will become 'DOUBLEMOUSE1'. You can use double-clicks for any joystick/mouse button, and you can attach any action to it.

When controlperkey is "Several", a single key can be set to multiple actions, e.g. go backward and 'use' at the same time. Normally when a key is set for an action, other uses of the same key are cleared.

Gamma controls

The control of gamma is much finer than before. The gamma table is now generated from the control settings, instead of using four preset gamma tables.

The gamma control functions:

Controls for gamma function, black level, bright level, and gamma are on an options page. The values can also be changed by a console set command, or in your personal config.cfg file.

gammafunc Gamma_bright_black black -2 gamma 2 bright -1

To see the current setting just type the name, without a value. Normal levels are black 0, gamma 0.

To set the gamma correction to your preference, find a dark area in a wad or use the gamma.wad file (i.e. -file gamma.wad). Set the black level to give a good looking even gray scale in the darkest areas (little gray room in gamma.wad). White textures will not go completely to black, but will instead stay gray. The software renderer is limited to 32 light levels, so do not try to get it perfect in the darkest three gray test strips as it is not possible. Instead try to get the gray intervals even. You should be able to just barely see an object right in front of you in the darkest room, and see white textures across the room as a dark gray patch.

Then go to a normally lit area and adjust gamma to give the brightness and evenness of tone that you would expect.

Use the bright control to adjust the brightest outdoor scenes after the gamma and black levels are set. Unlike most monitors, this bright control actually controls the brightest light levels.

Your preferences may be different. From experiments, trying too hard to set a perfect black leads to extreme gamma settings to correct for the side effects. It is a compromise, as actual hardware varies, and the gamma table equations represent ideal CRT behavior. LCD monitor gamma response is even less ideal.

Evenness is usually more important than absolute brightness. The brightness appearance is affected greatly by the amount of light over your monitor. If the wall textures look harsh, then the gamma is set too high, or the black level is set too low.

Original Doom gamma settings are at (0, -3, -6, -9, -12). gamma index : GAMMA value 12: 1.48 11: 1.44 10: 1.4 9: 1.36 8: 1.32 7: 1.28 6: 1.24 5: 1.2 4: 1.16 3: 1.12 2: 1.08 1: 1.04 0: 1.0 -1: 0.96 -2: 0.92 -3: 0.88 -4: 0.836 -5: 0.793 -6: 0.75 -7: 0.706 -8: 0.663 -9: 0.62 -10: 0.58 -11: 0.54 -12: 0.50


Shooting up and down

There's nothing changed, except of course a totally new deathmatch experience.

About the BFG: the BFG ball can be fired up or down, but the invisible rays that spray from you have always 'autoaim', they're not dependent of your up and down aim. Let's be clear: apart from being able to shoot the BIG BFG BALL up or down, the side-effect of the BFG is as before.

Autoaim toggle

We wanted to keep the compatibility with the traditional Doom gameplay, but we needed also to go forward and bring more depth to the deathmatches. One of these steps is enabling manual aiming.

You may feel like it's unbalanced if some people use the autoaim, as they don't have to make the effort of aiming properly, and others don't use it and do their best to aim up and down... NEW since Legacy v1.2: with allowautoaim you can disable autoaiming, that is, impose manual aim to all players in a network game. Use with caution as you may offend!!

Weapon changes

We didn't dare of course change the existing weapons functionality! You may appreciate however, the fact that you can remap every weapon to any key, in the Setup Controls menu. Since you can map two keys per 'control', you can keep the original keys '1'-'8' for the weapons, and add a shortcut to your preferred ones. eg: '5' and 'r' for rockets.

New cheats

Similar to the 'idcmus##', but for CD Audio tracks. Example: 'idcd02' starts cd track 2.
Fly around levels, using the jump key to gain altitude.

Savegame directories

Legacy allows savegame directories, with up to 99 savegames in each directory. This feature can be enabled/disabled by a compile time option.

The savegame file names include the level name and play time. The savegames also have a human-readable header with this and more information, including the command line switches used.

The cursor movement keys are up-arrow, down-arrow, page-up, and page-down.
The delete key will delete the selected savegame or directory.

The savegame menus now include a directory name. The directory is selected by moving the cursor up to the directory name, and pressing ENTER. The menu will present all the existing directory names. The blank directory line is the legacy default directory which contains all the directories and savegames.

To create a new directory, move to the directory line, press ENTER, type in a new directory name, and press ENTER.

OpenGL renderer

Legacy includes two different graphics engines, the old Doom software renderer (with many improvements) and an OpenGL-based hardware renderer.

The OpenGL renderer is shinier and has fancier effects than the software one, but it does not do everything that the software renderer does. It does have coronas, explosion light, and other light effects that the software renderer does not do.

Some wads rely upon violating wad rules to get trick effects. These rely upon tricking the software renderer into not drawing something. Using those wads with the OpenGL renderer you will see holes in the floor and ceiling, and warning messges about polygons.

OpenGL relies upon having video card hardware acceleration. This requires that your video card drivers support OpenGL operations. Without OpenGL hardware acceleration, SDL will emulate the OpenGL operations using software run on your CPU, which is very very slow. How well a video card works with OpenGL is dependent upon the drivers. It is SDL that interfaces with the video card drivers.

Video cards have different levels of hardware acceleration, and rendering speed. Activate only as many fancy rendering options as your video card can draw fast. Turning off Trilinear and Bilinear filtering can gain speed.


See here for more about the console.


Since Legacy 1.2, the network part of Doom has been totally rewritten. It now uses a better transfer method for the packets, (which is usually faster), and also implements a basic Client/Server model, where some critical game options are changeable only by the server in multiplayer games.

Since the network communication is faster, we have upped the maximum number of players to 32!

Client/server model features

The network code has been totally rewritten, here are the main features:

Setting up a network game

A network game can be started either using the commandline parameters -server and -connect, or from the multiplayer menu that allows you to connect to a server or create one yourself.

Legacy uses the UDP port 5029 only and can accept messages from any port so it works perfectly with NAT (Network Address Translation). Because the IP of any computer behind the firewall is not routable the server cannot get a usable IP address during player join-game. If you are familiar with IpAutoforward funtionality of Linux, you can make a usable IP appear.

The server

Start a server from the Multiplayer menu or from the command line. One player can play on the server itself.

Server command line switches

Doom Legacy can start as a server from the command line with one of the following commands. Other switches can also be included to select the game and wad.

$ doomlegacy -server <num-of-computers>

The server will wait until the specified number of computers have connected and then will start the game. This is like the old way to start a game. It is more fair because all players start at the same time and with the same weapons. Of course other computers can also join later.

$ doomlegacy -server

This starts the server and does not wait for any computers. It starts the game immediately. Other players can join later.


Clients are the other players who join the game by connecting to the server. Each additional player connects to the server with one of the following connect commands.

To detect servers on the local network, the local network search address must be specified in one of the server config vars, server1, server2, or server3. These can be set using the console. Your computer might have an IP address such as "". For a network would be "192.168.1". The network broadcast address is the network address with last number as 255. Doom Legacy servers on the network will answer the broadcast.

>server2 ""

Servers can be specified by any of the config vars, server1, server2, or server3. The address is checked for a running server.

>server1 ""

Client command line switches

Doom Legacy can connect to the server from the command line with one of the following connect commands.

To connect to a specific server computer using their ip address.

$ doomlegacy -connect <ip address of server>

Without the ip address, it will auto-detect the server on the LAN. This only works when computers are directly connected. If you play through internet, only the servers on a local internet can be auto-detected.

$ doomlegacy -connect

Example A, 3 players on a LAN: player 1 (the server) $ doomlegacy -server 3 player 2 (client) $ doomlegacy -connect player 3 (client) $ doomlegacy -connect Example B, 2 players, through internet: player 1 (the server) $ doomlegacy -server 2 player 2 (client) $ doomlegacy -connect Example C, a 3 player game, with _TWO_ computers, one is split-screen: player 1 (the server) $ doomlegacy -server 3 player 2 and 3 (2 clients on the same computer) $ doomlegacy -splitscreen -connect

The server will send the clients all relevant game parameters, they do not need to be specified on the commandline (and in fact would be overridden). Also the -file parameter is not needed on the clients anymore. The clients will automatically download any necessary PWAD files from the server if they cannot be found locally.

Use '-notime' to disable file date check on clients. Normally the game will warn you if a client has a file loaded by the server, but with a different date. Clients should have the exact same version of the files added by the server.

To make a network game enjoyable you will need a good ping value, ideally less than 30, more than this may be unplayable because there is not, for the moment, code to reduce the latency between command entered at keyboard and command execution. In other words, Doom Legacy doesn't use interpolation to make the game smooth when it is not in reality.

Multiplayer intermission screen


The Launcher window is invoked when there is an error with the game selection, the iwad specified cannot be loaded, there is a fatal error in the startup, or if the command line is empty.

If there is an error, the console window will display first with the errors. Pressing escape will proceed to the Launcher window.

The Launcher window has input lines like a menu. Use the up and down arrow to move between items. Type in names for the directories, or use backspace to erase names. On the switches line the entire switch syntax must be input, on the others only the name is input. The left and right arrows will cycle through the game selections. When you are satisfied, the continue entry will restart Doom Legacy with your new command line input submitted. The QUIT entry will exit Doom Legacy entirely.


Here are the command-line options Legacy recognizes:

Config options
+<console expression> You can enter any number of console expressions at the command line.
They will be executed right after the configfile, but before autoexec.cfg.
-home <dirname> Set your home directory location, where your configfiles and savegames are kept.
-config <filename> Set the configfile to use. Default: config.cfg.
-mb <number> The amount (in MiB) of memory that Legacy allocates for ZALLOC.

Otherwise the default of 24 to 80 MiB is used. This and the MIN and MAX limits are set by compile time options.

This sets the number of megabytes of memory to allocate to ZALLOC at Doom startup. ZALLOC is used for saving the directories, textures, and other lumps of the wad files. Executable and stack use other memory.

If the amount of requested memory is not available, then it will try for half of what is free. There are several compile time options for ZALLOC memory allocation, the updated Zone allocation, automatic growing Zone allocation, and simple and tagged malloc allocations.

The default memory allocator, GROW_ZONE, will grow the memory allocation when needed. It is no longer critical to set enough memory on the command line, although it may make loading smoother.

This switch on the SWITCH line of the Doom Legacy Launcher is ineffective because the memory system has already started by then. However, Doom Legacy is compiled by default with the GROW_ZONE memory system, that automatically increases the memory allocation as needed, so it is not needed. If you were to compile Doom Legacy with the old ZONE_ZALLOC memory system selected, then this switch would be necessary to control it.

-noversioncheck Do not check that legacy.wad version matches the executable version.
-cdrom Execute from CDROM. Overrides DOOMWADDIR, and the legacy home directory settings.
-lang <name> Load the BEX language file name. If the name is not specified, then the file "lang" will be tried. The language file uses BEX to change some game text. An example french.bex is available.
Game options
-game <game-name>

Forces a particular game mode to be used. This replaces renaming the wad file. If an IWAD is not explicitly given, the appropriate IWAD will be automatically loaded.

Savegames are now marked with the game name, and will not load with a different game name.

The particulars about a particular game-name are in docs/technical/wad_selection.txt.

The valid game-name at this time, and the file names accepted are:

game-namemodefile name
doom1Doom sharewaredoom1.wad, doom.wad
doomuUltimate Doom doomu.wad, doom_se.wad, doom.wad
freeduUltimate Doom freedoom1.wad, freedu.wad, doomu.wad
freedoomDoom2 freedoom2.wad, freedoom.wad, doom2.wad
freedmDoom2freedm.wad, doom.wad
heretic1Heretic shareware heretic1.wad, heretic.wad
blasphemHeretic BLASPHEM.WAD, blasphem.wad, heretic.wad
chex1Chexquest chex1.wad, chex.wad
doommodeDoom1 doom1.wad, doom.wad
ultimodeUltimate Doom doomu.wad, doom.wad
The following are valid game-names, but the mode is not supported yet.
hexen1Hexen shareware hexen1.wad, hexen.wad
strife0Strife shareware strife0.wad, strife.wad
-iwad <filename> Set the main IWAD file to use. This also determines the game mode when -game is not used.
-file <filename1> [<filename2>...] Load one or more additional PWAD or DeHackEd files, possibly replacing some of the IWAD data.
-deh <filename1> [<filename2>...] Load one or more DEH (DeHackEd) files or BEX files, which can change monster abilities and game text. Also accepts -dehacked.
-noloadfail Doom Legacy will now fail with an error message when a file fails to load, like many other ports. This will start the Launcher. The -noloadfail switch will cause it to ignore the load failure, as in previous versions of Doom Legacy.
-loadgame <num> Load savegame by number. This can only access the main savegame directory. Other command line options must set up the correct game and files.
-skill <1-5> Select the skill level, start game immediately.
-episode <number> Select the episode, start game immediately.
-warp <number> [<number>] Select the map, start game immediately. In DoomII, -warp 13 will goto map13. In Ultimate Doom, -warp 1 3 will goto Episode 1, level 3.
-nomonsters No monsters in the game started from the command line. Does not affect games started from the menus.
-respawn Respawn monsters when they are killed, in the game started from the command line. Does not affect games started from the menus.
-coopmonsters Monsters cooperate in the game started from the command line. Does not affect games started from the menus. Monsters do not damage each other. Conflict with monster infight.
-infight Monsters fight each other in the game started from the command line. Does not affect games started from the menus. Monsters will retaliate and damage each other. Conflict with coopmonsters.
-fast Monsters move faster and shoot quicker in the game started by Warp or Episode. Does not affect games started from the menus.
-predicting Monsters aim at moving players better in the game started by Warp or Episode. Does not affect games started from the menus.
-turbo <10-255> Altered player speed in percent (slower or faster). Add or decrease difficulty, or compensate for system controls.
-noresetplayers Do not reset players, same as the transition to the next map. This keeps the existing player stats.
Video options
-width <xxx>
-height <yyy>
If you like pain, you can set the screen size at the command line instead of using the 'Video Mode' menu. Legacy will switch to 320x200 if it can't find a corresponding mode.
-highcolor Request a 15 bpp or 16 bpp video mode. If that fails, it will try 8 bpp modes.
-truecolor Request a 24 bpp or 32 bpp video mode. If that fails, it will try 8 bpp modes.
-native Request use of a native bpp video mode, based on what video mode is being used when the program starts. If that fails, it will try 8 bpp modes. On most modern systems, native is 32 bpp.
-bpp <number> Select video mode bpp (8,15,16,24,32) explicitly. If that fails, the program will exit.
-win Only allow windows video modes, ignoring DirectDraw video modes. For WIN32 port.
-opengl Hardware accelerated rendering using the OpenGL library. Will use hardware acceleration for OpenGL if available. If the video card does not have OpenGL hardware acceleration then it will use the OpenGL emulation in software, which is very slow. OpenGL is the most actively supported hardware acceleration. For SDL, Linux-X11-XSHM, MACOS, and WIN32 ports. MiniGL is a subset library of the OpenGL standard for WIN32 and will use the minigl.dll instead. Requires compiling with the OpenGL library and configuration. Default: use the software renderer.
-minigl Hardware accelerated rendering using the MiniGL library. MiniGL is a library of the OpenGL standard for WIN32 and will use the minigl.dll instead. For WIN32 port. Requires compiling with the MiniGL library and configuration.
Hardware accelerated rendering using the Glide library for the Voodoo card. For Linux-X11-XSHM, Linux-X11-GGI, and WIN32 ports. Requires compiling with the Glide library and configuration.
-winvoodoo OpenGL parameter for voodoo card on Linux-X11-XSHM. If MESA_GLX_FX is not set as an environment variable, it selects window video modes with "MESA_GLX_FX=window", (default is fullscreen). It also prevents grabbing the mouse. For Linux-X11-XSHM port. Requires compiling with the XSHM library, MESA library, and configuration.
-d3d Hardware accelerated rendering using Direct3d library for Windows. Requires compiling with the Direct3d library and configuration. For WIN32 port.
-left Start a drone client that displays the left view of three screens.
-right Start a drone client that displays the right view of three screens.
-screendeg <angle> Start a drone client that displays with an angle offset. Useful for setting up left and right screens. The angle is in degees, but cannot be negative (command line limitation). For left angles input the value of (360-num) instead, such as 270 for -90 degrees, 315 for -45 degrees, 340 for -20 degrees. Limited to range 270 to 0 to 90 degrees.
-polypoolsize <num> Specify the size of the polygon pool for hardware rendering, in KiB. The default is 1000 KiB. Requires compilation without ZPLANALLOC compile option. The ZPLANALLOC option allocates such poly without using a pool, and is the default in the compilation.
-display <name> Specify the X11 display to use for the game, by name. The default is the current display device. For Linux-X11-XSHM port.
-noendtext Suppress the game EndText screen, which could disrupt some terminal emulations because of the special character attributes used. Much of this problem has been eliminated by interpreting those attributes for each port. For SDL, MACOS, and Linux-X11 ports.
Sound and music options
-nosound Disable all sound effects (including music). The sound effects volume config var also affects sound.
-nomusic Disable music. The music volume config var also affects music.
-nocd Disable CD music.
-precachesound Preload sound effects. Also enabled by the precachesound config var.
-freq To set the frequency used by the DirectSound sound buffer. The default is 22050 Hz. For WIN32 port.
-coopsound To set DirectSound to be cooperative with other windows applications. For WIN32 port.
-ds3d Use the DirectSound 3D generic sound driver. This driver is suitable for most 3D sound chips. For WIN32 port. Requires compiling with the HW3SOUND compile option.
-sounddriver <driver> Specify an external hardware sound driver (dll). For WIN32 port. Requires compiling with the HW3SOUND compile option.
-winmidi <num> Specify an external midi hardware port device ID. How to discover the device IDs is unknown. The default is -1. For WIN32 port.
Input Controller options
-nomouse Do not use the mouse and skip mouse detection. For Linux-X11-XSHM, and WIN32 port.
-nojoy Do not use the joysticks and skip joystick detection. For DOS, and WIN32 port.
-nodinput Get mouse movement from window events instead of DirectInput polling interface. For WIN32 port.
-gettickcount Do not use the high precision timer, to avoid a win2k timer bug. For WIN32 port.
-server Spawn a server. Allows a player on the server.
-dedicated Spawn a dedicated server, without player. A dedicated server only has console commands for setting up the network and games, not those for the player settings.
-connect [<IP> | <address>] Connect to a server at the specified address. If no address is given, search for servers in LAN.
-ipx Use IPX network protocol instead of IP. Must be compiled with USE_IPX compile option enabled.
-udpport Specify the port to use on IPX or IP network. The default should be 5029.
-clientport Specify the port that the client uses on IPX or IP network. The default is to use the udpport. This allows running the server and client using different ports.
-net Specify network play in DOS port version. For DOS port.
-doomatic Specify doomatic network play in DOS port version. Introduced in version 1.29, it appears to have more advanced network communications than the vanilla network play. For DOS port. Requires doomatic network software.
-nodownload Do not download any files from servers.
-nofiles Do not check for having any files, download all from servers.
-extratic <num> Send extra copies of player movement over the network, to prevent retransmission. Normally 1.
-bandwidth <num> Set the usable bandwidth of the network, in bytes per second (1000 to 100000). The default is 3000.
-packetsize <num> Set the usable packetsize for transmissions over the network, in bytes (75 to the hardware limit). The default is the hardware max packetlength.
-debugfile <num> Writes network debugging information to a file named debug1.txt, where the 1 is the specified num. If the num is not specified, the default is the player number. Will try higher num until it succeeds in opening a file. Must be compiled with the DEBUGFILE compile option enabled.
Multiplayer options
Play deathmatch where multiple players fight each other to score kills. Normal deathmatch has weapons and a few special items respawn, but altdeath has all items and weapons respawn. Without -deathmatch or -altdeath, the game will start cooperative where the players cooperate to fight the monsters. This can also be selected and customized from the menus.
A variation of -deathmatch that activates team play where teams are identified by color (-teamplay) or skin (-teamskin). The color is applied to the player armor using color translation. A skin is an alternative player sprite, like an orc or mercenary. The skins must be provided in one or more PWAD.
-timer <num> Timelimit in minutes.
-avg Austin 20 min. rounds. (Austin Virtual Gaming)
-splitscreen Two players on this screen. One player is the top half and the other is the lower half of the screen. The controls are selected for each player from the keyboard, one or two mice, and multiple joysticks. This may be used alone or with network play.
Demo options
-playdemo <file> Play the demo from the specified file.
-record <file> Record a demo to the specified file.
-maxdemo <size> Set the -record demo buffer to the specified size (in KiB). The default is 20. Use with -record.
Development options
-devparm Development/debugging mode. Prints out some extra information mainly useful for developers, does not grab the mouse.
-devgame <game-name> Development mode using devparm for the specified game, in the same format as -game. User can include development files from working directories using -file.
-wart <number> [<number>] Development modification of warp. Load the selected map from the devmaps directory, and warp to it. In DoomII mode, -wart 13 will load devmaps/cdata/map13. In Ultimate Doom mode -wart 3 1 will load devmaps/E3M1.
-timedemo <file> Play the demo from the specified file while timing it.
Timedemo option, to get execution time without drawing. Caution: there is no visible display so you must exit the game from memory of the commands (ESC, Q, RETURN, Y).
-noblit TimeDemo option, to get execution time without blit. Currently, none of the draw ports honor this test.
Options on -server. The actual usages of these have been lost. The "+connect" option will enable some server code, but is not same as -connect. The "+map" option will issue a map command to change to the start map. Example: -server+connect+map
--help Help menu giving help sections.
-h <section> Display one of the Help sections:
gHelp on game and wads
mHelp on multiplayer
cHelp on config
sHelp on server
dHelp on demo
DHelp on Devmode
-v Verbose. Print more information about warnings, wad errors, and the progression of startup and shutdown.
-v2 Very verbose. Print detailed information about the video system, modes available and how the mode selection is handled.


DeHackEd patches

Doom Legacy supports dehacked patches directly, without having to patch the executable. The original DeHackEd was an editor that would patch the Doom executable to change strings and monster behaviors. Doom Legacy will alter its own strings and monster behaviors to get similar, or better results.

As of version 1.44, Legacy allows multiple changes to the same string. Later changes to a string will work, even when Legacy changes, language changes, Chex mode changes, or other deh files, have already changed the string.

You can specify multiple .deh files using the -file option, and they will all be executed, in the order you have given them. Also, since version 1.30, Legacy will look for a lump named DEHACKED in each wad file and treat the contents as a dehacked patch.

We don't check for the dehacked patch version, we added support for the patches version 6, it should run ok with (not too) old patches. If you have a problem with the version of the patch, try to convert it. Just load the .deh file into a recent version of Dehacked (3.0), and then save it again. It will then be saved as a text-file, that Legacy will be able to use.

All text changes are supported, you can edit the .deh manually and replace strings by larger strings than the original Doom, it works. Sprite renaming works too, well, pretty much anything works :)

BEX patches

Doom Legacy supports BEX, which is similar to dehacked but references changable attributes by a BEX name. BEX has more functionality and is more consise than DeHackEd. A BEX file can be provided using -file or -deh, and BEX can be in the DEHACKED lump. BEX is processed when BEX section names are encountered ("[STRINGS]", "[PARS]", "[CODEPTR]"), and will also handle INCLUDE.