The TCP/IP Internet DOOMer's FAQ by Scott Coleman (asre@uiuc.edu) and Jay Cotton (jay@calc.vet.uga.edu) updated 10/16/94 Introduction id Software's DOOM is truly the Killer App of the MS-DOS world. DOOM's popularity is so immense, it has been estimated that DOOM is installed on more PCs than OS/2 and Windows NT combined, and DOOM's creators commute to work in Ferarris. Interest in the game has been so great that it has been hacked, reverse-engineered, dissected, and enhanced more than any other game in PC history. And now, as more and more people become hooked into the Internet, DOOM is rapidly becoming the Killer App of the Internet, as well. Internet DOOM play is currently at the "clever hack" stage. DOOM, as released by iD, supports only IPX network play and serial play between two machines. As a result, the DOOM documentation doesn't include any information about DOOMing across the Internet. Of course, this also means that DOOMers can't call id for help. The result of all this is many curious people asking the same question: How do I play DOOM over the Internet? Enter this document. In the pages that follow, we will attempt to answer the most frequently asked questions about Internet DOOM, including what you need, how to set it up, and how to find new fragbait - er, I mean, opponents. DOOM across the Internet is made possible by a neat little freeware program called iDOOM. iDOOM uses the UDP protocol (part of the TCP/IP protocol suite) to send DOOM game information between multiple machines on the Internet. It is based on the WATTCP TCP/IP kernel written by Eric Engelke of the University of Waterloo. By some strange coincidence, the authors of this document are also the creators of iDOOM, and we have used the program to play Internet DOOM sessions with opponents from as far away as Estonia. In writing this FAQ, we hope that sharing some of our experience will make it easier for you to get connected in your own Internet DOOM sessions. NOTE: Throughout this document, we will refer specifically to games of DOOM played over the Internet via a DIRECT CONNECTION, i.e. no modems are involved anywhere in the link. Note that IHHD, SLIP and PPP connections all involve modems at some point. Although other methods of connecting two DOOM machines together across the Internet exist, this document will focus on direct net connections using the iDOOM network driver program. Getting Prepared Q1: I want to play DOOM over the Internet using iDOOM. What hardware do I need? To successfully play DOOM across the Internet, you will need the following hardware: * A machine capable of playing DOOM (D'OHH!) * A network interface card (NIC). And not just any old NIC, mind you - your NIC must be supported by a packet driver if you wish to use it to play Internet DOOM. Usually this means that your NIC must be an ethernet card, although iDOOM has been successfully played over token ring. This document assumes that your PC is already equipped with a suitable NIC, although it may currently be in use for some other non-TCP/IP function (such as a node on a Novell network). * A direct connection to the Internet. If there is a modem somewhere in the link between your PC and your opponent's PC, this FAQ is not for you. Although it is possible to play Internet DOOM over a modem link (either by dialing up to a UNIX machine and using IHHD or via SLIP/PPP), such connection methods are beyond the scope of this document. Q2: OK, I've got all the hardware. What software do I need? In addition to the hardware requirements, some software is also required to round out your the package. Before you can play, you'll need to pick up the following: * DOOM 1.2 or higher (1.7 is STRONGLY recommended, since this version seems to have solved some problems related to network games). DOOM versions 1.1 and below are incapable of using iDOOM. * A packet driver written specifically for your ethernet card. The Packet Driver is what lets iDOOM (and therefore DOOM) "talk" to your NIC. * iDOOM.EXE, the Internet driver for DOOM. * The WATTCP Applications. These are not absolutely necessary, but can definitely be useful for debugging and testing your setup. Q3: Hold on - I don't have some of this software! Where can I get it? * To obtain iDOOM: Log on to ftp.vet.uga.edu via anonymous ftp. Change to directory /pub/doom. Download the file IDOOM11.ZIP. Version 1.1 is the latest version of iDOOM as of this writing. * Many ethernet cards come with the appropriate packet drivers on a utilities diskette packaged with the card. If your card does not come with a packet driver, there is an excellent collection of freely available packet drivers called the Crynwr (nee Clarkson) Packet Driver collection. You can obtain it via anonymous ftp from oak.oakland.edu. Change to the /pub/msdos/pktdrvr subdirectory and download PKTD11.ZIP and PKTD11C.ZIP. The files PKTD11A.ZIP and PKTD11B.ZIP contain source code and example programs for the packet drivers - you won't need these in order to play iDOOM. * To obtain the WATTCP applications, ftp to dorm.rutgers.edu, change to the /pub/msdos/wattcp/ subdirectory, and download file APPS.ZIP. Q4: OK, I've got everything, now what do I do to set it up? Setting your computer up for TCP/IP access is very straightforward. As an illustration, I'll be taking you through the steps necessary to set up a PC with an SMC ethernet card and the IP address 128.192.23.5. You'll of course need to substitute your own specific information in place of the examples given here. All set? OK, let's get started. Step 0: START WITH A CLEAN BOOT!!!!! Set up your CONFIG.SYS and AUTOEXEC.BAT files to load as few drivers as possible. This includes such things as memory managers (HIMEM, EMM386, QEMM, etc.) and network drivers (e.g. LSL, IPXODI). DOOM doesn't need the former, and the latter will probably conflict with the packet driver. We recommend that you prepare a boot floppy with a CONFIG.SYS containing only a FILES=20 line, and an AUTOEXEC.BAT containing only the line "prompt=$p$g". Step 1: Set up the packet driver. Determine your ethernet card's IRQ setting, it's base I/O port setting, and it's memory address setting (if any). You should be able to determine this by looking at the card itself and consulting the user manual. You'll need some if not all of this information, depending upon which packet driver you use and/or type of hardware you have (for example, some IBM computers with the MicroChannel bus can determine the settings on the card automatically without you having to supply them on the packet driver command line). Unzip the appropriate driver from Crynwr Packet Driver collection archive. In our example case, the packet driver is called SMC_WD.COM. By looking at the jumpers on the card and consulting the manual, I determined that the card has been set to IRQ 7, Base I/O port address 300h, and the base memory address is at segment d800h. For this example, I have chosen to use interrupt 60h for the packet driver. Packet drivers typically operate on an interrupt in the range of 60h to 80h inclusive; since nothing else in my sample system happens to be using the first available interrupt (INT 60h), I chose that. Thus, to load my packet driver, I use the command line SMC_WD 0x60 0x7 0x300 0xd800 where 0x60 is the packet driver interrupt, 0x7 is the IRQ setting on the card, 0x300 is the I/O port base address, and 0xd800 is the memory base address (NOTE: all numbers are in C-style HEX notation). Don't worry if you don't understand what all this stuff means - as long as you use the correct numbers, your packet driver should work. NOTE: If your PC is currently part of a Novell network (e.g. Netware, Netware Lite, Personal Netware) the parameters you need can be found in a file called NET.CFG, usually located in your \NOVELL, \NWLITE or \NWCLIENT subdirectories (along with all the other drivers needed by Novell). At the very minimum, the packet driver should give a sign on message and report the ethernet address of your NIC when you load it. Chances are that if your NIC has been functioning properly for other tasks (e.g. as a node on a Novell network) then you'll have no problems here. If not, or if there are any error or warning messages, something is wrong. One possibility is that one of the settings on your NIC is in conflict with those of another expansion card in your system. No two cards can have the same IRQ, I/O port, or memory address settings, nor can the memory areas of two cards overlap. Whatever the cause, you'll need to find and correct the problem before continuing. Step 2: Set up your WATTCP.CFG file. Your WATTCP.CFG file contains important parameters used by the WATTCP TCP/IP kernel. These values MUST be entered correctly if you wish to make a connection with another DOOM PC. In preparation for this, you'll need several bits of information. Contact the network administrator for your site and find out the IP address for your machine, the IP address for your gateway or router, the IP address of at least one Domain Name Server local to your site, and your netmask value. The three IP addresses will each consist of four groups of digits separated by periods. In our example, the machine's IP address is 128.192.23.5, the gateway is 128.192.23.1, the netmask is 255.255.255.0, and the nameserver address is 128.192.44.67. NOTE: it is important to use the numeric IP addresses, not the actual host names. NOTE: If you have other Internet programs currently installed on your machine, such as a Gopher client or the Trumpet newsreader, you can probably find the information you need in the configuration files used for those programs. If the application is based on the Waterloo TCP package, it will have it's own WATTCP.CFG, in which case you can simply copy it over to your DOOM directory. When you have collected all this information, unzip the iDOOM distribution archive (e.g. IDOOM11.ZIP) into your DOOM (or DOOM2) directory. Use your favorite ASCII text editor to edit the file called WATTCP.CFG. Edit or add the following lines in WATTCP.CFG: my_ip= gateway= nameserver= netmask= On our example machine, the WATTCP.CFG file looks like this: my_ip=128.192.23.5 gateway=128.192.23.1 netmask=255.255.255.0 nameserver=128.192.44.67 Save the changed file and exit back to DOS. If you know your machine's IP address, but you can't determine the other values, you can often get away with some educated guesswork. For instance, the gateway for a subnet usually has an IP address ending in .1, as is the case with our example. Thus, if your IP address is xxx.yyy.zzz.www, try setting your gateway's IP address to xxx.yyy.zzz.1. As for the subnet mask, a common value for this parameter is 255.255.255.0. In some cases, the gateway value can be something like xxx.yyy.1.1 with a corresponding netmask value of 255.255.0.0 - if one doesn't work, it can't hurt to try the other. Finally, if you don't know your nameserver's IP address, you can probably get by without it for the purposes of DOOM playing. Since you'll be specifying IP addresses for all of your opponents' machines, a nameserver lookup won't be necessary to resolve their addresses. Step 3: Test your TCP/IP setup. Load your packet driver with the appropriate interrupt, IRQ, I/O and memory addresses. Next, unzip the TCPINFO and PING programs from the WATTCP apps archive into your DOOM directory. At the DOS prompt, type: TCPINFO and press the key. If your WATTCP.CFG values are set up correctly, and if your packet driver and net connection are functional, you'll see a couple of screens of information about your system, including your ethernet address and the parameters you specified in the WATTCP.CFG file. If everything looks OK, the next step is to use the PING program to attempt to establish contact with your subnet gateway. At the DOS prompt, type PING and press the key. After a brief delay, you should see a message telling you that the host is responding, as well as the round trip time for PING's test packets. If you see the "Timeout" error message, then something is wrong with your setup; if your PC is unable to reach your gateway, it will be unable to reach the rest of the Internet as well, since all network packets which are sent to nodes outside of your local area network must pass through your gateway. For our sample system, we would type: ping 128.192.23.1 If your gateway PING was successful, try PINGing your Domain Name Server (at the IP address you specified in WATTCP.CFG) as well as some well-known site on the internet (e.g. infant2, which is at IP address 129.79.234.115). These will test your machine's ability to connect with other machines outside of your subnet as well as those outside of your site. All of these PINGs should result in a "host responding" message with a response time. If any of these attempts fails, recheck your entries in WATTCP.CFG and/or get some help from your network administrator. Examples for our test system: ping 128.192.44.67 and ping 129.79.234.115 Put Me in, Coach - I'm Ready to Play! First, go find up to three of your most patient frag buddies. Since this is your first attempt at Internet DOOM, it's best to try and find someone on your local network who's willing to put in a little frag time with you. Connections on your local net will be faster and less problematic, whereas if you attempt a long distance connection your first time out, you'll have a hard time discerning problems caused by distance from problems caused by an incorrect configuration. Decide amongst yourselves which machine will be the "server" (the remaining machines in the game will all be "clients"). The server machine (and there can only be ONE server per game) acts as the coordinator for that session. The player operating the server is in some sense "the boss" - she can decide when to start the game, which parameters (e.g. -altdeath, -nomonsters, -warp, - skill, etc.) will be used, whether to kick a player out, and so on. The server starts iDOOM as follows: iDOOM -server [other game parameters] Once the server has started iDOOM running, the clients (all remaining players) can then connect to the server. Each client invokes iDOOM using the command line: iDOOM -client As an example, consider several computers which are part of a local area network in a computer lab. In this lab there are identical machines sitting side by side, with sequential IP addresses, i.e. 128.192.23.4, 128.192.23.5, and 128.192.23.6. After stepping through the basic configuration process outlined above on all test machines, my frag buddies and I are ready to begin. First, we all agree to play our favorite DEATHMATCH level, DOOM I episode 1 map 5. We also agree to play in -altdeath mode, with -skill 5 and -nomonsters. On my machine, which we decided will be the server, I type: iDOOM -server -warp 1 5 -altdeath -skill 5 -nomonsters The iDOOM screen comes up, and a message is displayed informing me that iDOOM is entering server mode. This screen is divided into several sections: the credits, the output window, the status bar, and the input line. At the top of the screen is the name of the program, its version number, and the copyright notice. The large area beginning with the second screen line and continuing to the 22nd screen line is the output window. Here is where iDOOM will display all status messages as well as the chat text entered by the other players. Below the output window is the status bar, where the current game settings are displayed. Below the status bar is the input line where all the text I type on my keyboard will appear. Finally, the bottom line of the screen lists significant contributors to iDOOM. Once my iDOOM server is up and running, all the other players can connect to it. The other guys type: iDOOM -client 128.192.23.5 Each client's screen layout is identical to that of my server. iDOOM displays a message confirming that it is entering client mode and connecting to the server. As each client's connection is established, the arrival of each player is announced by the server. During this phase of the game setup, all players who have connected thus far can type messages to each other using iDOOM's built-in chat facility. To send a message to the other players in the game, I simply type my message on the keyboard. My keystrokes appear in the input line at the bottom of the screen, and when I press , the text will be echoed to the screens of all players (along with an indication of who sent the message). The identical procedure can be used to send messages from each of the client machines. The server itself will also send messages. Messages from the server will begin with three asterisks ("***"). When a client connects to the iDOOM server, the client receives a message containing the game parameters which will be used during that session. These game settings will be displayed on the status bar. The settings are abbreviated to ensure that they will all fit within the available space. These game settings may be changed interactively at the server console. My friend sees that I have selected E1M5 as the default episode and map for our game. He reminds me that we've been playing that one a lot lately, and suggests we change to E2M2 since we haven't played that one in a while. I agree, and issue the commands /episode 2 and /map 2 to change the level. Our status lines are immediately updated to reflect these changes. Once I have determined (via the chat facility) that everyone is ready to begin the game, I press the F10 key. The iDOOM server signals the clients that the game is beginning, the chat facility is shut down, and iDOOM sets up the connections which will be used for the actual game. Once these network links are established between all the machines, the message "Prepare to meet your DOOM!" is displayed, followed by the usual DOOM startup information. Shortly thereafter, the screen melts away and there we are, in E1M5, pistols at the ready! Give your buddies a good thrashing - you've earned it! Now, after you've gotten DOOM working on your own subnet, you're ready for the final step. Find a partner who is also capable of playing Internet DOOM. Watch the posts in alt.games.doom, or tune into the #doom, #tcpdoom or #iDOOM channels on irc. You and he will negotiate game parameters, such as which map to play, which skill level, and so on. You'll also decide on who will be the server and who will be the clients (experienced DEATHMATCHers will often try very hard to avoid being the server, since that player's uniform is colored day-glo green and is easier to spot in a DEATHMATCH). Now simply add the parameters you've agreed on to the iDOOM server command line you used before. A typical command line will look something like iDOOM -server -skill 5 -nomonsters -deathmatch Oh Oh - It's Not Working! OK, so you've done everything, just like I've shown you, but you're still having problems. The following are some suggestions to try in case of trouble. Q: When I try to connect to the iDOOM server it returns to DOS saying "Server is not responding" or "Remote reset connection." A: This means that the player on the server machine hasn't yet started the iDOOM server. The server must be started before the clients try to connect to it. Try again in a few seconds. Q: I keep seeing an "ICMP: port unreachable" message on my screen. A: This message is generated by the other machine when the port being requested by the sender is unavailable on the destination machine. I've seen this happen in some cases when I started iDOOM before the other player did. Once the other iDOOM was running, the ICMP: messages went away, and the game linked up normally. If you see this message, you might also want to try using a different port (see the iDOOM documentation on the -port command line parameter). Q: The music starts up fine, but all I see is a BSOD (Black Screen of Death). Q: My machine displays "sending network start info" or "listening for network start info" and then locks up. A: This problem can have several causes. Perhaps the server specified a DOOM II game, but one of the players didn't have DOOM II. Perhaps one of the other players' machines is slower than the others, or has a fragmented disk and takes a longer time to load DOOM at startup. Or perhaps some packets were lost - iDOOM uses UDP (user Datagram Protocol) packets to exchange game information between all machines in the game. UDP packets are not guaranteed to reach their destination, and there is no mechanism for the sender to even be informed that what it sent never made to the destination machine. iDOOM is designed to compensate for these lost packets to the extent possible, and occasionally this detection and correction takes a few extra seconds. You should always wait for at least 30 - 45 seconds for the other DOOM engines to sync up before you abort the setup. Pointers and Tips for More Fragging Enjoyment We'd like to leave you with a few experiences and opinions about Internet deathmatches. First, try not to use the "pause" key. Do NOT use the pause key just so you can type a message. DO use the pause key if you have to answer the phone; either find a hiding place to hole up, or if you are fragged, just stay dead (don't hiot the spacebar) until your call is completed. It's inconsiderate to make everyone else wait on you. Do NOT release the pause after someone else pauses. It's hard to yell at someone over an IP connection. It's really annoying to play against people who like to pause just when they're about to be shot. Argh! Second, DO type messages. A pause at the beginning of the game is OK just to see if the other player is there. If you notice a sudden increase in game speed, another player may have aborted or crashed. You might end up playing by yourself if you are not alert... If you can monitor network traffic (I have a repeater nearby that gets very busy when I play), notice the difference between the amount of traffic when connected and disconnected. Third, Be patient. It sometimes takes 30-60 seconds for the connection to complete. The first phase, finding a node, should be immediate. As mentioned above, if you cannot find a node, something is wrong. The second phase, looking/sending network start info, may take 30 seconds, longer if one of the players has a slow or fragmented hard disk (this is the phase where DOOM loads the info it needs to play from the WAD file(s)). The third phase, sometimes a blank screen just before the game loads, may take another 15-30 seconds. After finding a node, please don't abort until you have waiting a sufficient time for a connect. Also, if your connection doesn't work the first time, try again immediately! If it failed on your end, chances are it failed on the other end, also, and your partner will be back in iDOOM trying to connect and wondering where you are. Forth, Internet games will self abort sometimes with errors. Don't panic, just restart iDOOM. Sometimes one of the computers will lock up - again, just restart. If you get tired of restarting (this doesn't happen much), just walk away! It's just a game! Last, hope for a fast connection. This isn't always a problem, but when the connection is slow, the game sucks! There's nothing you can do about it. Sometimes the game will speed up and slow down throughout the match. Such is the Internet. Re-connection will not help. Every packet that is sent back and forth picks a new path; sometimes it's a fast path, and sometimes not. Finding Other iDOOM Players There are many ways to find opponents for your TCP/IP Internet DOOM games. One is to contact your friends who play DOOM and arrange a time for a game. However, everyone will occasionally find times when nobody they know is available to play. Fortunately, there are some virtual equivalents to walking down to the basketball court and joining a pickup game. IRC If your setup is capable of Internet DOOM, then you can probably also use IRC, the Internet Relay Chat. If you have an account on a UNIX machine, try typing irc at the command prompt - chances are good that a client has already been installed which you can access. If not, IRC clients for your PC can be obtained via anonymous ftp from cs-ftp.bu.edu. One especially nice one (if you run Windows) is WSIRC. To meet other players, join either the #tcpdoom of #iDOOM channel - the sole purpose of these channels if for Internet DOOM players to meet other players and arrange games. The #doom channel is for more general discussions of DOOM. Although some people also arrange games there, #tcpdoom is the preferred meeting place. You will be able to find iDOOM games here at almost any time of the day or night. When you /join the channel, be friendly. Say "Hi" to everyone, then ask is anyone is up for iDOOM DEATHMATCH. If you don't get any responses right away, just hang out for a while and watch, or engage in some random chit-chat. The people currently on the channel might be already be playing a game (/away), and thus cannot respond to your invitation immediately. It's quite common for players who have two machines to use one as an irc terminal and the other for playing DOOM. Thus, they may not be looking at their irc screen when you first sign on. Sooner or later, though, someone will sign on (or return) who would also like to play. Don't make the mistake of re-posting every couple of minutes, or bombarding everyone who joins the channel with your request - such behavior will quickly annoy other users and may result in your being flamed or even kicked off the channel. Don't worry about missing any opportunities - other players who want a game will most definitely follow the same procedure you did - they'll ask the for a game shortly after joining the channel. When you see the invitation, that is your cue to respond. You can then negotiate your game parameters. Also, if you're in a computer lab (and thus have two machines right next to each other) you can stay logged on to irc with one machine while you play iDOOM with the other, as mentioned above. This can come in VERY handy in case of connection problems! Frag Servers/Frag Trackers Frag Servers are a recent development. They facilitate iDOOM connections between multiple players quickly and easily and with a minimum of command line typing. Current versions of the Frag Servers are very similar to the server built into iDOOM. NOTE: An iDOOM client can NOT connect to a Frag Server. Frag Servers have their own client program which then loads iDOOM as the network driver. As of this writing, the latest version of the frag client/server package is TCPSRV12.ZIP, available from one of the infant2 mirrors in the /pub/doom/multi_doom/net directory. A couple of the more popular fragservers can be found at ararat.cs.ucdavis.edu and patriot.et.buy.edu. Both of these support 2, 3 and 4 player games on ports 1666, 1667, and 1668 respectively. Future versions of the Frag Servers (which will be known as Frag Trackers) will serve as online meeting places where DOOM players can log on, see a list of games which are awaiting players, and either join an existing game or register a new game. Waiting players will be able to send chat messages to each other, negotiate and set game parameters, check connection quality, etc. Although this exciting capability does not exist in the current Frag Servers, it will be available sometime in the near future, and will revolutionize the way Internet DOOM is played. The TCP/IP DOOM Tournament You call also compete in the ongoing TCP/IP Doom Tourney. Contact Jay Cotton at jay@calc.vet.uga.edu for information on joining the tourney. Jay maintains a ranked listing of active Internet DOOM players as well as an Internet DOOMer's mailing list. A Final Thought The TCP/IP Internet DOOM and the IRC can be VERY addictive. Have fun, but don't lose your "real" life just to play a game!