Technical solution to eliminate desync in single-player sessions

"
qwave wrote:
"
Yeah, that's definitely a problem. If you allow 5s of delay between action and uploaded event, you can brute-force-search the best (5s-actual_latency) of play possible, and then upload that instead.


Yeah, the server should desync/disconnect the client in situations that involve a lapse in snapshot data. I am definitely not advocating 'offline play'.


How long is your limit? You can search a LOT of permutations in a single second...
"
ScrotieMcB wrote:
"
qwave wrote:
Scrotie, I appreciate your criticism, but you still have a misunderstanding on how this 'pool of numbers' is used. Lets assume your pool of numbers are:
0.52, 0.1, 0.9, 0.33

This means that you would have to fabricate a situation in which these randomly generated numbers are used to generate random numbers in your favor.
As if that's hard. 0.52 and 0.9 are numbers for player damage, 0.1 and 0.33 are numbers for monster damage. You just assign them like that, if you can. Or better yet, assign them all to player damage, and just pretend you kited everything perfectly.

A string of numbers means little or nothing if the client knows the order in which they come and gets to say the order in which events happen.


Your user actions would be logged and uploaded; if that can be done efficiently enough as to not be solved (***) (i.e. very small time window, very smooth updating) then the only way to act as if you kited everything perfectly would be to actually kite everything perfectly. The server would do it's own parallel sim with your actions put in at the times logged, and if the results don't match you get banned.

(***) I still think this part is a bit questionable.
IGN: SplitEpimorphism
"
Then simply don't send anything at all. If the last thing the server receives is whatever action occurred immediately prior to the 'death swing' by the monster, then it can not know what happened next. If the client knows the character died before the server does, then it can stop that data from being sent to the server. Bottom line.


If you don't send anything at all, you will be recognized as 'disconnected', the server can finish the last 5 seconds of the simulation and identify that your character has died. The server should always take over and perform simulations if you disconnect.



"
How long is your limit? You can search a LOT of permutations in a single second...


Even if you search all of the permutations, how many different actions could you take to significantly impact the result? It would be impossible to 'play' the game while using this type of software. Only a bot could take advantage of this, and even if the bot finds an 'optimal permutation' it could still easily result in it's death. This is because it's very difficult to write an intelligent bot with a neural network that evaluate so much data per second. You'll find that 99% of botting software out there is extremely primitive.
Last edited by qwave#5074 on Nov 18, 2013, 1:56:24 AM
"
Tuoweit wrote:
"
qwave wrote:
"
Yeah, that's definitely a problem. If you allow 5s of delay between action and uploaded event, you can brute-force-search the best (5s-actual_latency) of play possible, and then upload that instead.


Yeah, the server should desync/disconnect the client in situations that involve a lapse in snapshot data. I am definitely not advocating 'offline play'.


How long is your limit? You can search a LOT of permutations in a single second...


At best you get a couple billion. Depending on the context that's not that many :).
IGN: SplitEpimorphism
"
At best you get a couple billion. Depending on the context that's not that many :).


Yeah, but then your bot needs to evaluate each next permutation as a result of each action. Consumer hardware is not sophisticated enough to make split-second decisions like this. You would need an extremely powerful botnet to calculate each optimal action, and at this point we're splitting hairs. Eliminating lag and desync would be a huge win in all regards.
Last edited by qwave#5074 on Nov 18, 2013, 2:00:59 AM
"
qwave wrote:
"
Then simply don't send anything at all. If the last thing the server receives is whatever action occurred immediately prior to the 'death swing' by the monster, then it can not know what happened next. If the client knows the character died before the server does, then it can stop that data from being sent to the server. Bottom line.


If you don't send anything at all, you will be recognized as 'disconnected', the server can finish the last 5 seconds of the simulation and identify that your character has died. The server should always take over and perform simulations if you disconnect.



"
How long is your limit? You can search a LOT of permutations in a single second...


Even if you search all of the permutations, how many different actions could you take to significantly impact the result? It would be impossible to 'play' the game while using this type of software. Only a bot could take advantage of this, and even if the bot finds an 'optimal permutation' it could still easily result in it's death. This is because it's very difficult to write an intelligent bot with a neural network that evaluate so much data per second. You'll find that 99% of botting software out there is extremely primitive.


Yeah, that's where things are tricky. You can't really guarantee a smaller window than about a second where a good piece of software might be able to predict the future, or solve for the "best" player actions. Subtracting away the time required to compute and search over outcomes, the window for exploitation becomes even smaller. How much can be done in that window, if anything?

Are these exploits things that bots can effectively do anyway?

That said, this is definitely a way of preventing the really bad hacks, like teleporting all over the map, duping items, or auto-killing every monster you run into.
IGN: SplitEpimorphism
Last edited by syrioforel#7028 on Nov 18, 2013, 2:01:54 AM
Syrioforel: Exactly, these issues are not something that a player could take advantage of, and a bot does not have the computing power to evaluate that many conditions in less than a second. Even if it did find an optimal set (assuming you want to spend ten thousands of dollars on computing hardware), it would glean very little advantage.

I really feel that this is a great solution to the desync/lag issues. Now if only a tech-savy GGGer would respond and let us know if this is feasible given the current state of the game's architecture. ;-)
Last edited by qwave#5074 on Nov 18, 2013, 2:03:47 AM
"
qwave wrote:
"
At best you get a couple billion. Depending on the context that's not that many :).


Yeah, but then your bot needs to evaluate each next permutation as a result of each action. Consumer hardware is not sophisticated enough to make split-second decisions like this. You would need an extremely powerful botnet to calculate each optimal action, and at this point we're splitting hairs. Eliminating lag and desync would be a huge win in all regards.


The :) wasn't sarcastic. A couple billion is very small when you have to perform an exhaustive search.

However, if you're just doing trial and error until you can avoid a crit, or something, it might not be. It depends on how the RNG internal state is maintained.
IGN: SplitEpimorphism
"
However, if you're just doing trial and error until you can avoid a crit, or something, it might not be. It depends on how the RNG internal state is maintained.


To 'avoid' a crit, you would have to roll yourself back 500 milliseconds and re-evaluate all permutations that do not result in a crit. I believe this is virtually impossible. It would take modern computers a few seconds just to perform a single attack. And the 'optimal solution' could easily result in your character's death as a result of the next set of permutations. In other words, 'avoiding that crit' may have gotten your character surrounded by deadlier mobs.
Last edited by qwave#5074 on Nov 18, 2013, 2:06:32 AM
"
qwave wrote:
"
However, if you're just doing trial and error until you can avoid a crit, or something, it might not be. It depends on how the RNG internal state is maintained.


To 'avoid' a crit, you would have to roll yourself back 500 milliseconds and re-evaluate all permutations that do not result in a crit. I believe this is virtually impossible. It would take modern computers a few seconds just to perform a single attack.


Crit chance is usually pretty small, I think if you just tried one or two variants you could improve your chances significantly.

If, say, the RNG state were modified whenever a character moved anywhere, you could try adding a couple of superfluous move commands, and hope you don't get crit this time.

If the RNG state were modified by attacks only, then you could have something predict if the next attack will be a crit or not.

If the RNG state is easy to modify, you can make a small change to get a second roll on whether or not you'll receive a crit. If it is hard to modify, you can predict whether or not you will receive a crit. Both are a cause for concern.

IGN: SplitEpimorphism

Report Forum Post

Report Account:

Report Type

Additional Info