Doom Legacy User Reference Manual
Description: Doom Legacy is your premiere source port engine for id Software's classic DOOM games and more!
Keywords: Doom, Legacy, documentation, manual, docs

# Doom Legacy 1.45 User Reference Manual

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

## INTRODUCTION

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:

- The new editing features are demonstrated in Legacy_3ddemo.wad and rainbowstar.wad
- Wads that use Legacy 3D floors: 3DHorror.wad, phobia.wad, hth2.wad
- Deathmatch wads: andydm1.wad, shbullet.wad
- Chexquest sequel: Chexquest-newmaps.wad

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.

## INSTALL

Installing Doom Legacy is simple, just follow these steps:

### Linux

Choose an installation directory that all players can use, like /usr/local/games/doomlegacy. Unpack the tar file contents here. The installation directory needs to include the doomlegacy binary, legacy.wad, and autoexec.cfg. The tar file will also install the Doom Legacy docs there.

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 /usr/local/share/games/doomwads, and /usr/local/games/doomwads, and the installation directory.

You can also make soft links in the abovementioned IWAD directory to point to the actual IWAD files. The valid file names 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

### Windows

It is important to change to the directory where doomlegacy resides. Support files, like wads, legacy.wad, autoexec.cfg, and config.cfg, need to be found by Doom Legacy and it looks in the current directory as last resort.

Put your wad files in directory "\doomwads", or "\games\doomwads", or in the current directory. Doom Legacy will use the first that exists as the doomwaddir. Set DOOMWADDIR in a batch file to specify a different wad directory.

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. Otherwise, it will check if the default home directory exists, "\legacyhome". If none are present, then it will use the current directory for home, but only if it is not root, "c:\". 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. There are other Launchers that can also be used, as most command line switches are somewhat standard. Most of the settings that a launcher supports can now be set from the console also, or 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.

- Unpack the archive to a suitable program directory, like C:\legacy
- Start the Launcher
- Fill in required information about WAD locations and hardware options
- Launch the game!

### Environment variables

You can set the following environment variables to have additional control over Legacy behavior. None of them are required.

- The environment variable DOOMWADDIR defines the path where the wad files are located. This way you can easily share your wad files between different programs. If it is not defined a default wad directory will be checked for existing, and then an alternate directory. If none exist, then by default, Legacy looks for wad files in the current directory.
- The variable USER, containing your username, is used as the default value for your player name in multiplayer games.
- Your home directory is defined by the variable HOME. In the home directory Doom Legacy will create a legacy directory to store your config and savegame files. If this variable is not defined, a default legacy home directory will be checked for existing. If none exist, then by default the current directory will be used for home.

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

- SDL

  In the SDL version of Legacy the SDL library handles sound. If it is installed correctly then Legacy will have sound effects.

  The latest SDL version is 1.2.14, and it fixes some earlier Win32 issues.

  Music requires SDL_mixer version 1.2.7 or later. Earlier SDL_mixer versions do not have a working RWOPS interface. Legacy can play music using files instead, but this requires recompiling Legacy, allowing the compile to detect the SDL_mixer version.

  SDL_mixer is a separate download and installation, and the latest is version 1.2.11.

- WINDOWS

  In the Windows native version the sound is autodetected using DirectX so make sure your card works well with DirectX and then legacy will use it.

  Additionally, Legacy could utilize hardware 3D sound for making more realistic sound environment.

  Specify -ds3d command line parameter to use generic 3D sound driver (DirectSound 3D). This driver are suitable for most 3D sound chips.

  FMOD is an alternative sound library. To use FMOD, it must be compiled with the FMOD library and FMOD configuration selected. FMOD support was incompletely developed, so compilation has not been sucessfull. FMOD compilation is disabled by default.

- DOS

  The sound and music card is auto-detected at the game startup.

  If you don't get any sound in Legacy, check that the BLASTER variable is set. Type 'set' at the dos prompt (or dosbox under Windows) : do you see a line like 'BLASTER=A220 I5 D1 ...' ? If not, run the installation of your soundcard for Dos mode, it will usually modify your autoexec.bat so that the BLASTER variable will be set. See the FAQ.TXT for more.

  If the BLASTER variable is set, but you still don't hear any sounds, or the sounds are not right, then edit the SOUND.CFG file, and manually set your type of soundcard, see there for more.

### 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:

- Gamma: Only has a gamma slider
- Gamma_black: Gamma control and black level control.
- Gamma_bright_black: Gamma control, bright control, and black level control.
- Linear: Has bright and black level controls, as two set-points of piecewise linear brightness correction. It is included for use with LCD displays.

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

## BASIC GAMEPLAY

### 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

idcd##
  Similar to the 'idcmus##', but for CD Audio tracks. Example: 'idcd02' starts cd track 2.
idfly
  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.

## CONSOLE

See here for more about the console.

## NETWORK GAMES (MULTIPLAYER)

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:

- Players can join in while a game is in progress. No need to restart the game to add a new player.
- Up to 32 players in a game.
- The speed now depends on the server. If the server loses frames, all the other players will experience the slow down. Thus, make sure that the server has a good internet connection and runs smooth for example by using a lower resolution graphics mode.
- The server can kick any player out of the game. The player will be returned to the title screen.
- Consistency failure now only kicks out the player who was not 'up-to-date', not the others.
- Critical game variables are sent to all the players when they are changed on the server, and only the server can change them. Examples are 'allowjump', 'respawnitemtime', 'deathmatch', ...

### 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 with one of the following server commands. One player can play on the server itself. 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

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

$ doomlegacy -connect <ip address of server>

Connects to a specific server computer using their ip address.

$ doomlegacy -connect

This will auto-detect a server on a LAN. This only works when computers are directly connected. If you play through internet, the server can NOT be auto-detected, and you must specify it's IP address.

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

- FRAGS: the usual frags rankings
- BUCHHOLZ: a chess scoring system. You earn more points when you frag a good player (one that has a lot of frags at the end of the game). This is more balanced that the original frags system, because you can't get a good score simply by slaughtering clueless newbies.

  If player i has fragged player j F[i][j] times, the total frags of player i are given by T[i] = sum_j F[i][j]. The Buchholz score of player i is sum_j F[i][j] * T[j].

- INDIVIDUAL: the players are all compared 1 to 1, when a player wins he earns 3 points, if they draw they each get 1 point. Then all the points are added and the winner is the one with the most points. This was suggested by Cristian Romero (romero-c@usa.net). Is is not perfect, but is already interesting enough: think of it more 'individual'. You have to make more frags compared to each other player to earn points. So you will want to go after players that you can make more frags, and forget about the ones which have already too much frags compared to you. Go for the victories, more than the frags.
- DEATHS: this ranking shows the players who have died the most!

## LAUNCHER

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.

- HOME: Set your home directory location, where your config files and savegames are kept. This will be submitted by the launcher using the "-home" switch.
  Example: "myhome", which will be submitted as "-home myhome".
- DOOMWADDIR: A directory to search for legacy.wad, IWAD, and PWAD files.
- CONFIG: The config file to use. This will be submitted by the launcher using the "-config" switch.
  Example: "myconfig", which will be submitted as "-config myconfig".
- SWITCH: Any of the switches allowed on the command line, specified in the same format. This line will be simply copied to the command line by the launcher.
  Example: "-opengl -nomusic -file map01.wad -deh fix2.deh".
- IWAD: A specific IWAD specified in place of the game IWAD. This will be submitted by the launcher using the "-iwad" switch.
  Example: "myiwad", which will be submitted as "-iwad myiwad".
- GAME: The possible games, selected using the left and right arrow keys. This will be submitted by the launcher using the "-game" switch.
  Example: "doom2", which will be submitted as "-game doom2".
- CONTINUE: Restart Doom Legacy with the new command line switches and selections.
- QUIT: Quit Doom Legacy entirely.

## COMMANDLINE OPTIONS

Here are the command-line options Legacy recognizes:

option | description
--- | ---
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-name | mode | file name
--- | --- | ---
doom1 | Doom shareware | doom1.wad, doom.wad
doom | Doom1 | doom.wad
doomu | Ultimate Doom | doomu.wad, doom_se.wad, doom.wad
doom2 | Doom2 | doom2.wad
plutonia | Doom2 | plutonia.wad
tnt | Doom2 | tnt.wad
freedu | Ultimate Doom | freedoom1.wad, freedu.wad, doomu.wad
freedoom | Doom2 | freedoom2.wad, freedoom.wad, doom2.wad
freedm | Doom2 | freedm.wad, doom.wad
heretic1 | Heretic shareware | heretic1.wad, heretic.wad
heretic | Heretic | heretic.wad
blasphem | Heretic | BLASPHEM.WAD, blasphem.wad, heretic.wad
chex1 | Chexquest | chex1.wad, chex.wad
doommode | Doom1 | doom1.wad, doom.wad
ultimode | Ultimate Doom | doomu.wad, doom.wad
heremode | Heretic | heretic.wad
The following are valid game-names, but the mode is not supported yet.
hexen1 | Hexen shareware | hexen1.wad, hexen.wad
hexen | Hexen | hexen.wad
hexemode | Hexen | hexen.wad
strife | Strife | strife.wad
strife0 | Strife 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.
-3dfx -glide | 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.
Networking
-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
-deathmatch -altdeath | 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.
-teamplay -teamskin | 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.
-nodraw | 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.
+connect +map | 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
Information
--help | Help menu giving help sections.
-h <section> | Display one of the Help sections:
section | content
--- | ---
g | Help on game and wads
m | Help on multiplayer
c | Help on config
s | Help on server
d | Help on demo
D | Help 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.

## NOTES

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