Some of you might have heard of MAME (Multi Arcade Machine Emulator). Basically, it lets you play arcade games dating back from pong (or maybe even earlier) to arcade games circa 2006. The volume of games supported by mame is massive, and includes some consoles (notably, Super Nintendo).
There's a program called Kaillera that allows you to play MAME games online with your friends, but it has some drawbacks:
-It only works for windows
-It uses UDP and does not gracefully handle dropped packets. The games will desync and become frustrating for all players if a packet is dropped
-It isn't open source
So I decided to write my own network wrapper around MAME. ClientServerMAME supports any number of players (6-player X-Men anybody?), performs a complete game sync every 5 seconds to eliminate desync, works on any OS that MAME supports and even between OS's (I have been able to play a game between a windows 7 box and an ubuntu machine), and is completely open source ( http://github.com/MisterTea/ClientServerMAME
I've tested it myself using traffic controller to simulate internet lag, but I haven't tried playing any games on the net yet. Please let me know how it works and what the latency is like (not noticeable, unplayably laggy, etc.). What follows is the instructions for getting it up and running on windows (linux and intel osx versions are coming):
1) Find one or more friends (this can be the hardest part)
2) Both of you get the rom you are going to play and ClientServerMAME from here: http://www.underworldhockeyclub.com/ClientServerMAME/ClientServerMAME_v0_1_Win32.zip
3) Decide who is going to be the server
4) The person who is the server needs to make sure that TCP port 5805 is open and points to their IP. This will probably require port forwarding or something like that. Most games have this issue, so you can find info on it on the internet if you need help.
5) The server needs to tell everyone else his IP address or hostname
6) Have the server start the game like this:
mamesdl.exe (rom) -server
7) Have the clients connect like this (make sure you fill in (rom) and (hostname) with real values):
mamesdl.exe (rom) -client -hostname (hostname)
8) Everyone uses player 1 controls on their own machine. ClientServerMAME currently does not support having more than one player at a single computer, and all other player inputs are ignored.
9) There isn't much in the way of error handling at this point, so don't do anything stupid like try to run a different rom on the client as the server or try to load a rom while you are in the middle of another game or it will crash hard.
Let me know what you think. My plan is to pass this out to some friends and play some beat-em-ups, but if people find it useful I will add more features like having servers report to a master server so people can host public games.