Sonic Adventure 2 Mod Manager
Forums / Sonic Adventure (DX) / BetterSADX + some requests for mod approval. Michigan, USA cheatfreak47 6 Feb 2017, 05:20. This mode is literally the 2004 port, but with the SADX Mod Manager pre-installed, coming with Input-Mod, Frame Limit, and CCEF. Mar 06, 2016 So it's been a while since I played SA2. I haven't played with the mods, but I figured I'd start over the game now I have a new desktop and make the game a lot more fun with mods. So I went to download the mod loader and all the mods I want, but when I open it up, it says, DataDLL.dll could not be found, unable to determine installation. Then I clicked continue and was able to access the menu. Some mods in rar (one of them is somekind of supershadow as sonic)- modchars.rar Yellow Sonic- SONICAMARELO.rar Metal harbor as emarled coast- Metal harbor rename metal harbor 1 has beach01.pvm, rebame metal harbor 2 has- beach02.pvm, rename bg harbor has bgbeach.pvm.
Allow me to copy/paste from the hacking contest entry:First of all, 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 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!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.
I've since upgraded my connection so I can no longer guarantee that it'll stay working at that speed. It by all means should, though.Requirements:.(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 application.).An upload and download speed faster than about 1KB/sec. MAYBE 2KB/sec.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)Screenshots:Local testing:(New video coming eventually)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.Also, disable MainMemory's Character Select mod if you want spawn point swapping to work correctly.Command line arguments:.(These two 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 on 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. Deprecated.-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 =PPlanned:.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 Fixed with menu synchronization.Something everyone has wanted foreverDownload:.Note: Due to the nature of the program, don't be surprised if you get false-positives with some anti-virus software. I promise it's safe though! Really!.(end copy/paste with some edits)Edit: Right, I should mention that this is likely compatible with most hacks of SA2 out there (e.g SA2 Pro) as long as both players are using it.If you have any questions as to how this works, don't hesitate to ask.
I'd be glad to explain how things work! And sorry for the huge post =PFeedback is also appreciated. The version number is now 3.2.So, discuss! What do you think of this awesome netplay mod? Woohoo, update!. The program now checks version numbers between server and client to ensure they are the same in order to avoid shenanigans.
The program now actively checks if SA2 is running. If it ever crashes, it disconnects you and the client from each other to ensure shenanigans don't occur.
If it manages to detect that it crashed, that is. It doesn't always work. Added teleport functionality for testing reasons which teleports you to the other player. Button combo: inspoilerY + D-Pad Up/inspoiler.
Fixed a bug with the reliable packet handler AGAIN where it would only send the first byte of a message and cause the program to be very good at counting IDs. (1, 2, 3, 4, 5, 6, 8?!). Send all menu related variables within the first 5 seconds of connection time in case a connection was re-initialized while deep within the 2P menu. There are some other weird issues to go along with this though, so I don't recommend it. In-game time is now synchronized every second with the client by the server. You can now safely play without disabling the time limit.

Battle options menu selection is now synchronized. Always synchronize menu selections when a new menu is entered.
Re-wrote command line handler. Details below. Fixed Mech HP synchronization, which was evidently broken. Actually trying to play in shooting mode still sucks, though.
Properly synchronize upgrades and powerups. (Powerups would always send what you had last, not currently; fixed now). Time Stop is now properly synchronized. Added a keepalive system, so if the other player's client crashed or is exited, yours will disconnect after the default of 15 seconds. This can be overridden with the command line argument -timeout or -t, followed by the timeout in milliseconds (minimum 1000). Pause menu selection synchronized.The new command line stuff has been written in such a way that you can actually use it in addition to the console input.
This way, you can run the program with, for example, -keep-active, and it will then actually ask you if you're hosting or connecting, for the ip/port, etc. If you use command line primarily and you miss an option, it'll ask you for the missing options in the console as well.As a side note, if your console for whatever reason flashes red and beeps at you, pause the game, don't press anything, and try to snap a screenshot of it and post it here. It'll say something about a 'SCREWYOU' message. (Annoying bugs)Download here. The version number is now 2.5.Edit: Small oversight. Running the executable with just -no-specials doesn't actually work because I derped while checking the count of arguments.
Just do something like '-no-specials plz', as long as there's more than one argument, and it'll work fine.Also, Quick bugfix. I fixed the argument count oversight, and now it ACTUALLY WORKS on Windows XP. Which was also an oversight. I also did some minor cleanup here and there, but it doesn't really affect anything.Download. The version number is now 2.6.Also behold the power of. Here's another small polish update:. Fixed the random Chao Garden bug.
Details below. Fixed an issue with spindashing. The spindash timer is now synchronized. Details on this also below. Attempt to revert changes made to the game's code when disconnecting.
The functionality has been there for a while, just not put to use.To fix the Chao Garden bug, I changed the way I check for player changes. Before, I was relying on the level number to change so that I could re-initialize the (internal) players only exactly when necessary.
The problem here is that it doesn't always change to 0 when exiting a stage to the menu, so I'd have to do a bunch of trickery to change it to 0 so that the player objects would realize they shouldn't be 'alive' right now. Every so often, things would get mixed up. And as you may know, stage 0 being the Chao Garden was to fix a bug in the actual game which would allow you to go to the test stage, hence Chao Garden.Instead of doing that which was kinda dumb in retrospect, I'm just checking the pointer to each player every loop to see whether or not they're initialized, or if they've been re-initialized (pointer change). No more mixups and no more Chao Garden bug!As for the spindash bug: It seems the game would get confused, and sometimes after releasing the spindash button, the receiving end wouldn't always change the timer to 0 like it should (More 0!). So that means next time you pressed B, it would try to spindash, since it always happened to be 24. This would cause desyncs when spinning to gain speed, and then cancelling it, because instead of cancelling on the receiving end, it would just roll up and continue rolling on its merry way.
It would also cause the spindash trail left behind to be halfway in the ground. The solution was rather simple, that being to send the spindash timer when you're playing as Sonic/Shadow (and Metalsonic/Amy just in case you use the spindash hack for them =P). I figured it'd be a little more tricky to fix than that, but evidently not. Version 3.1 has been released, and it's open source! Latest release and code. From now on you'll be able to find archived releases on the GitHub repo. The latest version will always be hosted on my website.Note: This version requires a newer C redist than before.
It's linked in the main post. And make sure you update your mod loader!
It's using new events that have just recently been implemented.Changes from 3.0:.Camera independent input.Input rewrite now in place using OnInput and OnControl events. No frame latency!.Partial Emerald Hunting support (see #12 and #10).Shooting is now much more playable, but not perfect.
See #11.Synchronized player damage, HP and ring counts via function call hooks; never desync again!.Teleportation only allowed with new flag from host, -cheats.Network statistic logging now available with -netstat (logs to CSV in game directory).Stage load lag compensation. The player who loaded first will wait for the player who is behind.Stage change synchronization. Even if the menu desyncs, you'll still go to the same stage.Random seed synchronization (although it's 0xDEAD0CAB 99% of the time anyway).Console window now optional, but still recommended.Overall accuracy and stability improvements (as well as some newly introduced instabilities! Fun!).And of course, open source =Pcan't be bothered to make those issue numbers clickable; just go to the github release page for thatYou can report bugs and see known issues!I'm probably forgetting some things given that it's been over a year since the last release. I can't believe I've been sitting on so many improvements for so long (which isn't to say all of the improvements listed above are old, it's just that some of them are, like the new input handler).For this version I wrote my own trampoline implementation which allows me to override functions but still call the originals, and that has been immensely useful for things like synchronizing HP, ring count, damage, etc etc. My implementation can also be found in the SADX Mod Loader right now, and I plan to expose it to mod developers in both mod loaders sometime soon. If anybody needs it in the meantime, just copy the source files =PAnd emerald hunting now works!
With a catch. It will only work the first time you enter a specific stage. If you try to replay that stage without first exiting to the main menu, they will no longer be synchronized. If you play best 2 of 3 however, the stage will usually change after a round, so it works out. I got this working entirely accidentally though. As it turns out, upon first stage load, the emerald manager will run through a for loop calling rand because.
Sa2 Mod Loader Not Working
It's relative to the frame count, though. Specifically, FrameCount & 0x3FF, which is anything. New version (v3.2)!.Code changes required for networking are now only applied on connect, and reverted on disconnect.Local settings are now restored after disconnecting from a server with different settings.Disabled built in cheats (Yep! Leftover debug stuff) by default.Removed -keep-active as this is now built into the mod loader using a more efficient method.Implemented configuration file support.
Will detail this soon.Command-line parser now only accepts addresses in the format 127.0.0.1:27015 instead of 127.0.0.1 27015.Servers can now be password protected by using the -password parameter or with the Password field in the configuration file.Next stage synchronization implemented. Any time in a best 2 of 3 race where you ended up in the same level when it changed was just a coincidence until now. I'm baffled.Improved netstat by including estimated overhead.Implemented preventative measures for spawn time desynchronization on round start.Fixed a bug where music would fail to start, or start and then stop, at the beginning of a round (see #23).Fixed a bug which would cause upgrades to go missing on the receiving end. (fixes #25).Fixed an oversight which would send HP changes for non-mech characters.Implemented character ID synchronization - Random Battle now works correctly. (fixes #13).Implemented synchronization for level groups which can affect certain aspects of the game.Improved analog accuracy a bit. (see #19).Fixed emerald spawn location desynchronization for good by simply setting and synchronizing a custom seed and disabling their stupid rand in a for loop.
(fixes issues #10 and #12).Implemented proper powerup synchronization (shields etc) (fixes #29).Implemented sanity check for splitscreen toggle (see #28).Re-worked the way damage is handled. (see #33 and 455e8ed36909dc94da153aaae7a57d)For clickable issue numbers, see the release page on GitHub linked above.Edit: Oh yeah, important detail. The command line parser has changed a little bit when it comes to connection addresses. Instead of ip port you can (and must) now do it with the more natural format, ip:port.