The mod loader version is here!
Before I get to explaining what changed, let me preface this by saying: I need performance feedback. Does it run better or even worse on your system and connection? Are there any bugs present during gameplay that weren't present in the last release build? Please let me know so I can look into it. Also, expect the console to spam a lot of messages. I have this enabled so that in the event of a crash, you can screenshot the console, and I can narrow it down to which packet caused it. Additionally, the connection timeout functionality is gone again. I never took the time to re-implement it after practically re-writing this whole thing.
This version is generally more stable and uses a totally different networking library (slightly modified SFML - details in OP). As a result, it now uses both TCP and UDP protocols. My friend Sonickidnextgen (ImmutableOctet) plans to eventually implement a UDP-exclusive mode, and on top of that, I'll likely implement TCP-exclusive mode (although likely only for LAN play... but why play via LAN anyway? Whatever...

).
As for changes, the most major change can be seen in the last progress video a few posts up. Connects and disconnects now occur when entering and exiting the 2P Battle menu, and it plays the Chao Kindergarten networking jingles while waiting for a connection, when a connection has been established, or when a connection has been lost. The networking is also generally more efficient.
It now also reverts
all code changes made after establishing a connection once you disconnect. Although maybe not desirable, I believe this may affect the --keep-active argument. After disconnecting, it will restore the code to its normal behavior. I recommend using
the mod version if you want to permanently keep the window active.
Another nice thing is that you can always have the mod enabled if you please. You just have to enable the console when you want to play online, and then run the game with the command line arguments described in the first post. As for more technical stuff, it now sends less, larger packets as opposed to many small packets. In theory this should speed things up on the receiving end.
There's also a fun little thing I added. Scale is now synchronized, so you can become giant Shadow if you like. =P
The new usage and installation instructions are all in the first post.
Download:
Version 3.0 (11/29/2014)
There's your stinkin' download. Now here's a bit (more) of a monologue =P
As it stands now, the overall functionality is the same as the last release version, ignoring the general polish. From this point onward, I plan to utilize the mod loader more heavily. I can use it to hijack functions to do specific networking actions. For example, I could hijack the "load level" function (wherever that is!), and tell it to send a "load level pls" request to all the other clients, at which point they would all simply call the function.
I also plan to rewrite the input handler
again. As it stands now, the input handler imposes a 1 to 2 frame delay on every call to the receive function in which a button press was received (which can cause some minor desyncs). The reason for this is that I have to:
- Synchronize with the framerate if the program doesn't already happen to be in the right place at the right time
- Take the newly received held buttons, compare to the last received, and write the difference to the "just pressed" buffer.
- Then I absolutely must wait one whole frame, and immediately after, clear that buffer. Otherwise, the game will think I'm spamming button presses.
I could get around this by doing a bunch of threading trickery, but I'd honestly rather not. That would be such a hassle. Instead, I plan to hijack the controller update routine to do my bidding. The idea is to just trick it into handling those buffers on its own without constantly wiping them unnecessarily (which it does, by the way--rather annoying!).
And in the long run, whoever is the client (not hosting) will be handled as a real player 2, even on their instance of SA2. This'll help make way for
porting to SADX later.