Sonic Adventure 2: Battle Network is a netplay mod for Sonic Adventure 2 PC which is still very much in early development, and not a Sonic/Mega Man Battle Network crossover, unfortunately.
Originally a stand-alone program, SA2:BN now utilizes the SA2 Mod Loader to check for changed player and input values and synchronizes them with another instance of SA2 over the internet. It also now uses an oh so very slightly modified version of the SFML networking library (to allow seeking in sf::Packet).
These are old screenshots.
- Windows XP or newer.
- SA2 Mod Loader
- Visual C++ Redistributable for Visual Studio 2015 x86
(Make absolutely sure you download the 32-bit (x86) version regardless of whether or not you have a 64-bit operating system, as this is a 32-bit dll.)
See known issues and report bugs here
- Extract the SA2 Mod Loader to your SA2 folder, launch the Mod Manager, and click "Install loader"
- Extract the SA2 Battle Network archive to the "mods" folder.
- Re-open the Mod Manager if you closed it, or just click refresh if it was still open.
- Find "SA2 Battle Network" and enable it (by ticking the checkbox to the left)
- If you have MainMemory's Character Select mod, disable it if you want spawn points in multiplayer to function correctly.
- If you know how to run a program with command-line arguments, just scroll down to see them.
- In Steam, right click on Sonic Adventure 2, and click "Properties", click the "Local Files" tab, and click "Browse Local Files..."
- Create a shortcut to sonic2app.exe and place it wherever you like
- Right click the shortcut and click Properties.
- In the "Target" box, at the end of the text, add a space followed by the arguments you want (e.g: "sonic2app.exe" -h 27015). Details below.
You must use that shortcut to launch the game in order for it to work. But I know what you're thinking. "Steam has launch options! Can't I just use that?" - but the answer is no. SA2 on Steam will always start the launcher first, so the command line arguments will go to the launcher and not the game.
Note: If you're trying to host and you don't use something like Evolve or Hamachi, you must forward ports on your router for both UDP and TCP protocols (for now). I won't go into detail on how to do this as there are many online resources that give detailed instructions already.
Command line arguments:
- --host (or -h) [port] - Hosts a server on the specified port. When in doubt, use 27015
- --connect (or -c) [address:port] - Connects to the specified address on the specified port. NOTE: As of version 3.2, the format has changed from the original [address] [port] to [address:port]. Be sure to update your shortcuts and stuff.
- --timeout (or -t) [timeout] - The connection timeout in milliseconds. Default is 15000, minimum is 1000. Currently non-functional.
- --no-specials - Disables special abilities in 2P mode entirely. It doesn't synchronize yet, so both players must use it.
- --keep-active - Keeps the game window active. In other words, it doesn't pause when you click on another program while in window mode. Also available in mod form.
- --cheats - Enables teleportation.
- --netstat - Enables network statistic logging. Saves as netstat.recv.csv and netstat.sent.csv
Example: --connect 127.0.0.1 27015 --no-specials
- Toggle-able splitscreen ingame (Press L+R) (DO NOT use if splitscreen was not already on or the game may crash.)
- 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
- Configurable 2player specials (ring count requirements, blacklist, etc; e.g speed up only, 50 ring requirement)
- 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).
On the same token, let me be clear here. MainMemory did all of the reverse engineering. Without his work, this would not have been possible simply because I wouldn't even know where to start with a disassembly and the like. Not to mention the executable had encrypted data which would make it crash if you tried to attach Cheat Engine's debugger... which MainMemory also cracked. The closest thing I got to reverse engineering was finding the input structure of which MainMemory has already documented for SADX (it's pretty much the same).
And with that, I also have to thank everyone who worked on the cheat table, Sonickidnextgen who wrote the (original) socket library and helped me be less derp at programming (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!