Quote
And when there is an inconsistency between clients, a drop will happen, just like any other unsafe action. The only difference is that these two actions don't immediately force the drop, not because the inconsistency is acceptable, but because the inconsistency hasn't yet caused the game states to be different between clients.
Yes, this is almost always the case, but I think we can change which data is possible to send via these semi-safe actions, whenever the data is revived/sent, you would know a local condition must have fired.
Clearly i'll need an example to illustrate my still-vague thoughts:
- Force humans to send the data only when a condition is detected (really an intermediate goal that would make more useful methods worth exploring):
1. Place bunker somewhere, ally host A and host B, set bunker to invincible on host A
2. When local EUD occurs, set bunker to invincible on host B
3. Tell host B to select the marine and right click the bunker... have it somehow IMPOSSIBLE to issue the command on host B until invincibility is set (perhaps issuing a right click on some unit would do nothing under the non-unique invincibility's/alliances (because nothing would occur, no command sending would be necessary))
4. When command occurs it will perform an identical action on both clients, that could not possibly occur without the local EUD firing invincibility (so when the action occurs, you know to perform global actions)
^-- this is me brute forcing improbable possibilities, I don't actually expect stuff like this to work
Quote
I don't understand this bit. Are you suggesting we somehow detect the desynchronization between clients before the game does? That is quite impossible. We can't detect desynchronization across clients because the triggers we write will always tailor to each client individually and assume the data is the same across all other clients.
I don't like the word impossible, nor do I think you're justified in using it in this context namely because the noticeable part of desync occurs consistently about 2 seconds after data is misaligned on the hosts
Here's how my imagination goes with synchronization:
- data that is to be checked for mismatch is streamed from/to both hosts (likely via UDP to save on what used to be, precious bandwidth)
- both hosts line up the data and drops all the sections that are identical, and then requests any sections that were missing (now via TCP) or were misaligned this time
- if any sections still don't match up, the host that detected the mismatch sends a desync message and stops communicating with every host he didn't match all his data sections with
I would contend that it's entirely possible to detect that the game is about to try to double check data for mismatch, and repair the relevant data by, say, moving a unit back to a static location on both hosts; unless you know something I don't (which i'll bet you do )
^-- again, working with improbable possibilities
Quote
If there was no latency at all, the game would lag each time a command was sent until everyone was able to receive the command, which would essentially lead to waiting on the slowest horse.
Latency is very tricky in Starcraft...
- In-game latency changes tell every hosts to change their local latency values, however...
- Latency is not synchronized (as something like health would be), that is to say: two people can play with different latency's without desync (hackers can theoretically play on Lan-Lat, while forcing everyone else to be on extra-high lat)
Because of the above I don't think that latency works quite in the way you described (waiting for everyone to get the commands, then firing them) since the hosts must not work in harmony
Post has been edited 5 time(s), last time on Apr 3 2012, 6:06 am by jjf28.
TheNitesWhoSay - Clan Aura - github
Reached the top of StarCraft theory crafting 2:12 AM CST, August 2nd, 2014.
Reached the top of StarCraft theory crafting 2:12 AM CST, August 2nd, 2014.