Technical solution to eliminate desync in single-player sessions
" Qwave man, your passion for helping fix the problem is awesome, but you might want to take a few breaths and step back for a bit. You had the right mindset going in, but as a software dev yourself you should know full well that if someone on the inside tells you (as someone on the outside) that your basic assumptions about how the software in question functions are flawed, you should know to accept that and go back to the drawing board. It doesn't mean it was a bad idea, or that the principles you outlined are wrong, but if Mark says they won't work here, you've no choice but to accept that. It doesn't mean you don't know what you're doing, or that you 'lost' an argument somehow, it's just a reality based on the fact that your analysis of how PoE functions is, by necessity, based on incomplete information. I'm sure you wouldn't have taken the time to write all of this if you didn't love the game. Mark loves the game too, man. We all do... :) |
![]() |
MeltingPoint:
" 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. " They need to be taken every second or so. Currently the game sends data way more frequently, so my proposal would cut down on the data strain a lot and reduce the amount of bandwidth required, due to compression. " The server will verify that the snapshot happened by comparing the deterministic seed to the timestamp/input. This proves the authenticity of the snapshot. " No, they could validate each snapshot sequentially without the others in the set. " They already store all of this data on the server, so this wouldn't change at all. |
![]() |
Antiquarian: Mark_GGG admitted that he is not an authority/expert on this topic. His answers demonstrated a lack of understanding on deterministic seeds and their role in synchronizing. I would take a step back if he provided a shred of technical evidence on why a deterministic seed is unfeasible.
The only way this is going to get fixed is if the community aggressively pursues a solution with technical proof, white papers, and citations to back it up. I will write the damn code myself if he wants it. I literally write code to solve these sorts of issues all day long. I know there must be other professional developers in this community that can provide technical feedback. ScrotieMcB: Most software engineers like myself are highschool dropouts. I'm a .NET developer so most of my time is spent in the Microsoft stack (hence my C# snippets), and some of the brightest minds in the industry have no college education. Outside of writing code, PoE is the only other thing that occupies my time. After several desync/hardcore deaths, my programming hours are starting to skyrocket again. I guess quitting PoE is for the better. ;-) I noticed some of your posts in the past regarding desync. You seem to be one of the only other outspoken members of the community on this matter. Last edited by qwave#5074 on Nov 18, 2013, 7:15:23 PM
|
![]() |
Just fix the bloody desync already. If Qwave's suggestions are unfeasible, fine, find another way to fix it. Just fix it.
IGN: Ironmallet
|
![]() |
" Link doesn't work. Seems the manifesto posts got hidden when 1.0 was released. New Year's Resolutions:
- Chicken Nuggets - No More Bullshit |
![]() |
" This post on the Nexon forums seems to have the relevant GGG post copy-pasted in regards to their own discussion: http://dragonnest.nexon.net/community/forum#%2Fshowthread.php%3F1001071-Client-server-Action-Synchronisation Last edited by Antiquarian#7645 on Nov 18, 2013, 7:28:35 PM
|
![]() |
Chris' development manifesto is completely wrong, and does not reflect the modern approach to network architecture in online games.
" Modern online games use deterministic seeds to allow both the client and server to generate the same results. The server can still authenticate this without sending stateful packets back to the client, which are causing desync. " This does not mean people can cheat. You can allow the client to simulate results WITHOUT fully trusting it. This is why the client should send snapshots. As long as the snapshot is accurate, the server will never need to resync the client. " This is a huge flaw, the packet should have a timestamp and hash so that the server's simulation can align with the client's latency. " You shouldn't have this problem in the first place. The client could easily have simulated this with a seed. You don't need to tell the client he hit the creature. " Big problem here. Latency does NOT need to impact pathfinding in this manner! If the server and client are both running the same simulation, the server can validate the pathing as accurate based on the seed + timestamp. " The client DOES wait for every action from the server, and it DOES feel terrible to control! " Wrong, improved resync code involves no resync code at all and a deterministic simulation. " Other games don't appear to have the same problems because they are using the architecture I have described. They do NOT use a 'wait until server responds' method, all RTS games validate the game state in the manner ive described. " Desync ruins the hardcore experience. " You don't need to experiment, the proven solutions have been part of the industry for a decade now. " Pardon my language, but 'no shit'. This is why re-syncing is not a solution, it's a band-aid. Last edited by qwave#5074 on Nov 18, 2013, 7:42:38 PM
|
![]() |
" The client is not a dumb terminal, YOU are the dumb terminal. A dumb terminal does no calculations locally and updates status. Because of this no-simulate behavior, it CANNOT make decisions that are inconsistent with server state because it is waiting for server state, and as you stated, not performing local calculations. Computing 101: In case of delay between a dumb terminal and the server, what does the dumb terminal do? It WAITS. It does NOTHING. At most, what you would have seen would be a screen freeze while the client is, according to your definition, UPDATING game state. I find it amusing how a guy with supposedly years of experience as a developer does not understand the concept of what a dumb terminal is. |
![]() |
"Ah, I must be able to see them due to being on a staff account. I'll remove the link, since it's not useful to most viewers. | |
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.
|
![]() |