Would it be possible (and easy) to modify the engine so it doesn't runs syncronized anymore but, instead, have the simulation run on a server with the other computers acting as clients?
That would solve the issues with Windows/Mac/Linux platforms playing together, right?
Of course that would allow cheating but it would be entirely dependant on the server, only. I remember that in the lobby, there were a server with an automatic bot for matchmaking.
Another Sync discussion
Moderator: Moderators
-
- Posts: 37
- Joined: 15 Mar 2006, 00:40
Your on the right track, however I propose a slightly different idea.
The server would act as a master copy of the simulation and all clients would sync to that master copy. If a de-sync occurs, you transfer every bit of the simulation to that particular client with the game paused for the duration of the resync.
The initial exchange would be a set of checksums for various parts of the game, such as unit positions for Units 1-50, and 51-100, etc.. along with positions for Projectile 1-50, 51-100, etc...
If any one of these checks fails, you send the actual data for that particular set of client data.
The key here is to pause the game and initiate the transfer so everyones simulation is paused and is in the process of syncing.
--
As for the cheating aspect of this debate, you can do the following. You might be able to transfer checksums between clients directly (p2p fashion ?) if you piggyback off of the main Spring chat server. This would only constitute a couple dozen checksums and it would only happen when the server decides to resync.
All the resync stuff would not be done on the chatserver. The chatserver would only be used to verify that the host is not just changing values and forcing a resync on purpose. (i.e. if the host and 2 clients have the same data and client 3 has different data, then the resync by the host would most likely be legit)
The server would act as a master copy of the simulation and all clients would sync to that master copy. If a de-sync occurs, you transfer every bit of the simulation to that particular client with the game paused for the duration of the resync.
The initial exchange would be a set of checksums for various parts of the game, such as unit positions for Units 1-50, and 51-100, etc.. along with positions for Projectile 1-50, 51-100, etc...
If any one of these checks fails, you send the actual data for that particular set of client data.
The key here is to pause the game and initiate the transfer so everyones simulation is paused and is in the process of syncing.
--
As for the cheating aspect of this debate, you can do the following. You might be able to transfer checksums between clients directly (p2p fashion ?) if you piggyback off of the main Spring chat server. This would only constitute a couple dozen checksums and it would only happen when the server decides to resync.
All the resync stuff would not be done on the chatserver. The chatserver would only be used to verify that the host is not just changing values and forcing a resync on purpose. (i.e. if the host and 2 clients have the same data and client 3 has different data, then the resync by the host would most likely be legit)
Indeed, you can be sure every possible argument, idea and implementation has come up in the discussion.
http://lolut.utbm.info/pipermail/taspring-linux/
A few sync threads:
http://lolut.utbm.info/pipermail/taspri ... 00742.html
http://lolut.utbm.info/pipermail/taspri ... 00722.html
http://lolut.utbm.info/pipermail/taspri ... 00810.html
http://lolut.utbm.info/pipermail/taspring-linux/
A few sync threads:
http://lolut.utbm.info/pipermail/taspri ... 00742.html
http://lolut.utbm.info/pipermail/taspri ... 00722.html
http://lolut.utbm.info/pipermail/taspri ... 00810.html