Technical solution to eliminate desync in single-player sessions
Good Posts Mark!
|
![]() |
" 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". |
![]() |
" 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? |
![]() |
" 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
|
![]() |
" 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
|
![]() |
" 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. |
![]() |
" 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
|
![]() |
" 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:
" 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. " 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. " 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. " 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. " 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. " 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. |
![]() |