Technical solution to eliminate desync in single-player sessions
" Why is it that so many people read the manifesto and heard “we can’t get rid of desync without giving the client more potentially abuseable responsibility”? Did you not read the part where the Chance to Hit and Stun mechanics are basically the root problem? Why is it that no one ever discusses why these two “features” are still in the game?????? New Year's Resolutions:
- Chicken Nuggets - No More Bullshit |
![]() |
I can ensure that non-integer math can be *easily* made deterministic, expecially in a game as PoE where precision is not an issue. It is not important if i round 1.5 to 1 or 2, as long as i choose to always use the same method. The issue is not the precision, but reproducibility.
For scientist reproducibility is very important, there are a lot of libraries/literature about how to ensure that, in various enviroments. I insist on that because i think that the way of determinism has not been properly taken in consideration by GGG when designing PoE. This suspect comes from some post of Rhys in this thread and most of all because in the sync-manifesto determinsim has not ever been taken in consideration/described, even if it is a well known and used method to handle complex online games. Roma timezone (Italy) Last edited by HellGauss#6525 on Nov 21, 2013, 7:40:13 PM
|
![]() |
" Didn't we discuss this determinism issue before, Professor? Yes, in the idealized mathematical realms of your specialty, I've no doubt you can *easily* make any calculation as deterministic as you so ordain. Unfortunately, PoE runs on non-deterministic hardware simulators in the unpredictable chaos of asynchronous online communication. And it's been designed and programmed by engineers rather than mathematics professors. As a result, its implementation has evolved over an extended period of testing and refinement, most likely with an inadequate amount of armchair pontification. |
![]() |
" I did several times earlier in the thread! IGN: SplitEpimorphism
|
![]() |
" I'm no where near your development skill or whatnot. I'm just a Amateur PHP coder, nothing special. But... Couldn't the client send over OS info (If Linux, or Windows, or XXX) and then just calculate the floating point numbers for each IF on the server? Then the server could have different calculations for each IF function, then it does the function and spits out the right number? Just a thought I had, sorry in advance if it's stupid, rather say something than nothing! :) "Good thing they nerfed the carto, it wasn't fun to find one in every map." - Haborym Last edited by monkuar#2123 on Nov 22, 2013, 12:09:28 AM
|
![]() |
" You know, lots of people can do math and engineer software. IGN: SplitEpimorphism
|
![]() |
" It seems that everyone who discussed, except you, understands that the game is deterministic. That is, with the same random seed, the same player input at the same time and the same fp rounding (which can be achieved as there are many games that have achieved deterministic fp behavior, as can be seen in a blog post I have linked a page ago), the game will come to the same result on two separate machines running it. |
![]() |
Fuck it. (Still not responding to qwave though.)
"You forgot a big one: not just the same player input, but at the same times. This is a huge problem, because latency is not deterministic. (Well, in a way it kind of is, but we can't expect the GGG servers to be tracking all of the traffic on the entire Internet, much of which is hidden behind firewalls anyway.) Which means: in order to make the system fully deterministic, you need to know the precise time at which input was entered. This is possible, but it involves trusting client timestamps. I've previously covered the topic of trusting client timestamps at great length, determined it is a fucking stupid thing to trust, and will not debate that topic further. The proper course of action is to not trust client timestamps and to process client commands as they are received. However, just because a system is not fully deterministic does not mean that making predictions more deterministic is a bad thing; actually, desync would be a lot less likely to occur when the only variable is latency, and does not include waiting on the server to provide random number calls. And, in general, the stuff about random seeds making random number generators deterministic is dead-on, and should be applied. However, we should accept that latency is non-deterministic, that a fully deterministic system is impossible without unacceptable security lapses, that we therefore cannot rely on client calculations as valid, and should continue to trust the server, not the client, in terms of the accurate gamestate. The only security consideration with providing the client with seeds (making RNG deterministic) is the consideration of how exploitable prior knowledge of said RNG would be for the client; since the client has the seeds in advance, a hack could know the results in advance. For something like critical strike chance, probably bad; for things like monster behavior, "does this Rhoa charge you or not," probably not that bad (a little more exploitable when it's "does Dominus use Soul Stream or Touch of God next?" but those moves are kind of telegraphed anyway). Since it's the second type which leads to the most desync situations (issues with monster position due to skill use), I'm in favor of allowing the client to be able to predict this in advance without depending on the server. In other words: make RNG in monster AI deterministic, leave combat math on the server. When Stephen Colbert was killed by HYDRA's Project Insight in 2014, the comedy world lost a hero. Since his life model decoy isn't up to the task, please do not mistake my performance as political discussion. I'm just doing what Steve would have wanted. Last edited by ScrotieMcB#2697 on Nov 22, 2013, 3:16:40 AM
|
![]() |
" Scrotie, I did say same player input at the same time. No, i'm not forgetting that, and yes, I understand the risk of trusting client timestamps. I just don't think the impact of possible cheats will the that big, and the calculations of said cheats difficult enough, for it not to be too severe. But then again, I don't race, and I prefer solo play, so I can see that this system might (and given GGG's focus on races, would) not be acceptable for those that race or prefer party play or care about ladders. However this is a possible solution to desync, and i'd like it's pros end cons understood before dismissing it, and as I said before, I feel there's some misunderstanding in Rhys's position. Regarding making monster AI deterministic, I believe it already is. I noticed it by getting desynced while running into a room with mobs. Lets say you are outside a room with mobs. You run in, and then out to lure them. But due to desync, you only run in on the client, not on the server. However, on the client the mobs do react to you running in, even if they stand still on the server, as witnessed when you try to attack them end get resynced into the room. So my guess is that the client currently has the seed for monster AI and doesnt wait for the server to start monster attack. |
![]() |
" You can be actually be surprised to know that succesful games are often designed by mathematicians. (see e.g. MtG). And, BTW, my degree is on Civil (structural) Engineering, but i always focused my research on theoretical aspect of engineering. @Scrotie You do not need to know the precise time at which input was entered, you need to know this time with respect to the beginning of the instance. This is not absolute time, but relative. I would add that you should make this time discrete (1/10 or 1/50 sec or 1/100 maybe) so that the timestamp is basically an integer number. @RogueMague Ok I understand your point, you cannot turn non-integer math to deterministic because there are no fast way to calculate Sin(x) other than using the built in function of a processor. I strongly suggest to update your abacus to a serious device. Roma timezone (Italy)
|
![]() |