Technical solution to eliminate desync in single-player sessions

Good Posts Mark!
"
qwave wrote:
I will write the damn code myself if he wants it. I literally write code to solve these sorts of issues all day long.


And here we see his true motivation: He wants dev access to PoE's code. Probably thinks that devs have some sort of special powers as well.

Come on, say it: You want to be a PoE dev and are going through a passive-aggressive way of trying to be one. You probably started this thread imagining guys with yellow-bordered posts saying, "OMG THATS GENIUS" and "LETS HIRE HIM SO THAT HE CAN DO THIS FOR US".

"
qwave wrote:
Sachiru: Just because a combat animation plays does not mean the client is not a 'dumb terminal'. It does not perform ANY calculations, at all. It is WAITING for a response from the server. Just because you can move around and click things does not imply that the client is performing any calculations.


So, the moving around is not performing calculations? I thought you said your "deterministic seed", which requires calculations to determine outcomes, included movement, since you were asserting that this "seed" would enable devs to trace invalid simulations where you are supposed to walk to your death instead of using hacks to path away to safety?
"
Sachiru wrote:
"
qwave wrote:
I will write the damn code myself if he wants it. I literally write code to solve these sorts of issues all day long.


And here we see his true motivation: He wants dev access to PoE's code. Probably thinks that devs have some sort of special powers as well.

Come on, say it: You want to be a PoE dev and are going through a passive-aggressive way of trying to be one. You probably started this thread imagining guys with yellow-bordered posts saying, "OMG THATS GENIUS" and "LETS HIRE HIM SO THAT HE CAN DO THIS FOR US".





Sorry but i can't hold my tongue here, what a petty post to make? who would care if his intentions were somewhat motivated towards wanting to see the code?

i didn't realise that the net code to PoE was a fucking national Treasure and so precious, dont get me wrong i love the game, but de-sync WILL be the one thing that makes me quit.

im fairly sure that this thread was made with the best intentions by someone who is finding De-sync extremely frustrating as most of us do, only he has the ability to analyze what exactly is going wrong and what may possibly fix it in a much more technical manner than most.
IGN: EviiLe
"
ImRight wrote:
"
Sachiru wrote:
"
qwave wrote:
I will write the damn code myself if he wants it. I literally write code to solve these sorts of issues all day long.


And here we see his true motivation: He wants dev access to PoE's code. Probably thinks that devs have some sort of special powers as well.

Come on, say it: You want to be a PoE dev and are going through a passive-aggressive way of trying to be one. You probably started this thread imagining guys with yellow-bordered posts saying, "OMG THATS GENIUS" and "LETS HIRE HIM SO THAT HE CAN DO THIS FOR US".





[...] only he has the ability to analyze what exactly is going wrong and what may possibly fix it in a much more technical manner than most.

I wouldn't got that far to state something like this but yeah,
that post was under the belt, more so than Scrotie's typical Ad Hominem.


I am also curious to hear more details from a dev actually working in the field from GGG's side. I value Mark's interaction in this thread and it was really unexpected but it lead pretty much to a draw as OP can't claim to know the code and Mark has not enough insight in it.

I don't expect them to lay out their code (no one should) but an up-date on their efforts to deal with the problematic would be appreciated.
Last edited by Nightmare90#4217 on Nov 18, 2013, 7:20:59 PM
"
qwave wrote:

The snapshot would contain the player's input since the last snapshot, and a cryptographic hash based on the deterministic seed and current timestamp. Basically it's the same stuff that the client is currently sending to the server.


Sorry it took so long to reply, google wasn't its usual helpful self when searching for 'deterministic seeds'

But I think I got the idea; basically server and client both have RNGs and each are 'seeded' with the same value: client pulls a value from its generator->attaches it to a snapshot->server receives snapshot->pulls number from generator->numbers should match.

Is that generally speaking correct?

I can't see how that validates whether the user clicked on the ground or the mob right beside him. Or more to the point, whether the user forged a click.

I'm also having a hard time understanding how you deal with resolution between these 1 second snapshots.

Sure, you can assume the client is sending valid player clicks and button presses, this gives you possibly the exact position and action of the player, but what about the mobs?

At some point, mob position has to be calculated on the server and since mob position is highly dependent on player position would you not have to go back through all the snapshots and calculate mob position?

Would you calculate mob positions on a per snapshot basis? Would you not have to use some sort of prediction to do that? Would prediction not lead to:

Say I clicked to move right in front of a mob a millisecond before the snapshot was taken a millisecond after it was taken I clicked to run away from the mob. What happens for the 999 milliseconds between snapshots? Did the mob one-shot me even though technically I would have be moving away from him the whole time?

Does the client have the authority to say the mob hit me? If it does, could the client not be forged to say it didn't hit me?

How would a seed value give you that answer? Since no validation is performed until the end of a session, how would you resolve this?
Last edited by MeltingPoint#1763 on Nov 18, 2013, 7:20:26 PM
It's refreshing to read posts from someone who obviously has a deep understanding of the matter, especially compared to some of the persons who responded so vigorously with their half-knowledge.

I'd love to get a proper dev response from the main programmers.

I always epxerienced desync in PoE, but since release it's a lot worse than it has ever been before.
"
Asphael wrote:
It's refreshing to read posts from someone who obviously has a deep understanding of the matter, especially compared to some of the persons who responded so vigorously with their half-knowledge.

thank you
For years i searched for deep truths. A thousand revelations. At the very edge...the ability to think itself dissolves away.Thinking in human language is the problem. Any separation from 'the whole truth' is incomplete.My incomplete concepts may add to your 'whole truth', accept it or think about it
"
Asphael wrote:
It's refreshing to read posts from someone who obviously has a deep understanding of the matter, especially compared to some of the persons who responded so vigorously with their half-knowledge.

I'd love to get a proper dev response from the main programmers.

I always epxerienced desync in PoE, but since release it's a lot worse than it has ever been before.

Most participants have proved that they have a high amount of knowledge concerning the topic, not only OP. It is indeed refreshing to read and caught me completely off-guard to see something like this happen in GD.

GG OP, GG Opposition.
Last edited by Nightmare90#4217 on Nov 18, 2013, 7:33:06 PM
MeltingPoint:

"
basically server and client both have RNGs and each are 'seeded' with the same value: client pulls a value from its generator->attaches it to a snapshot->server receives snapshot->pulls number from generator->numbers should match.


Yes, but the most important thing is that both the client and server use these values to simulate the game state and entropy, including mob pathing.



"
I can't see how that validates whether the user clicked on the ground or the mob right beside him.


The mob is guaranteed to be in sync 100% of the time if both the client and server are running the exact same deterministic simulation. So if the client clicks the mob, then he clicks the mob.


"
At some point, mob position has to be calculated on the server and since mob position is highly dependent on player position would you not have to go back through all the snapshots and calculate mob position?


The mobs will be moving during each snapshot based on the entropy produced from the seed. Therefore, both the client and server will know the locations of mobs because they are sharing the same seed and thus the mobs are traveling in the same spots.


"
What happens for the 999 milliseconds between snapshots?


Your game client is creating the snapshots 100% of the time and streaming them to the server. This is the same way the game is currently doing it, that doesn't change at all. The difference is that the client is able to accurately run the 'simulation' without having to receive responses from the server.


"
Does the client have the authority to say the mob hit me? If it does, could the client not be forged to say it didn't hit me?


The client must adhere to the deterministic seed. The seed runs against the game engine, so if the mob hits you, that has to be part of the snapshot. If you send a snapshot without the mob hitting you, the server will compare the snapshot to it's own simulation and validate that you hacked the system. The client cannot forge a snapshot because the server is running the same simulation.


"
How would a seed value give you that answer? Since no validation is performed until the end of a session, how would you resolve this?


The validation can occur anytime that GGG wants. I only recommended the end of the session because it's the most efficient way to do it. The server does not 'persist' (save your new state to the database) until it has validated your snapshot. However, it CAN save the snapshot so that it can be restored/validated in the event of crashes/disconnects/etc.

Report Forum Post

Report Account:

Report Type

Additional Info