ZDOOM v1.22
December 12, 1999

A port of id Software's original Linux Doom source code to Win32 and Linux
with additional enhancements by Randy Heit (rheit@iastate.edu).

ZDoom's homepage is at: http://zdoom.notgod.com/


Contents

  1. Introduction
1-1. Significant differences between ZDoom and regular Doom
1-2. Installing ZDoom

  2. Command line arguments
2-1. Configuration options
2-2. Play options
2-3. Loading options
2-4. Debug options
2-5. Multiplayer options
2-6. Other options

  3. Configuring ZDoom
3-1. The Player Setup menu
3-2. The new Options menu
3-3. The Configure Controls menu
3-4. The Gameplay Options menu
3-5. The Display Options menu
3-6. The Messages menu
3-7. The Video Modes menu
3-8. Changing settings not found in a menu

  4. The Console
4-1. Activating the console
4-2. Using the console

  5. Key bindings

  6. Playing a network game
6-1. Playing a network game with the DOS version
6-2. Playing a network game the nice way
6-3. Playing a network game the old way
6-4. Configuring ICQ to launch an Internet game
6-5. Playing with a modem/serial/parallel cable connection

  7. Known bugs

  8. Acknowledgments


1. Introduction
===============

ZDoom is an enhanced port of the official DOOM source code. Originally for
Win32 (Windows 95/98/NT), it is now available for Linux as well.

ZDoom may be used and distributed free of charge. It must not be sold for
profit. These are terms set forth by the Doom Source Code license, the
MIDAS Digital Audio System license, and the Prometheus Truecolor license.


1-1. Significant differences between ZDoom and regular Doom
-----------------------------------------------------------

- Will work under Windows NT with sound.
- Free look (look up/down).
- High resoulutions.
- Translucency.
- A console.
- MOD and MIDI support.
- Better mouse support.
- Limited TCP/IP (actually UDP) networking.
- Quake-style key bindings.
- Jumping.
- Crosshairs.
- Walk over/under other things.
- Hexen-style map editing.
- Almost full BOOM support.


1-2. Installing ZDoom
---------------------

To use ZDoom, unzip both zdoom.exe and zdoom.wad into your existing Doom 
directory. (You must already have an existing copy of Doom to use this
program.) If nothing else, you need to download the shareware Doom, which
is available in several places on the Internet. To truly take advantage of
ZDoom, though you need the full game. The Depths of Doom Trilogy can be had
fairly cheaply and includes Ultimate Doom, Doom II, and The Master Levels
for Doom II.

ZDOOM REQUIRES an IWAD from a 1.9 version of Doom. If you have a lesser
version, you can find patches to upgrade your version at
ftp.idsoftware.com.

ZDoom on Windows systems also requires Microsoft's DirectX 3 or later. If
you are using Windows 95, you can download the latest version from Microsoft's
website at http://www.microsoft.com/directx. Windows NT 4.0 users can get it
as part of Service Packs 3 and 4 (which are available at
http://www.microsoft.com/NTServer/all/downloads.asp).

ZDoom for Linux requires Hermes. You can get it from http://hermes.terminal.at


2. Command line parameters
==========================

ZDoom supports many command line parameters. They are described below:

2-1. Configuration options
--------------------------

-bits <numbits>
    Specifies the display depth. Currently, only 8 is supported.

-width <x>
-height <y>
    Specifies the desired resolution of the screen. If only one of -width
    or -height is specified, ZDoom will try to guess the other one based on
    a standard aspect ratio. If the specified resolution is not supported
    by your DirectDraw drivers, ZDoom will try various resolutions until it
    either finds one that works or gives up. To determine which resolutions
    ZDoom can use, use the vid_describemodes command from the console once
    you have started the game.

-cdrom
    Causes ZDoom to look for savegames and zdoom.cfg in a directory called
    C:\ZDOOMDAT. Screenshots will also be saved in this directory.

-config <configfile>
    Causes ZDoom to use an alternative configuration file. If configfile
    doesn't exist, it will be created.

-heapsize <x>
    This is the size in megabytes of the zone memory manager’s heap. If set
    too low, problems will almost certainly arise. 6 megabytes is probably
    a reasonable minimum to use for this parameter, although ZDoom won’t
    stop you from using something smaller like 0.5 megabytes (which will
    almost certainly give you a Z_Malloc error if you try it). Values too
	high will also cause problems, because the game will use the system
	heap to obtain memory too. If the zone heap is too large, it will have
	to use virtual memory, and everything will be slower. By default, the
    heap size is 8 megabytes.

-iwad <iwadfile[.wad]>
    The IWAD file specified after this parameter will be used as the game
    IWAD file instead of the default one. Normally, ZDoom looks for IWADs
    in the following order and uses the first one it finds:

        doom2f.wad
        doom2.wad
        plutonia.wad
        tnt.wad
        doom.wad
        doom1.wad

	ZDoom will look for the IWAD in the current directory, in the same
	directory as zdoom.exe, in the directory set in the DOOMWADDIR
	environment variable, and in the directory set in the HOME environment
	variable.

-m (DOS only)
	Displays the MIDAS configuration screen when the game starts so you
	can pick your soundcard if it isn't detected properly. Sorry, but there
	isn't any way to save this configuration.

-noflathack
	Some wads were able to use new flats with the original Doom.exe. ZDoom
	will normally try and detect them. Use this switch to prevent that.

-noidle (Win32 only)
    When the user presses Alt-Tab to switch from ZDoom to another window,
    ZDoom will normally reduce its priority class so that it doesn't slow
    the rest of the system down. By specifying this parameter, ZDoom will
    try to run at full speed even when it isn't the active window.

-nommx
    Causes ZDoom not to use any MMX code. Normally, ZDoom should be able to
    figure out on its own whether the processor supports MMX or not and
    will act accordingly. Currently, MMX isn't actually used, so this switch
	doesn't do anything.

-nomusic
    Prevents the playback of music.

-noptc (Win32 only)
	This forces ZDoom to use DirectDraw directly instead of using PTC as
	an abstraction layer on top of it. Setting the cvar vid_noptc to 1
	has the same effect as this command line option, and is also
	remembered so that you don't need to type it in each type you run
	the game. Unless you have problems with video, it is recommended that
	you let ZDoom use PTC.

-nosfx
    Prevents the playback of sound effects. Because of the nature of MOD
    music, this also disables playback of MODs.

-nosound
    Disables both music and sound effects.

-notrans
    Disables translucency.

-primarysound (Win32 only)
    If DirectSound is available, this parameter will cause ZDoom to try to
    use the primary buffer for mixing. This can potentially lower sound
    latency but also introduces the possibilty for more sound problems.

-wavonly (Win32 only)
    Forces ZDoom to use the standard Windows wave device for sound output
    instead of DirectSound. If you experience problems with sound, it may
    be worthwhile trying this parameter, although it will generally
    introduce a large amount of latency, causing sounds to be heard later
    than expected.

-transfile <transfile[.tch]>
    Causes ZDoom to use an alternative translucency cache file. This file
    is automatically generated if it doesn't already exist and is used to
    speed up startup by eliminating the need to recalculate the
    translucency tables every time the game is started. By default, ZDoom
    will look for a file called transtab.tch in the same directory that it
    resides in. If the .tch extension is omitted, it will automatically be
    added.

2-2. Play options
-----------------

-avg
    Stands for "Austin Virtual Gaming." Automatically advances to the next
    level after 20 minutes. This is equivalent to +set timelimit 20 or
	-timer 20.

-fast
    Sets the dmflags cvar to make the monsters as fast as in nightmare mode
    even if you aren't playing nightmare.

-nomonsters
    Sets the dmflags cvar so that monsters are not spawned on levels.

-respawn
    Sets the dmflags cvar so that monsters respawn even if you aren't
    playing at nightmare difficulty.

-timer <x>
    Causes ZDoom to automatically advance to the next level after x
    minutes. This is equivalent to +set timelimit <x>.

-turbo <x>
    Causes player movement to be x% as fast as normal. Valid values are
    10-256, with 100 being normal. Values larger than 100 are considered
    cheating. This is equivalent to +set turbo <x>.

2-3. Loading options
--------------------

-deh <dehfile[.deh]>
    Causes ZDoom to apply a DeHackEd or .bex patch to the game. This must be
    a text patch; binary patches are not supported. (As far as I know, most
    patches are text patches so this shouldn’t be too much of a problem.)
    Also, only patch format 6 is known to be supported. Other formats may
    or may not work properly. If the .deh extension is omitted, ZDoom will
    automatically add it. If this is a .bex patch, however, the extension
    does need to be included.

-bex <bexfile[.bex]>
	This is the same as -deh, except the default file extension is .bex.

-file <file1[.wad]> [file2[.wad] [file3[.wad] ...
    Used to load one or more PWAD files which generally contain user-
    created levels. Files listed further right take precedence to files
    listed before them, so as an example, if both file1.wad and file2.wad
    contain have a MAP01, the MAP01 in file2.wad would be used instead of
    the one in file1.wad If the .wad extension is omitted, ZDoom will
    automatically add it.

-loadgame <x>
    Automatically loads savegame x, where x is 0-7 corresponding to one of
    the savegame slots.

-maxdemo <x>
    Specifies the initial size of the recording buffer used with the -record
    parameter. This buffer will grow as needed, but you might want to use
    this parameter to avoid any potential pauses when the buffer grows. The
    default size of 128k is large enough for about 10 minutes of a
    deathmatch, although the actual amount of space used by a demo depends
    on what happens in the demo (due to the rudimentary delta compression
    ZDoom applies to demos): If you did nothing but stand still, this should
    be large enough for about 5.5 days.

-playdemo <demofile[.lmp]>
    ZDoom will automatically play the specified demo when it starts. If the
	.lmp extension is omitted, it will automatically be added.

-record <demofile[.lmp]>
    Records a demo. The -warp parameter or +map command should also be used
    if you don't want to record the demo on MAP01 or E1M1. To stop the demo
    recording, use the "stop" console command. If the .lmp extension is
    omitted, it will automatically be added. Unlike regular DOOM, only one
    person in a multiplayer game needs to specify the -record parameter if
    they want to record a demo. However, if someone quits before the person
    recording the demo does, the person recording will automatically quit,
    too, because I didn't bother to give demos a way to record when a player
    leaves the game.

-skill <x>
    Sets the initial skill level. This is overridden if you start a new
    game from the New Game menu.

-timedemo <demofile[.lmp]>
    Plays back a demo faster than -playdemo and displays a framerate when
    the demo is over. If the .lmp extension is omitted, it will
    automatically be added.

-warp <m>
-warp <e> <m>
    For Doom II, starts the game on map m. For other versions of doom,
    starts the game on episode e, map m. The +map command can also be used
    to perform this action, but it expects the actual name of the map.
    (i.e. MAP01, E1M1, ...)

2-4. Debug options
------------------

-noblit
    Causes ZDoom not to update the display on the screen, but it stills
    draws everything to an internal buffer. Only useful with -timedemo.

-nodraw
    Causes ZDoom not to draw anything at all. Only useful with -timedemo.

-debugfile
    Causes ZDoom to write network debugging information to a file called
    debugN.txt where N is your player number.

-devparm
    Prints a message telling you that you can take screenshots with the
    Print Screen key. With the original Doom, using -devparm was the only
    way to take screenshots. With ZDoom, screenshot is just another command.

+set developer 1
    Prints a bunch of debugging messages to the console.

2-5. Multiplayer options
------------------------

-altdeath
    Informs ZDoom that you will be playing a deathmatch game and sets the
    dmflags cvar so that items other than invulnerability and invisibilty
    respawn after being picked up. Only player 1 needs to specify this.

-deathmatch
    Informs ZDoom that you will be playing a deathmatch game and sets the
    dmflags cvar so that weapons stay behind when a player picks them up.
    Only player 1 needs to specify this.

-dup <x>
    Causes ZDoom to transmit fewer player movement commands across the
    network. Valid values range from 1-9. For example, -dup 2 would cause
    ZDoom to send half as many movements as normal.

-extratic
    Causes ZDoom to send a backup copy of every movement command across the
    network.

-host <x>
    This machine will function as a host for a multiplayer game with <x>
    players (including this machine). It will wait for other machines to
    connect using the -join parameter and then start the game when
    everyone is connected. See section 6 for more details.

-join <host>
    Connect to a host for a multiplayer game. See section 6 for more
    details.

-net <console> [hosts] ...
    Informs ZDoom that you will be playing a network game. See section 6
    about network games below for more details.

-port <x>
    Specifies an alternate IP port for this machine during a network game.
    By default, the port 5029 is used.

2-6. Other options
------------------

In addition to the above parameters, console commands can be included on
the command line by preceding them with a '+'. Some, however, will cause
the game to crash if you use them (such as cheats). If you wish to
change a cvar in this manner, it is a good idea to use the set command. This
is because any set commands will be executed just after the config file is
loaded, and all other commands are executed after every game subsystem has
been initialized. For example, to turn on developer messages when you start
ZDoom, use the command line:

    zdoom +set developer 1

instead of

    zdoom +developer 1

If you use the second line, you'll miss out on all the developer messages
that get generated during the startup process.

For a complete list of console commands and cvars, refer to the
commands.txt file. If you want to get the most from ZDoom, I highly
recommend at least glancing at it.


3. Configuring ZDoom
====================

Zdoom now includes a new options menu which can be used to set some of the
game's new options. A new control configuration menu is also included that
can be used to easily assign some commands to different keys without a
separate setup program.

3-1. The Player Setup menu
--------------------------

This menu is found on the main menu and is used to select your player's
name, team, suit color, gender, skin, and autoaim setting.

Your player's name will be displayed on the scoreboard in deathmatch games
and in the obituaries that are printed when you die. In teamplay games, your
team name is used to identify which team you are on and also appears in the
deathmatch scoreboard.

The suit color is controlled with three sliders; one for each of red,
green, and blue color components. Because the Doom palette only has 256
colors, not all possible combinations will look good. The current color
is displayed on an animated player character to the right of the sliders.

Your player's gender can be male, female, or cyborg. However, unless you
have a soundpack or a skin with non-male sounds, your player will still
sound like the male DOOM marine. Some obituaries (such as "Zathras checks
his glasses") will adjust themselves to fit the gender you select.

You also have the option of looking like something other than the DOOM
marine by picking a skin. ZDoom doesn't come with any, but it is compatible
with skins developed for Doom Legacy. You can find skins to download from
their site at http://frag.com/doomlegacy/dl_skins.htm. To automatically
load skins at game startup, create a skins directory (in the same directory
as zdoom.exe), and place your skins in it. You can also load skins from
the command line with -file.

The autoaim settings controls how close your vertical aim should be from a
monster before ZDoom will adjust your aim to shoot it. By default, this
value is set to always which means that it behaves just like the original
Doom. Never indicates that ZDoom will never adjust your aim for you, and
you will shoot where you aim. There are also intermediate values which
adjust how much leeway you can have in your aim.

3-2. The Options menu
----------------------

ZDoom's Options menu is different from the options menu in the original
Doom and contains the following items:

Customize Controls
    Displays the customize controls menu.

Go to console
    Opens the console.

Gameplay Options
    Displays the gameplay options menu.

Display Options
    Displays the display options menu.

Set video mode
    Displays the video modes menu.

Mouse speed
    Adjusts how sensitive ZDoom is to mouse movements.

MIDI Music Volume
    Adjusts the volume of MIDI and MUS music. This is the type of music
    found in the levels that come with DOOM and does not affect the volume
    of MOD music.

MOD Music volume
    Adjusts the volume of MOD music. Setting this to a high setting will
    usually result in nasty-sounding aliasing. Note that this only effects
    the volume of MOD music and not MUS or MIDI music.

Sound volume
    Adjusts the volume of sound effects.

Always Run
    When on, you will always run whether or not you are holding down the
    +speed key. By default, you can also change this setting by pressing
    the caps lock key while playing a game.

Always Mouselook
    When on, moving the mouse up and down will always cause you to look up
    and down instead of only when the +mouselook key is pressed.

Invert Mouse
    When on, mouselooking is reversed so that pushing the mouse forward
    causes you to look down, and pulling the mouse back causes you to look
    up.

Lookspring
    When on, releasing the +mouselook key will automatically center your
    view.

Lookstrafe
    When on, moving the mouse left and right will always cause the player
    to move in the corresponding direction.

Reset to defaults
    Select this item to set all options to their default values.

Reset to last saved
    Select this item to set all options to the values contained in the
    configuration file.

3-3. The Configure Controls menu
--------------------------------

This menu is found on the options menu and lists several controls and up to
two keys assigned to that control. There may be more than two keys assigned
to a control, but only two of them will be shown at a time. If there are no
keys assigned to the given control, this will be indicated with ???.

To change the keys assigned to a control, use the up and down arrow keys to
select the control you wish to change. To assign a new key to the control,
press Enter and then the key you want to activate this control. If you
decide you don’t want to assign a new key to the control, press Escape. To
remove all keys for the selected control, press Backspace instead of Enter.

This menu only lists a select few commands, but they are the ones that are
most likely to be used during gameplay. To assign other commands to keys,
you can use the bind command from the console.

3-4. The Gameplay Options menu
------------------------------

This menu is found in the options menu and controls several options
related to game play and map directly to different dmflags values. The
dmflags value corresponding to the current settings can be found at the
bottom of the menu. Many of these settings apply only to deathmatch games
and are indicated by a (DM) after their names. During a multiplayer game,
only player 1 can change these settings. Currently, there are 18 dmflags
that can be set from this menu:

Falling damage
    When set to yes, falling long distances will cause players damage.

Weapons stay (DM)
    When set to yes, weapons won't disappear when they're picked up. This
    is the default when started with -deathmatch.

Allow powerups (DM)
    When set to yes, powerups (such as light amplification goggles) will
    be spawned on levels.

Allow health (DM)
    When set to yes, any items that give you health (such as stimpacks)
    will be spawned on levels.

Allow armor (DM)
    When set to yes, armor will be spawned on levels.

Spawn farthest (DM)
    When set to yes, dead players will respawn as far as possible from
    other players.

Same map (DM)
    When set to yes, exiting a level will restart the current one instead
    of advancing to another.

Force respawn (DM)
    When set to yes, dead players will respawn immediately.

Allow exit (DM)
    When set to no, anyone who tries to leave the level will be instantly
    killed.

Infinite ammo
    When set to yes, weapons do not deplete their ammo.

No monsters
    When set to yes, monsters will not be spawned on levels.

Monsters respawn
    When set to yes, monsters respawn (just like nightmare difficulty).

Powerups respawn
    When set to yes, powerups other than invulnerability and invisibility
    will respawn. This is the default for -altdeath.

Fast monsters
    When set to yes, monsters will be faster than normal (just like
    nightmare difficulty).

Allow jump
    When set to yes, players can jump.

Allow freelook
    When set to yes, players can look up and down.

Friendly fire
    When set to yes, players on the same team can hurt each other. If you
    kill a teammate, you also lose a frag. If this is set to no, players on
    the same team will still be able to push each other around with their
    weapons, but they won't be able to hurt each other. This flag only has
    an effect when teamplay is on. Otherwise, all players can always hurt
    each other.

The final option on this menu, "Teamplay," is not a dmflag. When it is on,
the deathmatch scoreboard will also show the name's of players' teams, and
the game will also use the setting of the friendly fire dmflag.

Some of the DM-only flags (such as item respawning) can also be enabled
for singe player and co-op can be enabled by opening the console and setting
the alwaysapplydmflags cvar to 1.

3-5. The Display Options menu
-----------------------------

This menu is found in the options menu and controls various aspects of the
display. Options currently available are:

Messages
    Displays the messages menu.

Screen size
    Controls the size of the screen used to draw the players view. Larger
    sizes require more processing power to draw but also look better.

Brightness
    Controls how bright the display is.

Crosshair
    Selects one of eight crosshairs or no crosshair at all. Some of these
    crosshairs are probably of dubious value but are available anyway.

Column render mode
    Selects a column renderer. Original is the one used by DOOM. And
    optimized is a new one that can as much as double the framerate on
    modern processors. If you're using a 486, you should definitely
    be using the original renderer, because the optimized one will cut
    your framerate by at least half.

Detail mode
    Controls vertical and horizontal pixel doubling. This is similar to the
    low detail mode of the original Doom which would double the size of
    pixels horizontally except that it can also do the same vertically.
    Doubling horizontally will almost always result in a speedup
    significantly larger than doubling them vertically.

Stretch short skies
    When turned on, short sky textures (such as the ones included with
    Doom) are stretched vertically so that they don't wrap when you look up
    or down.

Stretch status bar
    When turned on, the status bar will always be as wide as the screen.

Screen wipe style
    Selects the style of screen wipe to use between levels. "None" means to
    just switch directly to the new screen. "Melt" is the style used by
    Doom. "Burn" makes the old screen burn into the new one. "Crossfade"
    fades out the old screen while fading the new one in at the same time.

DirectDraw palette hack (Win32 only)
    If you have trouble with the palette, your video card probably has buggy
    drivers. Turn this on, and ZDoom will reset the palette every frame
    and not just when it changes.

Use fuzz effect
    Controls whether the fuzz effect will be used for partially invisible
    things. If turned off, then translucency will be used instead.

Rocket trails
    Controls whether rockets leave a trail of particles behind them.

Blood type
    Determines the way blood is draw: as sprites only, particles only,
    or both.

Bullet puff type
    Determines the way bullet puffs are drawn: either as sprites or as
    particles.

Rotate automap
    When turned on, the automap will rotate to keep the area that you are
    facing toward the top of the map.

Overlay automap
    When turned on, the automap will first be overlayed on top of the
    player view before being drawn fullscreen.

Standard map colors
    When turned on, ZDoom will use the automap colors from the original
    Doom instead of the colors specified with the am_*color cvars.

3-6. The Messages Menu
----------------------

This menu lets you adjust how messages are displayed on the screen.
Possible items you can select from this menu are:

Scale text in high res
    When turned on, message text is enlarged on higher resolutions so that
    it takes up about as much space as it would on a 320x200 screen.

Minimum message level
    This is the minimum message level (see below) that will be shown.

The remaining items control the colors used to display messages each level
of message:

Item pickup
    Messages that appear when you pick up an item.

Obituaries
    Messages that appear when a player dies.

Critical messages
    Anything that doesn't fit into one of the other categories.

Chat messages
    Messages from another player.

Team messages
    Messages from a teammate who is only speaking to his team.

Centered messages
    Messages in the middle of the screen

3-7. The Video Modes menu
-------------------------

The video modes menu can be used to select the current display mode and
switch between windowed mode and full screen. This menu can be found as a
selection inside the Options menu.

3-8. Changing settings not found in a menu
------------------------------------------

There are many settings (cvars) that aren't listed in any menu. To change
these you need to use the console (see section 4). For a complete list of
these, refer to the commands.txt file.


4. The Console
==============

ZDoom has a console very similar to Quake's. Almost all game settings and
controls can be accessed from it. For a complete list of console commands
and cvars, see the commands.txt file.

4-1. Activating the console
---------------------------

There are two ways to activate the console: From the Options menu, and with
the toggleconsole command. The console can always be activated by selecting
"Go to console" from the Options menu. While playing a game, pressing a key
bound to the toggleconsole command can also activate the console. By
default, this is the ` key, but it can be changed to any key with the bind
command.


4-2. Using the console
----------------------

Using the console is fairly simple. Just type in commands and press Enter
to execute them. To scroll around in the console’s text buffer, you can use
the Page Up and Page Down keys. Pressing Shift-Page Up scrolls to the top
of the buffer, while pressing Shift-Page Down scrolls to the bottom.
Without pressing Shift, these keys will scroll one line at a time in the
corresponding direction.

A handy feature of the console that was added in 1.13 is tab-completion. To
use it, begin typing a command, and then press tab repeatedy to cycle
through all the commands that begin with whatever you typed.

To deactivate the console, you can press either ` or Escape. This will also
erase any text you might have been typing on the command line.


5. Key bindings
===============

ZDoom supports Quake-style controls as opposed to those of the original 
Doom. To bind a command to a key, use the bind command followed by the key
to bind and the command(s) to bind to it. Multiple commands should be
separated by semicolons (;) and if there are any spaces in the commands,
they need to all be enclosed in quotation marks (").

For example, to make the Page Up key cause the player to look up, use the 
command:

bind pgup +lookup

From now on, pressing Page Up will cause you to look up. Since this is also
an action command (it begins with a '+'), releasing Page Up will also
execute the -lookup command, which will cause you to stop looking up.

You can also refer to keys by scancodes instead of names. For instance,

bind #3 "echo I don't like my pistol."

and

bind 2 "echo I don't like my pistol."

will both do the same thing, because 3 is the scancode for the "2" key.

If you use key names, the keys are assumed to be arranged in a Qwerty
layout. This may be somewhat confusing because the console uses the layout
selected in the Keyboard control panel (which might not be Qwerty), but I
decided to do it this way for consistancy. Thus, if you wanted to assign the
key directly to the right of the tab key to a command, you would use
"bind q <command>" even if that key isn't labeled Q on your keyboard.

All key bindings are automatically saved in the config.cfg file when the
game quits.

The following special keys as well as the alphanumeric keys are named and
can be bound. These are the same keys displayed in the Configure Controls
menu:

backspace
tab
enter
ctrl
shift
kp*             * on the numeric keypad
alt             Either the left or right Alt key
space
capslock
numlock
scroll          Scroll Lock
kp7             7 on the numeric keypad
kp8             8 on the numeric keypad
kp9             9 on the numeric keypad
kp-             - on the numeric keypad
kp4             4 on the numeric keypad
kp5             5 on the numeric keypad
kp6             6 on the numeric keypad
kp+             + on the numeric keypad
kp1             1 on the numeric keypad
kp2             2 on the numeric keypad
kp3             3 on the numeric keypad
kp0             0 on the numeric keypad
kp.             . on the numeric keypad
kana
convert
noconvert
yen
kp=             = on some numeric keypads
circumflex
kanji
stop
ax
unlabeled
kp,             , on some numeric keypads
kp/             / on the numeric keypad
sysrq
home
uparrow
pgup
leftarrow
rightarrow
end
downarrow
pgdn
ins
del
lwin            The left Windows key
rwin            The right Windows key
apps            The application menu key
pause           The pause key
mouse1          The left mouse button
mouse2          The right mouse button
mouse3          The middle mouse button
mouse4          The fourth mouse button if yours has one
joy1 - joy32    All 32 joystick buttons supported by Windows
mwheelup        The mouse wheel was rolled up
mwheeldown      The mouse wheel was rolled down

Note that i_remapkeypad must be "0" for kp0, kp., kp1, kp2, kp3, kp4, kp6,
kp7, kp8, and kp9 to be treated as distinct keys.


6. Playing a network game
=========================

Due to changes ZDoom has made to the message format of network games, you
will definitely not be able to play a network game between ZDoom and
another version of Doom. Since ZDoom uses the UDP protocol for networking,
it is possible to play a game on the Internet as well as a LAN. If you want
to try it, a good frontend to try is ZM (http://www.doomworld.com/zm).

6-1. Playing a network game with the DOS version
------------------------------------------------

The information in the following sections about network games does *not*
apply to the DOS version of ZDoom. While networking with the DOS version is
untested, it should work just like the original DOOM: through sersetup
or ipxsetup. If you want to try it, rename zdoomdos.exe to whatever sersetup
or ipxsetup expects (it varies depending on which game they came with). BE
SURE TO RENAME THE ORIGINAL DOOM.EXE, DOOM2.EXE, HERETIC.EXE, OR HEXEN.EXE
TO SOMETHING ELSE BEFORE YOU DO THIS. Then launch a game using DM or some
similar program. Please note that due to the size of the network packets
used during game startup, you may experience access violations with the DOS
version.

6-2. Playing a network game the nice way
----------------------------------------

As of version 1.19, starting network games has been vastly simplified. The
old method is retained for compatibility (see the next section), but you
are encouraged to use this new method. Not only is the new method easier,
but it should work with IP masquerading, providing that only the machines
connect to the host use IP masquerading. What follows are Jeffrey Cuenco's
instructions for using them:

The syntax for these command-line parameters are as follows:

To start (host) a game you simply type:

    zdoom -host <x> 

where x is the number of players that are going to be in the game
(including yourself).

To join a game you simply type:

    zdoom -join <host ip> 

where host ip is the ip address of the "host" computer.

These functions simplify the netgame process by having one computer, the
"host," accept connection requests from other computers running ZDoom.
The host then sends back a response packet to the client, which contains
the client's console number. When the total number of hosts connected to
the host + the host itself equals the number of players specified in
"-host," then the host sends a packet to all the clients connected to the
host, containing the ip addresses of all the other computers connected to
the host excluding the ip of the host itself and your ip (which you already
have). When each client receives this "all here" packet, then it stores
each address under a different index in the array that holds all the
addresses of the client computers you're playing against. After each
client successfully receives the "all here" packet and has already sent
ACKs (acknowledgement packets) to the host, then the host sends a "Go"
packet to all clients stating that it's ok to start the netgame. What
follows this is the normal activity that you've already seen after you
execute "-net ..."

6-3. Playing a network game the old way
---------------------------------------

To begin a network game, start ZDoom with the "-net" command-line
parameter. This is *different* from the DOS version of Doom (but the same
as the Linux version). The -net parameter takes the form:

    -net <console> [machine1] [machine2] ...

<console> is the player number that your machine is playing as (1 to 8)
and is followed by the addresses of the other machines in the network game.
These addresses can be either IP addresses like 192.168.0.1 or hostnames
like some.machine.com. To specify an alternate port to connect to on the
other machines, append a colon to the address and follow it with the port
number you wish to use (i.e. some.machine.com:26000).

The number of players in a netgame is determined by the number of machines
after <console> in the -net parameter. For a two-player game, you would
only list one other machine. For a four-player game, you would list three.

Each player must choose a different console number. One person *must* be
console 1, and there can be no gaps between console numbers. For instance,
in a two-player game it's okay for one player to be console 1 and the other
to be console 2, but it's not okay if one player is console 1 and the other
is console 4.

An example for a two-player game:

    One machine named joe runs:         zdoom -net 1 bob -deathmatch
    The other machine named bob runs:   zdoom -net 2 joe -deathmatch

It's also possible to start a network game on your own machine if you run
ZDoom in a window with the -nomusic and -noidle parameters:

    Start the first copy of zdoom:
        zdoom -net 1 localhost:26000 -port 26001 -noidle -nomusic

    Then start the second copy:
        zdoom -net 2 localhost:26001 -port 26000 -noidle -nomusic

This works much nicer under Windows NT than it does under 95/98.

6-4. Configuring ICQ to launch an Internet game
-----------------------------------------------

I don't personally recommend using ZDoom on the Internet (and have never
tried it), but if you want to give it a try, it's just like setting it up
for a LAN game. You might also want to try specifying the -extratic and
-dup 2 parameters to help compensate for the latency the Internet
introduces. Doomworld's Linguica has also provided instructions for setting
up ICQ to launch a game of ZDoom:

    With a little tweaking I was able to successfully configure the nearly
    ubiquitous program ICQ to launch ZDoom games with literally the click of
    a button. Here's how: Go into the "Preferences" menu in ICQ and then
    "Internet Phone/Games/Chat." Then click on "New External." You'll be
    given a box with three empty lines to fill in. In the first line, type
    in the title of the application, i.e. "ZDoom." In the second line, type
    in the path to your zdoom.exe -- "C:\DOOM2\zdoom.exe" or whatever. In
    the third line, type in the following: "-net 2 %i -extratic -dup 2
    -deathmatch -nomonsters -skill 5 -warp 01 -nomusic" which will configure
    ZDoom to DM on Map01 with the optimum TCP/IP deathmatch settings. Then
    click on the "Client/Server Application" button. This will bring up two
    additional lines to fill in. In the fourth line, type the same thing as
    in line 2: "C:\DOOM2\zdoom.exe" or whatever. In the fifth line, type
    "-net 1 %i -extratic -dup 2 -deathmatch -nomonsters -skill 5 -warp 01
    -nomusic" which once again configures ZDoom for optimum Internet play.
    It's exactly the same as line 3 except it has "-net 1" instead of
    "-net 2." Once all this is typed in, press OK. Then, if you want to DM a
    friend who has similarly enabled his ICQ, simply click on their name,
    click on "Internet Phone/Games," and then on "ZDoom." And away you go!

6-5. Playing with a modem/serial/parallel cable connection
----------------------------------------------------------

ZDoom only supports UDP games. However, using Microsoft's Dial-Up Networking
(included with Windows 95/98/NT), it should be possible to also play a game
on two computers connected with modems or null-modem serial or parallel
cables. My only network connection is my Ethernet card, so I haven't
actually tried this, but I can't see any reason why it shouldn't work.

If you're running Windows 95, go download Dial-Up Networking 1.3 from
http://www.microsoft.com/windows95/downloads/contents/wurecommended/s_wunetworking/dun13win95/default.asp
and install it.

If you're running Windows 98, open the "Add/Remove Programs" control panel
and click the Windows Setup tab. Choose "Communications" from the components
list and click "Details..." If there isn't a check by "Dial-Up Networking"
and "Dial-Up Server," check them and click OK. Click OK again to close the
control panel.

Now go visit http://www.geocities.com/TimesSquare/Fortress/4004/guide.html
and start reading the section entitled "Configuring the Dial-Up-Server." Once
you have everything set up, start a game using the instructions for starting
a LAN game above.

If you want to use two computers connected directly using a parallel or
serial cable, you also have to use Microsoft's Direct Cable Connection.


7. Known Bugs
=============

* When played in a window on Windows NT, the mouse can sometimes go crazy.
  You can get around this by pausing and unpausing the game several times
  or Alt-Tabbing out of ZDoom and back into it. Alternatively, you can also
  set the in_mouse cvar to "2" to force ZDoom to use DirectInput to read
  the mouse, but this may make the mouse very jerky while using the keyboard
  at the same time.
* Some machines were incapable of running version 1.13 and died inside of
  I_StartGraphics. I have been unable to reproduce this on my machine and
  could find nothing wrong with the code, so my best guess is that it's a
  driver problem (if it still happens).
* I've had reports that ZDoom will rearrange the icons on the desktop after
  quitting the game in fullscreen. I have not had this happen to me, but it
  appears to be a DirectDraw problem.

If you find another bug with ZDoom, first try and duplicate it. If you
can't duplicate it, it's probably either a problem with your system or 
omething that I won't be able to fix unless I stumble on it. (I actually
did find an obscure bug this way!) If you can duplicate the problem, run
the game in a window, and send me the contents of the dialog box that pops
up when it dies. If you have Drwatson (found in the \windows\system
directory of Windows 95B and 98), also run that beforehand and send me a
copy of the log file it generates (provided that it's not too large). Also
describe what you were doing when the problem occured and list any PWADs or
DeHackEd patches you were using at the time.


8. Acknowledgments
==================
(in no particular order)

id Software /  These are the people who developed Doom and later released
John           the source code for the Linux port. Without them, there
Carmack        would be no ZDoom. I have also used some of the functions
               from their Quake2 game DLL source.

Bernd          Packaged up id's Linux code for the initial source release.
Kreimeier

Raven          Portions of Heretic and Hexen were used in ZDoom.
Software

Chi Hoang      Responsible in one way or another for BOOM. It provided a
Team TNT       significant codebase for ZDoom. Information about BOOM can
               be found at the Team TNT website:
               http://www.teamtnt.com/boompubl/ixboom.htm

Lee Killough   For all his brilliant work on both BOOM and later MBF.
               Portions of MBF were used in ZDoom, primarily to fix BOOM
               bugs.

Yoghurt        Creator of the Cajun Bot. http://www.doomworld.com/doombot/

Sebastien      Created qmus2mid which I used to determine the structure of
Bacquet        DOOM's MUS lumps so that the game would have music.

Andy Bay       Original input code is from his (discontinued) ATB Doom port.

Peterri        Original sound code and some assembly is from his
Kangaslampi    (discontineud) NTDOOM port. He was also the person primarily
               responsible for writing the MIDAS Digital Audio System
               1.1.2, which is used for all sound effects and MOD music.
               It is copyright 1996,1997 Housemarque Inc. It can be found
               at http://www.s2.org/midas/.

Glenn "Gaffer" Developed the Prometheus Truecolor library. OpenPTC was used
Fiedler        for the latest version of ZDoom, and older versions of PTC
               were used for older versions of ZDoom. Its homepage is at
               http://www.gaffer.org/ptc/.

Markus         Wrote the miniLZO library, which ZDoom uses for data
F.X.J.         compression. Its webpage is at
Oberhummer     http://wildsau.idv.uni-linz.ac.at/mfx/lzo.html

Greg Lewis     Released his DeHackEd source, without which adding
               DeHackEd support would have been much harder.

