Sonic Adventure 2: Battle Network is a console-based netplay application for Sonic Adventure 2 PC which is still very much in early development. It finds your SA2 process while it's running, and once connected to a client will read and write memory to/from SA2's memory and send it over the network. It currently only uses the UDP protocol with a custom reliable packet system, although TCP is not out of the question for future versions.
It is currently in very early stages (it would probably classify as a prototype or proof-of-concept), but so far supports Action Race and Shooting. Treasure Hunting will work if you don't mind emeralds being completely desycned. Anything I didn't mention probably isn't supported either (kart race for example). It also works in slow upstream situations. I would know; my upload speed is 34KB/sec tops.
Player 1 and Player 2 are relative to the client. On each player's copy of SA2, Player 2 acts as a receiver. For example, the Server is Player 1, and the Client is Player 2. Ingame, they are both Player 1, and for both Server and Client, the actual Player 2 object acts as the receiver for the information which simulates the netplay. As such, character selection is swapped; it will say P1 for both players locally.
Requirements: * Visual C++ Redistributable for Visual Studio 2012 Update 3 x86 * You pretty much just need to be able to run SA2 at full speed. There is no lag compensation if one player happens to be playing incredibly slowly.
How to use: * Extract the executable somewhere you would like to keep it. * It is recommended you use command line arguments, although you can just run it if you so desire. However, not everything is configurable without command line at the moment. * Host a server (command line args below) or connect to a server * Head over to the 2P Battle menu and have fun! (I recommend going there before connecting)
Note: Be sure to use the D-Pad on menus. The analog is not synced on menus as it is rather troublesome. I also recommend you talk to whoever you're playing with over a VOIP service so you can ensure your selections are the same. Don't be surprised if one of you is in City Escape while the other is in Metal Harbor. Since the analog isn't synced, you can use it to, for example, re-sync your level selection with your buddy. (Battle options are synced on the fly though; don't worry about it.)
For those of you using a keyboard: first of all, I feel so sorry for you (lol). Secondly, your UP, DOWN, LEFT, and RIGHT mappings are mapped to both D-Pad and Analog because Sega of China™. This causes a lot of issues ingame, and as of now, there is no way around it. So if you have a controller, I highly recommend you use it.
Additionally, be very careful when it comes to picking up objects. In fact, just avoid doing it all together lest you want your game to crash.
Command line arguments: (These should come before the rest) * -client - Connects to a server * -server - Hosts a server
* -ip [address] - IP address to connect to (resolving currently not implemented; ignored if Server) * -port [port]- (e.g -port 27015) Port to host or connect through * -i [interval (milliseconds)]- Update interval in milliseconds. It's recommended you don't use this unless you're playing on LAN and/or you really want to. Default and recommended is 16.
* -nospecials - Disables special abilities in 2P mode entirely. It doesn't sync (yet), so both players must use it. * -keepactive - Keeps the game window active. In other words, it doesn't pause when you click on another program while in window mode.
Features: * Netplay =P * Toggle-able splitscreen ingame (Press L+R) - Be careful with this one. If splitscreen is not already on, by trying to toggle it, your game will crash. There are other situations where this happens too.
* Input handler (this makes all the difference in the world) * Synced upgrades if you want to cheat yourself a bounce bracelet and the like =P
Planned: * Treasure Hunting support =P * Configurable 2player specials (ring count requirements, blacklist, etc; e.g speed up only, 50 ring requirement) * Map analog input to D-Pad for menus * Something everyone has wanted forever
I owe a huge thanks to MainMemory for helping me out with a lot of things (such as enabling me to run multiple instances of SA2), everyone who worked on the cheat table, Sonickidnextgen who helped me be less derp at programming and wrote the socket library (It's still a mess. I'LL CLEAN IT UP LATER I SWEAR!), and everyone who helped me test it. Couldn't have done it without you guys!