# Doom Legacy 1.44 Console Reference

# Last updated 2011-03-10

## Contents

1. Console basics
   1. Console usage
   2. Console input
   3. Commands and variables
   4. Configuration files
   5. Autoexec.cfg
   6. Script files
2. Console commands and variables
   1. Basic commands
   2. Console setup
   3. Player setup
   4. Player controls
   5. Game options
   6. Game commands
   7. Net options
   8. Video options
   9. Sound options

Make sure you read this! You will discover a lot of goodies available in Legacy! Be a Doom power user!
Skip to section 2 and browse through the list of commands if you're in a hurry!

## Console basics

### Console usage

With Doom Legacy's console, you will be able to change a lot of game parameters from within the game, and customise it to your preferences. The console is simply a command prompt, where you can enter commands and change the values of game variables. Since the first game console we know of was from id Software's game Quake, we have been inspired by it and have tried to implement the same functionality for the benefit of Quake/Doom fans.

To open the console, press the console key. It is usually located just below ESC. You can set the console key at the Setup Controls menu. To exit the console, either press again the console key, or press ESC, which will bring up the menu, and shut the console.

The console displays all messages from the game. You can go back in the messages with key PAGE UP, and go down with the key PAGE DOWN. Press the key HOME to jump to the oldest message in the console text buffer, and key END to jump to the last output message (the most recent).

The last lines of the console text buffer are displayed at the top of the screen, when the console is off. That is, you can see 5 lines of messages instead of only 1 in the original Doom. You can change the duration of display of the messages with the console variable con_hudtime, see the commands section for more.

### Console input

While the console is on, it accepts typed-in commands. BACKSPACE erases the last input character, and ENTER executes the command. For convenience, you have a history of the last 32 commands entered. Press UP ARROW to go back in the commands history, DOWN ARROW to go forward.

Another very useful key is TAB: it completes a partially entered command or variable name. This is a very good way to see the existing commands: just enter any letter, then press TAB several times to see what commands are available.

The variables to customize the console itself usually start with "con_", thus typing "con" and pressing the TAB key several times will display the following console variables: con_height, con_speed, con_hudtime, con_backpic...

You can also press SHIFT-TAB, which will complete the command line, but in reverse order.

### Commands and variables

Basically, a command does not have a value, and is not saved to the configuration file. It may take zero or more parameters. A variable always has an associated value, for example the variable name holds your name as a player.

Entering a command without any parameters will usually tell you the command syntax.

> map Usage: map <number|name> [<entrypoint>]: warp players to a map.

Entering a variable name alone will tell you the current value of the variable.

> name "name" is "flynn"

To set the value of a variable, give the new value after the variable name. For example, to change your name to "dj fab", type

> name "dj fab" flynn renamed to dj fab

There are four types of variables/command parameters: strings, integers, floats (actually 16.16 fixed point numbers) and booleans.

String values containing spaces or certain other special characters must be quoted using double quotes, as we saw in the previous example. Inside a quoted string you can use the following C-style backslash escape sequences:

Escape sequence | Resulting character
--- | ---
\\ | literal backslash
\" | double quote (does not end the string!)
\t | tab
\n | newline

Example:

> echo "this string contains \"escaped\" special chars such as \\,\n\ttab and newline" this string contains "escaped" special chars such as \, tab and newline

Boolean variables (true/false, yes/no) use 0 to denote false. Any nonzero value means true.

### Configuration files

Most variables are automatically saved to the default configuration file config.cfg. Like in the original Doom, the -config parameter will set explicitly the configuration file to use. Thus, you can have default settings for different persons, using different configuration files. While the configuration files support any commands, and are executed like a script, you should not edit them, because they are always overwritten when the game exits.

### Autoexec.cfg

The autoexec.cfg file is a text 'script' file which, if found, is automatically executed at the game startup. You can edit autoexec.cfg to set the values of those variables that are not automatically saved to config.cfg. You can also add commands that will be executed one after another, just like a script.

Comments start with //. Each line of the autoexec.cfg file is like a line that you would have typed at the console. Here are some examples:

This sample 'autoexec.cfg' will warp you to map01 as soon as the game is loaded:

// always start with map01, without waiting at the menu
map map01
echo "welcome to map 01" //useless comment

Another example, here we set the variables that are not saved to the config.cfg, because they are not considered standard parameters:

// set my preferred weird game mode
bloodtime 5 // blood lasts 5 seconds
fastmonsters 1
teamdamage 1
echo "bigjim's weird mode active"

In the last example, each time you start the game, it will set the variables like bloodtime that are not normally saved to config.cfg. Just look at config.cfg to find out which variables are saved.

### Script files

config.cfg and autoexec.cfg are script files. It means they contain commands and variables that are executed in sequence. You can create any number of script files, and execute them from the console using the exec command.

For example, to start a script named blood.cfg just enter

> exec blood.cfg

## Console commands and variables

This chapter describes all console commands and variables in Doom Legacy. Many console variables can also be modified through the menu. You will need to use the console only if you want to customise the game more to your needs.

### Basic commands

Here are the basic commands for script execution. They have the same usage and functionality as in Quake. You can use a semicolon to separate several commands in the same line.

command | definition
--- | ---
alias <aliasname> <command> | Define an alias. When you type <aliasname>, it will be like if you had entered <command>. Let's have an example: > alias silence "soundvolume 0; musicvolume 0" When you will type "silence", it will execute the corresponding command. In this example, we have given two commands as one, inside " ", and using the semicolon as a separator for commands.
echo <text> | Just echoes (prints) the text to console.
exec <filename> | Execute a script file. A script file is just a text file containing a sequence of commands or variables. Script files usually have a .cfg extension. Example: > exec autoexec.cfg will execute all the commands in autoexec.cfg
help [<variable>] | Shows a list of all the console commands and variables. If given a variable name, shows detailed info on that variable.
toggle <variable> [<value>] | Without the <value> parameter this toggles a variable, i.e. changes it to the next possible value. With the <value> parameter it adds <value> to the variable. This command is very useful for use with bind. Example: bind ">" "toggle gr_fogdensity" bind "<" "toggle gr_fogdensity -1" so you can modify fogdensity without going into the console or menu!
wait [<ticks>] | Wait a given amount of time before the next command is executed. The unit is 1/35 seconds. Example: this will wait 5 seconds, then display "ok!". wait 175; echo "ok!"
bind <keyname> <command> | Bind commands to a key. Each time you press the key, the commands will be executed. Example: > bind s screenshot Now each time you press the s key the game will save a screenshot.
cls | Clear the console text buffer.

### Console setup

These variables control the look and feel of the console.

variable | type | definition
--- | --- | ---
con_backpic | bool | 0: use a translucent LCD-like console background. 1: use an opaque console background picture, like in Quake.
con_height | int | How many percent of the total screen height the console will use. E.g. con_height 50 (the default) will use half the screen height for the console.
con_speed | int | The speed (in pixels/tic) at which the console comes down or moves out of the screen when you press the console toggle key.
con_hudtime | int | The number of seconds messages stay on the top of the screen. They are 5 message lines that scroll as soon as new messages arrive. E.g. con_hudtime 5, which is the default, will make the messages stay for 5 seconds before disappearing. Set this to 0, and you will never see any messages outside the console (HUD means heads-up display).
showmessages <0-2> | int | 0: never show any messages on the screen. 1: always show the messages (default). There is one more setting, 2, that can only be entered at the console, it will show all messages except most of the "picked up ..." style messages. Useful if you are tired of the "picked up ammo", "picked up health bonus" etc. messages.

### Player setup

These variables control your player avatar's appearance and your game preferences. The splitscreenplayer has similar variables, but with the number 2 appended to the variable name, e.g. "color2 red" turns the splitscreenplayer's avatar red.

variable | type | definition
--- | --- | ---
splitscreen | bool | Enable/disable the splitscreen. If necessary, this spawns a secondary local player, called the splitscreenplayer.
name | string | Enter your name as a player, for network games. Your name will be seen when you send a message (chat key), and is displayed in the deathmatch rankings. Use "" if the name contains spaces, e.g. name "dj fabbe"
color <0-10> | int | Choose your avatar's color.
skin | string | Change your skin, provided some skins are loaded (use the commandline option -file to add skins wads. The default marine skin name is "marine".
autoaim | bool | The original Doom used autoaiming in the vertical direction, and a small aim adjustment in the horizontal. Now that you can freely aim up and down with the freelook, you can play like a pro and set autoaim off. NETWORK NOTE: in a multiplayer game, the server can force the autoaim off for all players with the command allowautoaim.
originalweaponswitch | bool | Choose whether to use the original weapon change method (1), or the new preferred weapons order (0), see weaponpref for more. With the original weapon switch, whenever you pick up a new weapon it becomes the active one, even if it is not as powerful as the one you are currently using. That can be sometimes very annoying, especially in fast deathmatches.

weaponpref

string

The preferred weapons order.
This works only if you have set originalweaponswitch to 0.

You give a priority to each of the weapons, with a number digit from 0 to 9. Several weapons can have the same priority. When you pick up a weapon that you don't already have, you will switch to that weapon IF AND ONLY IF that weapon's priority is greater that the one you are carrying. If you already had the weapon, you will pickup the ammo as usual, without changing weapon. The command is given a string of priority values, one for each weapon, in the following order:

Fist, Chainsaw, Pistol, Shotgun, Super Shotgun, Chaingun, Rocket Launcher, Plasma Rifle, BFG.

Thus 'weaponpref "021485763"' means that the super shotgun has the highest priority (8), while the fist is lowest priority (0). After the super shotgun, in decreasing priority you have the rocket launcher (7), plasma gun (6), chaingun (5), shotgun (4), BFG (3), chainsaw (2) and pistol (1).

Let's have another interesting example: 'weaponpref "333333333"'

Since all weapons have the same priority in this last example, you will NEVER change weapon automatically, because no weapon has a priority higher than any other one. You might consider this the manual weapon change.

crosshair <0-3> | int | Choose whether to use a crosshair. The options are no crosshair (0), white cross (1), green angle (2), and red point (3).

### Player controls

These variables control the way the game handles the players' input. The splitscreenplayer has similar variables, but with the number 2 appended to the variable name.

variable | type | definition
--- | --- | ---
autorun | bool | Set this to 1 to invert the run key. You will always be running, EXCEPT when you push the run key.
automlook | bool | You can use the "freelook" (ability to look up and down) in two modes: permanent or temporary. Setting this variable to 1 will make the freelook permanent. When automlook is 0, you will need to hold the freelook key down while moving the mouse up and down. When releasing the key, the view will always re-center. This is useful if you keep firing rockets at your feet.
use_mouse | bool | Setting use_mouse to 0 will disable the mouse. The next time you start the game, the mouse won't be detected. Set use_mouse to 1 to search for a mouse, and activate it.
invertmouse | bool | Set invertmouse to 1 to invert the mouse y (up and down) axis. This is for freelook only, you will look up, when moving the mouse down (backward), and look down when moving mouse forward.
mousemove | bool | Enable/disable mouse y-axis for forward/backward movement.
mousesensx mousesensy | int | Sets the mouse sensitivity in the x and y directions.

These input variables are common to both local players.

variable | type | definition
--- | --- | ---
controlperkey <1|2> | int | When set to 2 (several) you can bind more than one control to a key. Otherwise binding a control to a key will remove the key's other assignations.
mouse2port <1|2|3|4> | int | Choose the port number of the secondary mouse for the splitscreenplayer between COM1 to COM4.

The game controls can be defined using the setcontrol command.

command | definition
--- | ---

setcontrol <control> <key1> [<key2>]

Binds a key/joystick button/mouse button to a game control (forward, fire, use etc.). The second keyname is optional. You can set it, and have two keys attached to one game control, e.g. have both UP ARROW and MOUSE2 mean forward.

If a key does not have a useful name, it uses a name of the form 'KEYxxx' where xxx is the key code. To learn the names of the keys, look for them at the Setup Controls menu.

The controls are forward, backward, strafe, straferight, strafeleft, speed, turnleft, turnright, fire, use, lookup, lookdown, centerview, mouseaiming, weapon1, weapon2, ..., weapon8, talkkey, scores, jump, console.

Example:
> setcontrol forward "keypad 8" "up arrow"

setcontrol2 <control> <key1> [<key2>] | Same as setcontrol but for splitscreenplayer.
bindjoyaxis [<joynum> <axisnum> [<playernum> <control> <scale>]] | Lists, releases or creates joystick axis bindings.

### Game options

Using these variables you can change may aspects of the game itself. For obvious reasons, in a netgame only the server can change them.

variable | type | definition
--- | --- | ---
deathmatch <0|1|2|3> | int | Set the game type 0: coop 1: dm, placed weapons respawn immediately 2: dm, items respawn 3: dm, items respawn, placed weapons respawn immediately

teamplay <0|1|2>

int

You can change the deathmatch mode while in a multiplayer game.
0: no teams, usual free-for-all deathmatch.
1: teamplay, use color to identify teams (players of the same color will be in the same team), the team names will be like "red team" or "yellow team".
2: teamskin, using skins to identify teams (players who use the same skin will be in the same team), the team names will show as "leprechaun team" or "terminator team", according to the name of the skin.

teamdamage | bool | Decide whether members of the same team can hurt one another or not. Real players always have teamdamage on.
hiddenplayers | bool | Are the other players visible in the automap? Also determines if you can switch to their POV using the spy mode. Usually enabled in deathmatch.
fraglimit | int | When the limit is reached, the level exited and game goes to intermission. Use 0 to disable.
timelimit | int | After the given number of minutes, the level is exited and game goes to intermission. Use 0 to disable.
gravity | float | Sets the acceleration of gravity in the game. The default gravity is 1.
nomonsters | bool | Set to 1 if you want no monsters to spoil your gaming experience. Often used in deathmatch.
fastmonsters | bool | Choose if monster are "fast" like with the original -fastparm
solidcorpse | bool | Setting solidcorpse to 1 makes the dead corpses (monsters/marines) solid. The corpses thus stack one on top of another, and you walk over them. Sometimes you can even reach ledges where you couldn't get before by climbing on corpses!
allowjump | bool | Choose whether jump is allowed or not. Those of you who come from the planet NoJump or have a limited sensory system and couldn't survive a jump in the 3rd axis of our world can disable the jump in single player too. NOTE: Jumping is considered cheating in maps not designed with it in mind, especially in speedrunning.
allowrocketjump | bool | Enable/disable emulation of the Quake1 bug known as "Rocket Jump".
allowautoaim | bool | Enable/disable autoaiming for all players... make sure everyone is ok before getting your friends angry.
allowfreelook | bool | Enable/disable looking up and down for all players in the game.
respawnitem | bool | Choose whether items respawn or not. respawnitem 0 is like the old deathmatch. deathmatch 2 automatically sets it to 1. NOTE: it is considered cheating to allow respawning of items when in single player mode ! :)
respawnitemtime | int | Set the respawn item time in seconds. The time between the moment you pick up the item, and the moment it reappears. The default is 30 seconds, from the original Doom.
respawnmonsters | bool | Choose if monsters can respawn. respawnmonsters 1 is like the -respawn command-line option of the original Doom.
respawnmonsterstime | int | Choose the time of respawn for the monsters, in seconds. The default is 12, from the original Doom.

monsterfriction

string

Select the mode of monster friction.

- None: Monsters ignore friction, as in vanilla Doom and Heretic.
- MBF: Monster friction from MBF, where ice gave momentum to monsters. Has momentum effects on transition between ice and other sectors.
- Momentum: Monsters have momentum all the time. Friction is tuned to match the player friction.

Default is Momentum.

playdemospeed | int | Number of frames to skip for each frame rendered when playing back demos. Default is 0.

voodoo_mode

string

Sets the voodoo doll behavior. A voodoo doll is an accident of the original doom code that occurs when a wad has extra player starts. The voodoo dolls that are spawned at the extra starts look like players, but do not move on their own. When they get shot or damaged, a player gets damaged too. Many wads use voodoo dolls for automated actions because they can trip linedefs.

- Vanilla: No enhancements. Allows zombies and walking dead players.
- Multispawn: The target of damage is determined by the wad spawn type.
- Target: DoomLegacy will attempt to determine the player that triggered the voodoo doll, and will put the damage on them. There are still many ways the wrong player can get hurt (which is wad related), some as simple as one player tripping the death-trap, right before another pushes the switch to turn it off (if timed right, the player at the switch dies instead).
- Auto: If the wad has multiple player voodoo spawning, then it switches to Multispawn, otherwise it will be Target.

Default is Auto.

instadeath

string

Used to mitigate the effects of voodoo doll teleport frag. For coop and deathmatch play, a setting other than Die is suggested.
The telefrag kills the player instantly, thus the name "instadeath". Used in unusual wad traps to kill the player, like when they touch something dangerous. Vanilla voodoo doll behavior has the voodoo doll instadeath always killing the same player, and it does not matter who walked into the death-trap. In most wads the victim is always player1.

- Die: Telefrag death of player.
- Damage: Player takes 20 damage, stunned, and gets thrown back.
- Zap: Player takes 5 damage, stunned longer, and gets thrown back.

Default is Die.

### Game commands

Here we describe the commands that can be used during the game.

command | definition
--- | ---
addfile <wadfile.wad> | Add a WAD file to the list of resource files used. Like the -file commandline option, but works in runtime.
map <mapname[.wad]> [-skill <1-5>] [-monsters <0|1>] [-noresetplayers] | Warps all the players to a new map.
restartlevel | Restart the current map.
exitlevel | Exit current map and go to the intermission screen.
pause | Pauses/unpauses the game (or requests a pause from the server).
save <slot_number> <description> | Save the game in the given slot, with chosen description.
load <slot_number> | Loads a previously saved game.
exitgame | Closes the current game, goes back to the intro loop.
quit | Quits the game without further confirmation.
saveconfig <filename> | Save the current config in the specified file. This is always done when you exit Legacy.
loadconfig <filename> | Load a config file like at the begining of legacy. For the pro: this is a simple exec command with ".cfg" default.
changeconfig <filename> | Do a 'savegame currentconfigfilename', then a 'loadconfig filename'.
screenshot | Take a screenshot (like the key F1 in devparm mode).
kill me | <playername | playernum> | Kills players. Everyone can suicide, only the server can kill others.
playdemo <demoname[.lmp]> | Start demo playback. The demos are either lumps in a WAD or external files. If the demo name ends with .lmp, read it from an external file of that name.
stopdemo | Stop the currently playing demo.
timedemo <demoname[.lmp]> | Time a demo.
turbo <boost> | Set the player movement speed to boost/100 times the original value. Boost needs to lie between 10 and 255.
noclip | Enables/disables clipping for the console player. Like the cheat code idclip.
god | God mode. Just like the cheat iddqd.
gimme health | ammo | weapons | armor | keys | map | almostanything... | The cheat à la carte.

cd on | off | remap | reset | open | info | play <track> | loop <track> | stop | pause | resume

Play audio CDs. Most of the subcommand should be self-explanatory.

reset: Check for a new cd, read the track info. Use after changing the CD.
info: List the tracks on the CD. The track being played is printed in white.
remap: Remap CD tracks. Normally, the game plays the track xx in the map MAPxx, and ExMy corresponds to track number 9*x+y. This command is useful to adapt your favorite cd music to Doom's levels, let's have an example:
cd remap 5 3 1 4 2
At map 1, the game will play track 5 etc. The same track number can be also be repeated.

Network/multiplayer commands

command | definition
--- | ---
connect <server_ip | server_address> | any | self | Connects to a server to play a netgame. "connect any" starts searching for servers and connects to the first one it finds.
disconnect | Disconnects from the server.
kick <playername | playernum> | One of the rare pleasures of being the server: Kick somebody out of your game!
addbot | Adds a bot (AI player) to the game. You can remove bots from the game using kick.
say <message> | Sends a message to all players.
sayto <playername|playernum> <message> | Sends a message to a specified player.
sayteam <message> | Sends a message to your own team.
chatmacro <0-9> <message> | This very useful command allows to change the chat messages at any time during the game. They are saved in the configfile too! You can now quickly setup some circumstance messages at the start of a game. Press the chat key, then ALT plus a number key from 0 to 9 to send one of the chat messages. Well, just like it has always been in Doom.

Informative and debugging commands.

command | definition
--- | ---
version | Shows the game version and build date.
gameinfo | Prints information about the current game.
mapinfo | Prints information about the current map.
playerinfo | Prints information about the players.
meminfo | Show the amount of heap, virtual and physical memory available. The heap is the memory allocated for the game, and you can change it using the -mb command line parameter.
frags | Shows the frags table, like in the original Doom intermission. It shows the frags count for each player, against each other player.
teamfrags | Shows the frags table for teams.
fs_dumpscript <scriptnum> | Prints the given FS script on the console.
fs_runscript <scriptnum> | Runs the given FS script.
fs_running | Lists all the currently running FS scripts.

### Net options

variable | type | definition
--- | --- | ---
sv_name | string | This is the name of your server. It is displayed on clients' screens when they are searching for servers.
sv_public | bool | If true, your server will announce itself to the master server so that it will be visible also outside the local network.
sv_allownewplayers | bool | Allows or disallows the joining of new players to the game.
sv_maxplayers | int | Maximum allowed number of players in the game. Default is 32 so don't worry about it.
masterserver | string | The masterserver address used during server search and when registering your server.
netstat | bool | Print network statistics on the HUD?

### Video options

These variables control many visual aspects of the game.

variable | type | definition
--- | --- | ---
fullscreen | bool | Choose between fullscreen and windowed mode.
scr_depth <8|16|24|32> | int | Screen color depth in bits.
scr_width | int | Screen width in pixels.
scr_height | int | Screen height in pixels.
gamma <0-4> | int | The original gamma level control (brightness). The GAMMA_FUNCS compile option replaces it with other controls.

gammafunc <gamma | gamma_black | gamma_bright_black | linear >

int

Select the gamma curve function for controlling display brightness.
Gamma is the brightness encoding curve for CRT displays.
Gamma_black adds a black level control.
Gamma_bright_black has black level and brightness controls.
Linear is linear segment approximation, useful for some LCD displays.
The function selected enables appropriate control sliders.
Requires GAMMA_FUNCS compile option.

gamma <-12 - 12 > | int | Fine gamma control for all gamma functions (slider index, not the actual GAMMA value). Default is 0, which is no-correction (GAMMA=1.0). Original gamma settings are at (0, -3, -6, -9, -12). See Gamma table in User Reference Manual. Requires GAMMA_FUNCS compile option.
black <-12 - 12 > | int | Fine black level control for Gamma_black and Gamma_bright_black functions. Adjusts the black end of the curve to get even blacks and grays in dark rooms. Normal is 0. Requires GAMMA_FUNCS compile option.
bright <-12 - 12 > | int | Fine brightness control for Gamma_bright_black function. Adjusts the bright end of the curve to get evenness in bright lit rooms. Normal is 0. Requires GAMMA_FUNCS compile option.
viewsize <3-11> | int | Choose the size of the game viewport. '3' is the smallest view window. '10' is the full viewsize with the status bar. '11' is the full viewsize without the status bar.
viewheight <16-56> | int | Set the height of the viewpoint (the height of the eyes above the floor). The normal value for the Doom marine is 41. We have limited the range into acceptable values, to prevent cheating.
chasecam | bool | Enable/disable the chasecam.
cam_height | float | Sets the chasecam height.
cam_dist | float | Sets the distance between the chasecam and the player.
cam_speed | float | Sets the speed of the chasecam.
bloodtime | int | Choose how many seconds blood will stay on the floor. In the original Doom the blood stayed no more than 1 second. This can be fun for deathmatches, setting 'bloodtime' to '60', for example, will make the blood drops stay 1 minute on the floor before disappearing. Useful for tracking down your prey :)
translucency | bool | Enable/disable translucent sprites.
screenlink <0|1|2> | int | Change the screen link between 0: none, 1: normal melting, and 2: crossfade (it was in the original code, we just enabled it).
playersprites | bool | Choose whether to draw the player weapon sprites. Don't laugh! Sometimes I like to play with playersprites off.
splats | bool | Enable/disable bloodsplats and bullet holes on walls.
scalestatusbar | bool | Should the status bar graphics be scaled?
hud_overlay | string | Choose what information to show in the HUD when in full screen mode. Each letter represent a piece of information that will be shown. f: show frags (only in deathmatch) h: show health m: show armor a: show current weapon ammo k: show keys e: show monsters kill s: show secret found count
framerate | bool | When true, the game shows the current framerate (frames/s) in the game window.
fuzzymode | bool |

These options only apply in the OpenGL mode.

variable | type | definition
--- | --- | ---
gr_coronas | bool | Enable/disable coronas around light sources.
gr_coronasize | float | Sets the corona size. In reality coronas are caused by the dispersion of light in the eye. You can adjust the size to get a more realistic effect or just to see bigger coronas :).
gr_dynamiclighting | bool | Dynamic lighting renders on walls and planes a diffuse reflection of nearby light sources, such as missiles or BFG balls. Be aware it can be slow on low end PC. See also gr_mblighting.
gr_mblighting | bool | Same as dynamic lighting, except it shows the light emitted by missiles thrown by monsters.
gr_fog | bool | Enable/disable the fog, default is on.
gr_fogcolor | string | Change the RGB (in hexadecimal format, "rrggbb") color of the fog. The default is 000000 (black, looks like the original Doom fog). For a grey fog, set the value to 707070 (for example).
gr_fogdensity | float | Change the fog density. The default value is 500. I suggest you to try different values to see the changes.

gr_fov

float

Field of view, in degrees. If you set a value above 90 and gr_mlook (see below) is "Off", then Legacy will automatically set gr_mlook to "On". This is because FOV, with a value higher than 90 degrees, needs this mode to work properly. You can use it for zooming:

Mandeep/FlynnT tips for zooming (see other commands/variables) alias psprites_on "playersprites 1" alias psprites_off "playersprites 0" alias zoom_in "set_zoom_out; psprites_off; gr_fov 80; wait 1; gr_fov 71; wait 1; gr_fov 62; wait 1; gr_fov 54; wait 1; gr_fov 46; wait 1; gr_fov 39; wait 1; gr_fov 32; wait 1; gr_fov 26; wait 1; gr_fov 20; wait 1; gr_fov 15; wait 1; gr_fov 10" alias set_zoom_out "bind n zoom_out" alias zoom_out "set_zoom_in; gr_fov 15; wait 1; gr_fov 20; wait 1; gr_fov 26; wait 1; gr_fov 32; wait 1; gr_fov 39; wait 1; gr_fov 46; wait 1; gr_fov 54; wait 1; gr_fov 62; wait 1; gr_fov 71; wait 1; gr_fov 80; psprites_on; wait 1; gr_fov 90" alias set_zoom_in "bind n zoom_in" bind n zoom_in

I suggest you to put this in the autoexec.cfg file. It allows you to use the n key for zooming in and out.

gr_gammared | gr_gammagreen | gr_gammablue | int | Set the intensities of red, green and blue on the scale 0-255. You can use them to make Legacy uniformly brighter or darker if you set all these variables to the same smaller or higher value.

gr_mlook

int

gr_mlook command is there for fixing the "mlook" bug (when you look up and down). The default value is 1. The "Off" (0) should only use if you don't use full mlook. The "On" (1) is fast and fix most of the mlook bug, but walls behind you can be hidden if you look at nearly 90° (up or down). It shouldn't be a big issue for most of you and it's the recommended mode for low end pc. The "Full" (2) is exactly the same as "On" but it fix all the bugs and is a little slower for angle > 45 degree. The gr_mlook command has been "optimized" recently. That's why, when you're aiming at an angle of 0, it acts like if gr_mlook was Off, even if gr_mlook is set to On or Full, and thus it's faster. There is something similar with angle less than 45: if you use gr_mlook Full, it act like gr_mlook On.

gr_staticlighting | bool | This is an experimental variable for now since it's not yet optimized. I don't recommend you to use it, except if you have the cream of the cream PC. It's ok for some maps, though.

### Sound options

Variables controlling sound and music.

variable | type | definition
--- | --- | ---
soundvolume <0-31> | int | Sound effects volume.
musicvolume <0-31> | int | Well.
cd_volume <0-31> | int | CD music volume.
snd_channels | int | Number of sound channels used. Usually you will choose a value from 8 to 16, which is enough.
stereoreverse | bool | Reverse the roles of the left and right stereo channels?
surround | bool | Use a software "surround" effect?
precachesound | bool | Should all sounds be loaded at the map startup, or only when they're needed?