Technical solution to eliminate desync in single-player sessions
" Regarding practicality, that's for GGG to say, and I seriously doubt you can say if it's practical or not, unless you are the lead developer of PoE. Regarding "very few rare games" - every game that allows you to view accurate replays, and that's most of RTS games these days, rely on fp determinism. And as for "If PoE for example, runs their servers on different OS's with different CPU's, you can pretty much forget about any FP determinism", just some examples of games that run on different OS's and CPUs. "Supreme Commander, Full Spectrum Warrior 1&2, Battlezone 2 all the games from Relic etc…" Source: http://gafferongames.com/networking-for-game-programmers/floating-point-determinism/ Btw that source is linked in the article we're discussing as well. |
![]() |
" [/quote] " Anything and everything we have to say on the subject is not for us to say. request thread lock 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
|
![]() |
" Considering Rhys has stopped responding, and that GGG hasn't done FP determinism already (even though desync is quite an issue for the game), its a very good assumption to say that its not practical for GGG to do it " Actually thats false, you don't need FP determinism to deliver accurate replays, you need FP determinism to deliver efficient replays, there is a very big difference. Games like DotA2 are not FP deterministic, and they have proper replay mechanisms " Completely irrelevant to what I said, but nice try |
![]() |
delete, dp
Last edited by deteego#6606 on Nov 22, 2013, 8:23:07 AM
|
![]() |
Floating point math != non-integer math.
If Floating point is an issue (and actually i believe it is an issue), then use fixed point math. Just write a few line of code to overload the standar operators +,-,/,*. For square root it is sufficient to implement a base-2 version of an algorithm usually teached at primary school. For sin/cos and trascendental functions, since 10digits precision is not important in PoE, you can precalculate a table of constant values and then interpolate using linear (or maybe quadratic) taylor expansion. As SkyCore point out, the only issue that requires some brainstorm is security. What actually does the proposed method allow to the client more than current implementation? How can be reduced the amount of extra info that a player has? I remark that player!=client. The client is a machine that is very fast, while player has some lag in his brain (a few 0.1sec). The 2 main things that proposed implementation allow with respect to current one are: 1) The client knows the result of rolls 2) The client can somewhat 'undo' its commands Point 2) however is very limited: by proper implementation, it can be easily achieved that the undo are allowed only in a few seconds window, related to a tolerance factor of latency the client is allowed to stay in, and making the server update the seed with a few seconds frequency. And if a bots abuse of this feature, it would be probably disconnected because it no longer has the lag-security factor. Concerning the death avoidance by log-out, it is an issue in the same way as the alt-esc is an issue now. I can fake a disconnection in both architecture. Point 1) may be designed that it only affects client (=bots) and not player. By making the result of rolls depending also on the game play (e.g. player movements, skill cast, etc) in a way variable each 0.3 seconds, it could not be easily exploited by a human. If this interval is too low (say 0.01 sec instead of 0.3) it may be exploited by an automated game assistant without alterating the gameplay experience, so it should be avoided. Another point: how much does a bot programmed by a reverse-engineering hero take advantage from this system? We already have bot, and we already can overwrite some thing as the light-radius. Maybe with this system the bot will farm 25% more (andavarius is better...), and not 100 Exalt/day: i find it acceptable. Consider that with proposed implementation also a standard player will farm more, because of less difficulty on controlling his avatar. I do not believe that a bot can play better than a skilled human, it can only play 24/7. Last point: engineering issue and time to implement the system. I always said that it is not so difficult: it is actually easier than handling syncronization like now. This does not mean that it cannot be *very* long. Of course it is GGG internal issue to discuss about that, but i would like that they discuss it. I'm pretty sure that the determinsm has not been properly taken in consdieration by developers. Whatever GGG decison, do not expect to see this method implemented before PoE2.0. Roma timezone (Italy)
|
![]() |
" Just because Rhys stopped responding, and because it's not done yet, does not mean it's not practical. " Ok, I agree it's not every game, still it's not very few rare games. " I understood that you were trying to say, that if the game runs on different OS's and different CPU's it's impossible to have FP determinism, and I provided examples where it was done. If you meant something else, please elaborate. |
![]() |
@HellGauss, if you read the article posted earlier, its not as simple as using precomputed constants for Sin/Cos, or using fixed point math. Even if you solely use fixed point math, you can get rounding errors due to how the variables are stored in memory
There is also the obvious point of performance |
![]() |
I have been studying sort of Software and hardware architectures, but this is far more advanced than anything i ever knew about it. And confirmed, that this architecture from @GGG is so much superior to Blizzard's, that i am literally shocked and amazed. I have read almost entire thread here, which i have never ever done before, by this i mean is it stunning and so informative, that i certainly deserves sticky and hall of fame.
Thank's to the maker of this thread and to @GGG for all their patient replies. I will keep supporting this company in the future and looking forward to their next supporter packs we all hope for. Best regards, Fary:) GGG thank you for all the great things you are doing. You have combined every element of all other great Rpg's and joined them together as one Diamond, that will shine Forever.
This is coming straight from the heart <3 |
![]() |
" I do not know how to answer.... maybe you are assuming that fixed-point math = rounded floating point. no! In a fixed point implementation, a number is represented (say) by two 32 bit *integer*. The first one is the integer part, and the second one the fractional part (base 2). You can perform basic arithmetic operation using only the ALU and integer operations, and stay away from the FPU. Those operations are very deterministic and very standard for each processor/SO. Rounding is not an issue as long as you choose your standard way to perform approximations. Roma timezone (Italy)
|
![]() |
Wo, this thread took off.
I've only read the OP and the developer highlights, so forgive me if I touch on some points that have already been discussed. Irregardless of IEEE 754 standards for floating point, you have to take into account that CPUs are *known* to have bugs in Microcode; Unless you expect GGG to encode a whole new floating point system based upon fixed point integers ;) Secondly; whilst I applaud the idea of some kind of deterministic seed, I think that to represent the state of the game in such ways would end up with some kind of coding system that would probably be larger then the current packet - never mind the excess overhead required by a user doing random actions. Admittedly, I've never had to deal with anything remotely complex as an MMO in terms of coding, but I've written software that's been deployed on over 70,000 computers and does indeed use a client-server system to update specific local content. To my mind, I think the biggest problem can be read in-between the lines of one of Rhys' posts; specifically, if you didn't do things locally on the Client, then it would take 2-3 seconds for the mob to drop stuff, your orbs to apply, etc etc. The way I read that is to say that we're basically overloading the servers as a 2-3 tick, is incredibly slow for an MMO. How to fix? Keep buying those microtransactions and help GGG upgrade their stuff :) By the way, EVE Online had a similar problem (and some say still has) and their solution was to basically build a Supercomputer; which is hosted in the Docklands in London, basically sat on-top of one the the fattest pipes in the UK. That's my thoughts anyway; I have faith that GGG will manage to resolve this one way or another. Edit: It just occurred to me that the problems inherent in the seed method can only be exacerbated by the use of Minions, Raise zombies, Summon skeletons, Conversion traps and dominating blow - for example. Your seed cannot count for the pathing of those items. Stay out of the shadows ... They bite Last edited by Skogenik#0625 on Nov 22, 2013, 9:07:19 AM
|
![]() |