The TCP/IP Internet DOOM FAQ by Scott Coleman (asre@uiuc.edu) and Jay Cotton (jay@calc.vet.uga.edu) updated 4/8/95 Introduction id Software's DOOM, DOOM II, and Heretic truly are the Killer Apps of the MS-DOS world. The popularity of these games is so immense, it has been estimated that DOOM is installed on more PCs than OS/2 and Windows NT combined. So many copies of these games have been sold that the idGuys can commute to work in Ferarris. Interest in these games has been so great that they have been hacked, reverse-engineered, dissected, and enhanced more than any other games in PC history. And now, as more and more people become hooked into the Internet, DOOM-engine games are rapidly becoming the Killer Apps of the 'net, as well. Although the remainder of this document will refer exclusively to DOOM, the procedures outlined here will work equally well for either DOOM II or Heretic, as well. DOOM, as released by id, only supports IPX network or modem/direct serial link play; TCP/IP networks are not supported. As a result, the DOOM documentation doesn't include any information about DOOMing across the Internet, and obviously DOOMers can't call id for help. As a result, the following question is asked at least once per week in the DOOM newsgroups: "How do I play DOOM over the Internet?" 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 freeware program called iFrag (formerly called iDOOM). iFrag uses the UDP protocol to send DOOM game information between multiple machines on the Internet. By some strange coincidence, the authors of this document are also the creators of iFrag, 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. The Frag Tracker The Frag Tracker is a major new enhancement to the Internet DOOMing experience. Based on the premise that the ability to play DOOM over the 'net isn't much good unless you have other people with whom to play, the Frag Tracker serves as a virtual meeting place for Internet DOOMers. Frag Tracker support is built right into iFrag - its use is completely transparent. People looking for games run iFrag in client mode, which automatically queries the Frag Tracker for a listing of registered games. The type of game (DOOM, DOOM II, or Heretic), the names of the players, the game parameters (episode, map, skill level, etc.), and other information is displayed on the iFrag screen. The player picks a game from this list and she is instantly connected to that game. If there are no games waiting, or the existing games aren't sufficiently interesting, a player can register a new iFrag game on the Frag Tracker which others can then join. Getting Prepared Q1: I want to play DOOM over the Internet using iFrag. 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!) * If your site is directly connected to the Internet, you'll need a network interface card (NIC) for your machine. 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 iFrag has been successfully played over token ring. We will assume 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). As long as your NIC is supported by a standard packet driver, your machine can be readily converted into an iFrag "playstation." * If you are not directly connected, you'll need a 28.8Kbps modem (V.34 or V.FC) as well as an ISP (Internet Service Provider) with suitable dialup facilities. NOTE: If you have a 14.4Kbps (V.32bis) or slower modem, don't waste your time trying to play DOOM over it via a SLIP connection. It is, quite simply, unplayable. Go invest in a faster modem or, better still, an inexpensive ethernet card. 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 complete your setup. Before you can play, you'll need to pick up the following: * The latest version of DOOM. At the time of this writing, the latest version of DOOM is 1.9, DOOM II is 1.9, and Heretic is 1.0. It's always best to use the latest version of each game because that is what the majority of other iFraggers will be using, and different versions of each game cannot be used in the same network game. Additionally, DOOM versions 1.1 and below are incapable of using iFrag. * A packet driver written specifically for your NIC. The Packet Driver is a standardized interface that lets iFrag (and therefore DOOM) "talk" to your NIC. If you're connecting via modem, you'll need a SLIP packet driver. * iFrag, the TCP/IP network driver for DOOM. * Some basic network diagnostic tools, such as a PING or TRACEROUTE program. 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 iFrag: Log on to mrcnext.cso.uiuc.edu via anonymous ftp. Change to directory /asre. Download the file iFrag21.ZIP. This is version 2.1 of iFrag, the latest 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. You need not download the files PKTD11A.ZIP and PKTD11B.ZIP; these contain source code and example programs for the packet drivers - while interesting (especially to programmer types), you won't need these in order to play iFrag. Modem users should grab the file slippr15.zip from this directory. NOTE: Make sure that you do NOT get "slipr15d.zip" by mistake! * If you need basic network diagnostic utilities, the WATTCP applications are freely available and include a PING program. To get them, anonymous ftp to dorm.rutgers.edu, change to the /pub/msdos/wattcp/ subdirectory, and download the file APPS.ZIP. Q4: OK, I've got everything, now what do I do to set it up? Setting your computer up to use the TCP/IP protocol suite via a packet driver is very straightforward. This next section will illustrate the procedure for setting up a PC with an SMC ethernet card and the IP address 128.192.23.5. Modem+SLIP users can skip ahead to the next section, which describes the analogous procedure for dialup SLIP users. 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. Ethernet Setup Procedure Step 0: START WITH A CLEAN BOOT!!!!! Set up your CONFIG.SYS and AUTOEXEC.BAT files to load as few drivers as possible. Some definite things to EXclude are 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 an alternate configuration (using the multiple configuration facility built into MS- DOS; see your DOS manual for details) specifically for Internet DOOM with a CONFIG.SYS portion containing only a FILES=20 line, and an AUTOEXEC.BAT portion containing only the line "prompt=$p$g". Be sure to include the line which loads your mouse driver (if you play DOOM using a mouse). Step 1: Set up the packet driver. If you do not already have a suitable packet driver installed on your machine, now is the time to install one. Start by determining 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, 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). Add the proper command line to the AUTOEXEC.BAT for your iFrag configuration so that the packet driver will be loaded automatically whenever you boot using the iFrag partition. When successfully loaded, 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 a new directory where iFrag and all its configuration files will be kept. You can name this directory anything you like (I suggest c:\iFrag). UnZIP the ifrag21.zip file into this new directory, and make it the default (chdir to it). We will refer to this directory as the "iFrag directory." Step 3: Set up your WATTCP.CFG file. Your WATTCP.CFG file contains important parameters used by the WATTCP TCP/IP kernel built into iFrag. 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 iFrag directory. When you have collected all this information, use your favorite ASCII text editor to edit the WATTCP.CFG file in your iFrag directory. Edit or add the lines beginning with my_ip=, gateway=, nameserver=, and 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. Some sites run what is called a BOOTP server. If yours is such a site, you can put "BOOTP" on the "my_ip=" line and leave the other lines out. iFrag can contact the BOOTP server and determine all the settings it needs to communicate with other machines on the Internet. If your site is not running a BOOTP server, then your task is a little more difficult (but not impossible!) 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. Your basic setup is now complete. Please skip ahead to the section on testing your TCP/IP setup. SLIP Setup Procedure This procedure assumes that you are using the cslipper SLIP driver mentioned earlier. If you are using a different driver, you'll need to change the commands which follow accordingly. Step 0: Obtain Internet access from a service provider who allows SLIP/PPP connections on their terminal server. A "shell account" (where you log in to a remote UNIX host and type commands such as "telnet" and "ftp") will NOT work. How to obtain this type of service from such a provider is beyond the scope of this document. Step 1: Using your favorite serial communications package, dial in to your service provider, log in, and issue whatever commands are required to change their terminal server to SLIP mode. How this is done varies from service provider to service provider and is beyond the scope of this document. Check with your service provider for more details. Once you have logged on and enabled SLIP mode, exit your telecommunications software WITHOUT HANGING UP - this is VERY IMPORTANT! Any telecommunications package worth the floppy it comes on will have a "save without hangup" command, or will prompt you when you exit to ask whether it should hang up or not. Change to the directory where you have installed your packet driver and load it. An example command line for CSLIPPER is CSLIPPER com1 vec=0x60 baud=57600 where com1 is the serial port to which your modem is connected, 0x60 is the interrupt vector the packet driver should use, and 57600 is the baud rate. The packet driver will display a signon message and load itself into memory. Your SLIP packet driver is now loaded and ready for testing. Testing your TCP/IP Setup Step 1: Reboot your machine and select your new iFrag configuration. Next, use your network diagnostic programs to test the connection. For example, if you are using the WATTCP application suite mentioned earlier, unzip the TCPINFO and PING programs from the WATTCP apps archive into your iFrag 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. the Frag Tracker, which is at IP address 128.174.134.150). 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 round trip 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 128.174.134.150 Step 2: Set up your iFrag.CFG. Again using your preferred ASCII text editor, modify the iFrag.CFG file in your iFrag directory so that all entries are correct for your system. You will need to specify the paths to your game and patch WAD directories, your chosen nickname (the name by which other iFrag players will know you), the number of lines you want on your video display (25 or 50), whether or not you want stealth (no sound) mode, etc. As an example, let's suppose Joe Ayedume has chosen the nickname FragLord, and that he has installed DOOM, DOOM II, and Heretic into their standard directories on his hard disk. The iFrag.CFG file for Joe's system will look something like this: ; ; Sample iFrag Configuration File ; ; stealth nick=FragLord realname=Joe Ayedume location=Redmond, WA, USA password=secret tracker=128.174.134.150,6666 doom=c:\doom doom2=c:\doom2 heretic=c:\heretic doompwads=c:\doom\wads doom2pwads=c:\doom2\wads hereticpwads=c:\heretic\wads videolines=50 Edit your iFrag.CFG file to reflect your nickname as well as the locations of your games and PWADs. If you don't have one of the games installed, just leave the corresponding entries blank. Save the changed file back to disk. Put Me in, Coach - I'm Ready to Play! All right! iFrag is now installed and ready for carnage! Now all I need are some more players to sink my rockets into. From my iFrag directory, I start iFrag by typing iFrag and pressing the key. The iFrag client-mode screen comes up, and iFrag contacts the Internet Frag Tracker to see which games are waiting for players at the moment. Once iFrag has successfully contacted the Frag Tracker and downloaded the list of available games, a pop-up dialog box appears on the screen. Using the PgUp and PgDn keys, I can view a summary of each available game. This game summary includes the type of game (DOOM, DOOM II, or Heretic), the nicknames of all the players currently in the game, the location of the machine hosting the game, a brief description, as well as the current game settings (skill, episode, map, etc.). I notice that my friend (who is known only as "ArchVile") is currently hosting a game of Heretic. Since it's been a while since I have turned him into a chicken, I press the key to select his game. iFrag immediately contacts ArchVile's machine and I join the game. ArchVile is running iFrag in server mode. This makes ArchVile the coordinator for this particular game - he is the "boss," and gets to decide which game will be played (DOOM, DOOM II, or Heretic as in this case) as well as which parameters to set (such as episode, map, skill level, which PWADs to use, and so forth). ArchVile also decides who may be allowed to join the game and when the game will begin. Although the other players in the game may voice their opinions, only the server has the ability to actually make changes to the game settings. In a sense it's just like watching TV - although there may be four people watching, only one person can have the remote control. Now that I have successfully joined a game, the iFrag chat mode screen appears. 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 is the output window. Here is where iFrag 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 iFrag. During this phase of the game setup, all players who have connected thus far can type messages to each other using iFrag's built-in chat facility. To send a message to the other players in the game, I simply type a 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 my nickname to indicate that I sent the message). The server itself will also send messages. Messages from the server will begin with three asterisks ("***") to distinguish them from messages typed by other players. In addition to sending text messages, iFrag's chat facility also understands several commands, each beginning with a slash '/' character. Some examples of iFrag chat mode commands are /who, /quit, and /help. When my iFrag client connects to the iFrag server, it automatically receives the game parameters which will be used during this session. These game settings are displayed on the status bar in an abbreviated form to ensure that they will all fit within the available space. The server announces my arrival, and ArchVile greets me by typing "re" (short for "re Hi," i.e. "Hi again"). I reply with a "re" of my own. Gazing down at my status bar, I notice that he has selected E1M8 as the default episode and map for our game. I remind him that we've been playing that one a lot lately, and suggest that we play something else. "How about hl9.wad?" he asks, referring to the PWAD (user-written level) which is a Heretic DEATHMATCH level based on the famous DOOM "Ledges" PWAD. I agree, and he issues the commands and "/map 1" and "/pwads hl9.wad" to incorporate the new level. Our status lines are immediately updated to reflect these changes. Once all players have joined the game and all parameters have been set, ArchVile presses the F10 key. The iFrag server signals the clients that the game is beginning, the chat facility is shut down, and iFrag 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, and iFrag launches the appropriate game. We see the usual Heretic startup information, and then there we are, in HL9.WAD, crystal wands charged and ready! After dining heartily on Chicken Flambe' (courtesy of a Morph Ovum, a Phoenix Rod, and a Tome of Power), I decide to fire up my own game with a little scenario I call "Carnage-DOOM." From the DOS prompt, I type iFrag -server and press . Since I like this particular scenario quite a bit, I created a standard DOOM response file called "carnage.rsp" containing the parameters -doom2, - warp 1, -deathmatch, -nomonsters, and -skill 5. I use iFrag's /load command to load the response file by typing /load carnage.rsp, and my status bar is updated with the new settings. After a few moments, NoOne, Caitiff, and FragMastr join my game. After exchanging a few jocularities, I confirm that everyone is ready to begin and then I press the F10 key. DOOM II loads, and I grab the rocket launcher for the first of many fabulously fun frags. That's all there is to it! Gone are the days of long command lines with 4 IP addresses and tons of other parameters, setting up games via email, and other frustrations. Now getting into a game of Internet DOOM is as easy as getting fragged with a BFG-9000! iFrag/Frag Tracker Etiquette The Frag Tracker was intended to provide a pleasant meeting place for DOOM players from all over the Internet. However, there is an unfortunate human tendency to behave both more aggressively and less politely towards others over a cyberspace link than one would behave face-to-face. In an attempt to help counteract this tendency, we urge you to employ the following guidelines in your use of the Frag Tracker. These guidelines stem from the common courtesies and politeness we extend to each other in everyday life. Think of the server of an iFrag game as being the host of a small get- together. This person has invited you into their home (virtual home in the case of iFrag) for a game of DOOM. While connected to their iFrag server, behave as you would if you were a guest in their home (and as you would like others to behave in your own home). Have some consideration for the other players and everyone will enjoy their gaming even more. On the other hand, severe and/or repeated violations of these guidelines may result in revocation of Tracker access privileges. 1. Do NOT use abusive or vulgar language in public. Type /freeze or /notrack (or both) if you want a private chat. Do not put vulgar or abusive language in your game description. 2. Do NOT falsify information in ifrag.cfg. Anyone not reporting their real name, location, or email address may have their Tracker access privileges revoked. 3. Do not kick someone out of your game before first asking that person to leave. One exception to this is if they don't respond to your "hello" within several seconds (in violation of item 7 below); in that case, feel free to kick or ban them at will. ;-) 4. If you are in an iFrag game setup on the tracker and you are asked to leave, do so. While the server player should be polite in his request, he is under no obligation to allow any particular player to join or remain in his game. Usually the server player will ask another player to leave because that player's packet latency, or "ping" time, is high enough that it would cause playability of the game to suffer. Don't take it personally; just find another game involving machines to which you are better connected. 5. If you decide you do not want to play a game after it has been launched, do not press alt-x to get out of the game - this will prevent ALL the players from loading. It's a simple courtesy to wait for the game to begin before leaving; at that point, your departure will not prevent the other players from continuing their game. 6. If the game appears to be hung while loading, be sure to wait at least 60 seconds before aborting. Some computers are slower than others when loading all the doom data at the start of the game. This may be caused by something as simple as a fragmented hard drive. In any case, aborting too soon is decidedly uncool (just as it is in item 5). 7. It is rude to join a game and then leave without saying something. If you join a game, and see that your connection is poor, at least say something like "Oops! Sorry, I was looking for a better connection than I have with you. Later!" Think how you would feel if someone walked up to your home, rang your doorbell, then when you opened the door they simply looked at you, turned, and walked away without saying a word. It's enough to make Judith Martin shudder. 8. If you are serving a game in which you want only certain players to join, be sure to put that info in the game description (use the "/desc" command). 9. When enough players have joined a game, give some time to be sure that: - Everyone has a chance to see and comment on the game parameters; - Everyone has or has successfully transferred the PWAD (if one is selected); - All players have a pretty good idea of what their ping time is; - All discussions related to the pending game are concluded. 10. Make sure you know where you are in the ping time "pecking order." If the game lags and you have the worst ping, leave the game. Slowing a game down is very bad form! There will always be other games for you to play; don't be selfish and ruin things for the other players. Other Pointers and Tips First, try not to use the "pause" key. Do NOT use the pause key just so you can type a message. Do NOT 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 hit the spacebar) until your call is completed. It's inconsiderate to make everyone else wait just because *you* decided to stop playing and take a phone call. If someone else has paused the game, do NOT release the pause - let the person who paused release it. Before releasing pause, the original pauser should first check to make sure everyone else is ready to begin playing again. People tend to get angry when an unexpected pause release causes them to become easy fragbait for another player. It's also really annoying to play against people who like to pause just when they're about to be shot. Argh! Second, DO type messages. 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... Type a message and see if your opponents are still in the game. 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, Internet games will sometimes self abort with error messages. Don't panic, just restart iFrag. 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. A Final Thought Fragging your friends across the Internet with DOOM, DOOM II, and Heretic can be VERY addictive. Have fun, but don't lose your "real" life just to play a game!