Retera / WarsmashModEngine

An emulation engine to improve Warcraft III modding
GNU Affero General Public License v3.0
192 stars 37 forks source link

Can't play mutliplayer without using command line #11

Open Retera opened 2 years ago

Retera commented 2 years ago

We need a UI for normal users to have access to the multiplayer feature without using the command line to set it up.

You can see how this would be fun: https://www.youtube.com/watch?v=2YDPQW7uyQ8

onlyreportingissues commented 2 years ago

Hey there,

just asking out of curiosity, but is it possible to include some kind of compatibility feature that enables one to play with the W3Champions people on their Flo servers using the Warsmash engine?

Even if it was only possible with Warsmash to Warsmash & not crossplay, it would still be a beautiful feature to have.

You can check out the Flo project here: https://github.com/w3champions/flo

Edit: Maybe W3Champions can be forked & adjusted to offer another ladder that only focuses on Warsmash? Like a copy of it that co-exists with the difference that it's focusing on the Java version.

berserkingyadis commented 2 years ago

This sounds like a potential new issue but ill answer this nevertheless from my noob perspective:

Highly unlikely given that: a) to keep it fair warsmash would need to 100% fit the behavior of the official client which is very far in the future b) since this is a open source project it could be compiled with all kinds of fixes or cheats that could give players an edge in the competition and it would be on the w3champions people to validate the game version of each player and they probably got their hands full without a new "client"

Retera commented 2 years ago

I would even go farther than what @berserkingyadis said, to say that Warsmash 100% fitting the behavior of Blizzard's game client is not only "very far in the future" but actually simply not possible or not within the scope of this project. In order to do that, the entire project would need to restart from the ground up with a different philosophy. To achieve that, you would need someone to create a system that exactly matches Warcraft III. Warsmash doesn't, and it won't. I can invent an experience that might feel similar and look eerily similar, but it's not the same. As just one example, I don't know how to interpret what the Orientation Interpolation setting of a unit should mean. In almost all other cases in Warsmash, I invented the meaning of things based on how I felt using Warcraft III: World Editor for years and based on my ideas for how things should be. But with the Orientation Interpolation setting stored in each unit, although it evidently affects the unit turn rate, the exact information for how it does so is information that I do not have.

As a matter of principle when writing Warsmash, instead of trying to somehow obtain Blizzard-only information about how the Orientation Interpolation worked in their game to define unit turning, I simply made something up: https://github.com/Retera/WarsmashModEngine/blob/ba2eb05207e8a7543076c6c48b3fbe2f296f8c00/core/src/com/etheller/warsmash/viewer5/handlers/w3x/rendersim/OrientationInterpolation.java#L8

You can see this is already a really arcane table of numbers that I made up. And in many cases these numbers produce similar turn rates to what feels good for when we load Blizzard Warcraft III assets onto the Warsmash engine. However, these numbers are not the originals from Blizzard -- indeed, there is probably not even a table of this form in Blizzard's engine -- but I don't really know, and I don't have any time efficient way to find out, so it's outside the scope of my interest to care. There are also other cases in Warsmash, such as how unit collision is processed via a quadtree (Warcraft III probably used a grid, maybe I will change Warsmash to a grid later). And pathfinding on Warsmash is slower and probably a completely different algorithm than what is used on Blizzard's Warcraft III.

These are just a few examples, by my point is that even if I had infinite development time or a team of dedicated and helpful contributors willing to do whatever I asked, matching 1:1 the behavior of Warcraft III is simply not within the scope of what interests me and would take a prohibitively long time to do given this codebase as it already exists. And, because multiplayer on this kind of strategy game is typically a parallel simulation and lock step solution, not matching 1:1 to the behavior of Warcraft III means that we can never play multiplayer with it.

So, the only case where Flo would be relevant would be Warsmash to Warsmash play, not with cross-play to Warcraft III since cross-play will never happen. But even then, to host Warsmash across Flo would require Warsmash to use the same network protocols. I am not familiar with the structure of Warcraft III's network protocols; if you have seen the recent video of Warsmash multiplayer network gameplay, notably the code running in that video uses my own network protocol to communicate. So, if there was ever going to be a future where Warsmash would connect and play on an existing server system like that, Warsmash would probably need a lot of patching to do it. However, unlike the impossibility of achieving 1:1 likeness and cross-play with Warcraft III (impossible because in many cases no one on Earth outside of Blizzard actually knows how Warcraft III works), connecting to a server like Flo is possible as long as Flo is open source so a developer could read through how it works and determine how to connect to it. Based on your link it looks like Flo is open source and maybe using W3GS protocol, although I do not have extensive experience reading Rust lang and I did not spend very long looking through your link yet. Someone else suggested that Warsmash should use W3GS protocol so that Warsmash could connect to PvPGN servers too, but I didn't do that yet because I am not familiar with the details of the W3GS protocol and adhering to them would likely take longer than inventing my own stuff. Maybe if this interests you, you could fork Warsmash and make a version that communicates with the W3GS protocol.

In summary:

Short Term: No, none of what you asked will happen.

Long Term: Maybe Warsmash will be able to play together on a Flo server with other Warsmash clients, but they will never cross-play with Warcraft III clients.

onlyreportingissues commented 2 years ago

Long Term: Maybe Warsmash will be able to play together on a Flo server with other Warsmash clients, but they will never cross-play with Warcraft III clients.

This sounds very promising. Unfortunately I don't have any programming skills, but it's good to know that this is an option that could be considered in the long term.

tdauth commented 2 years ago

Hi, I would love to see multiplayer games were players can join a running game. This would be an incredible awesome feature which Warcraft III does not provide. I have a map in which the games can take several hours and joining/leaving players would be cool. Savecodes alone are not the same since I won't store ALL map information in a savecode. Changing levels together in multiplayer would be awesome, too since you could play something like the bonus campaign together without rehosting it in the lobby.

Retera commented 2 years ago

Would probably be best to file your request for dynamic game joining into its own github issue instead of hijacking this one.

Because of the nature of lock step, joining a running game would likely amount to pausing the game, saving the game, sending the save to the new guy who wants to join, then getting him synced into the same lock step simulation state. I think this would be rather complicated to do, and I am going to focus on making sure the engine is able to do multiplayer at all first, before I try to do something more advanced like that. But feel free to modify the engine and add whatever you want and make pull requests out of it if you think you have a really good feature, etc.