How to Configure Other Online Games

    It is not always easy to configure games to run using the PC-Dreamcast Servetherefore this is an advanced topic not meant for the casual gamer, but for someone familiar with TCP/IP and networking in general.  This section will describe how to go about getting other games to run using this server, however it should be noted that many games are not so easy to hack.  Quake III Arena, for instance, hangs when attempting to contact its server.  In theory, careful analysis of your connections should permit you to figure out what you need to do to get games like Unreal Tournament and Daytona 2001 to run.  In reality, however, it may not always be possible.  My suggestion would be to follow this guide, understand the underlying principles involved, and go about tweaking your settings and trying different things until you get it working.

    First you need a connection monitor program.  The best one I've found is called CommView by Tamosoft.  If you want you can do a search for connection monitors and try some others, but CommView is the one I'll be using in my examples.

    After you have CommView installed, go ahead and start it up.  Go to the rules tab and select "Enable direction rules" and unselect "Capture pass-through packets".  This will clean up the logs a lot and give you a better chance of finding the information you need in a sea of garbage internet packets.  See the picture below...

    Now go ahead and boot up your Dreamcast with the game in it you want to hack.  Try and establish a connection to the PC.  If the game says it couldn't find a dial tone (i.e. Quake II Arena, NFL 2k1, NBA 2k1) you will have to trick it into dialing.  This can be done with a line simulator or the swap trick method.  Line simulators cost money, so I suggest the swap trick.  Just plug your DC into the phone line and start the connection process.  As soon as the game begins to dial (you will have to experiment to get the timing down as this varies from game to game), unplug the phone line from the wall and connect it to your PC, and open up the connection the way you normally do. After you know you can get your game connected to your PC we're ready to go.

    Exit out of all Windows applications that access the internet (except for CommView and your Net Address Translation software, of course).  This includes email checkers, instant messenger programs, weather checkers, SETI@Home, or whatever you got.  This will help clean up the logs to make them easier to decipher.  Now go to CommView.  Make sure the adapter you use to connect to the internet is selected in the drop-down box, and then hit the play button to begin monitoring.  Now establish a connection between your computer and your Dreamcast.

    Once the connection is made you can monitor what is going on in the CommView window.  Here's my take on what happens...

    When the DC initiates a connection, NAT sees this and says "OK, the Dreamcast is opening up a connection over port 61004, so I'll route that packet out to internet.  When return traffic comes back on 61004, I know the DC is expecting it so I'll route that back over to the Dreamcast."  In this way, connections initiated by the Dreamcast are handled automatically, without the need for specific port mappings.

    Now say you want to play with someone else online.  That person's DC begins sending packets to your IP address.  The Net Address Translation sees this and says "There's traffic coming in on port 41231.  The Dreamcast hasn't initiated any connection over this port, so I can't assume that packet is meant for the Dreamcast, so I'll just let it go through to Windows".  Of course Windows can't do anything with it so it gets dropped.

    The latter situation must be remedied for you to be able to play the game.  The bottom line is all connections not initiated by the Dreamcast must be mapped through to the DC.  You do this with a NAT port mapping.  That way, NAT can say "OK, the traffic coming in on 41231 is meant for the Dreamcast, so I'll open up a connection to the DC and send it through.  Any time the DC responds by sending return traffic, I'll remember to send it back out over the internet through port 41231".  In theory, after all connections like this have been mapped, the game should be playable.  Now how do we find out what connections are trying to get through to the Dreamcast?

Take a look at this capture from CommView with PSO running through it...

    The first entry is the DNS lookup.  You can tell because DNS lookups are performed over port 53.  If you're not familiar with standard ports you can go to the View menu and selecting 'Port Reference' for a list.  In this same way you can filter out any other garbage that might come up, such as connections to your POP (email) server over port 110 or web traffic over port 80.  Anyways, what is happening here is PSO is looking up the location of its main server.  You can see this in detail by clicking the 'Packets' tab...

    We can see by the next connection that the result of this DNS lookup was 63.251.242.32.  That is PSO's "gateway" server, and from there you select a ship to play on.  The next connection is at 63.251.242.40, and that is whatever ship I selected that night.  PSO is doing fine up to this point, because the DC is initiating all of the connections so far.  You can even go walk around in the lobby, talk and interact with other players.  This is possible because everything is being communicated between the DC and the PSO Server through their initial connection.  Take a look at it in the 'Packets' tab...

    Next I join a game with three other players.  Look at the last three connections again...

    Those are direct connections to the three players I'm playing with in PSO.  If the port mapping wasn't there there would be no packets in the 'Out' column, because the Dreamcast would not ever even see the packets coming in.  Every time I do anything with my character like move him, swing his sword, or whatever, it sends that information out to those three players.  That's why they all have 17 packets sent to them.  They will always have the same number of packets sent out to the three of them.  More interesting though is the ports they're connected on.  It appears that when a player tries to connect, his DC will do so over port 40975, 41231, 41487, or 41743.  If we look at the 'Packets' tab once again you can see that the players initiated the connection with me, and not the other way around.  This makes it necessary for us to define a port mapping in whatever NAT software you're using, directing any traffic coming in on those ports to the DC.

    After the port mapping is placed into effect, the game runs as it was meant to.  For PSO, it's that easy.  Other games are more complicated, but you can apply the same principles.  A tip to help you out is look for ICMP packets in the 'Packets' tab.  You can click on the packet, and then click on the ICMP tab on the bottom to see what kind of errors are coming through.  If you are getting those kind of errors, you can use that information to try and figure out where the problem is.

    That's about all there is to it.  Most of the time you will just have to use trial and error, trying different port mappings and seeing what works.  After you're used to CommView and have been working a game for a while, you will gain an understanding of what's going on, and hopefully apply the correct fixes.  Good Luck!