Technical solution to eliminate desync in single-player sessions

"
HellGauss wrote:

As SkyCore point out, the only issue that requires some brainstorm is security.

Even if all issues are completely resolved and we had a 100% unhackable(which is impossible) and efficient(which is VERY difficult) proposal it will still face the largest obstacle: money. How can any business invest so much into a very narrow portion of it product with expected yields to be minimal(and not guaranteed) even if it is accomplished in time(another issue not addressed).
This proposal is doomed. It is not our decision. And even if it were i would vote to spend that money elsewhere instead of catering to the least able to adapt members of our community.
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
"
HellGauss wrote:
"
deteego wrote:
@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 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.



I understand what Fixed Point arithmetic is, I don't think you understand what was said in that article
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:)

EDIT: Just had to repost, i love you all who posted in here, very informative to say again <333.
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
"
Skogenik wrote:

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 :)

If i read Rhys' mind correctly, that has nothing to do with server overload. It deals with the fact that the client only pulses information to be processed every second. That information travels through tcp to the server. And then the server validates it. Then sends back the loot through tcp. Finally to be received by the client. All this takes time. Networks are unreliable resulting in resending the information causing yet more delay.
In the end you end up with a couple seconds of delay often.

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
Last edited by SkyCore#2413 on Nov 22, 2013, 8:24:18 AM
"
deteego wrote:

I understand what Fixed Point arithmetic is, I don't think you understand what was said in that article


Actually unless I missed it, that article says nothing about fixed point determinism, can you quote where it says that fixed point operations are non-deterministic?
"
LogoOnPoE wrote:
"
deteego wrote:

I understand what Fixed Point arithmetic is, I don't think you understand what was said in that article


Actually unless I missed it, that article says nothing about fixed point determinism, can you quote where it says that fixed point operations are non-deterministic?


I think this sums it up pretty well:

"
Wikipedia wrote:
Precision loss and overflow

Because fixed point operations can produce results that have more bits than the operands, there is possibility for information loss. For instance, the result of fixed point multiplication could potentially have as many bits as the sum of the number of bits in the two operands. In order to fit the result into the same number of bits as the operands, the answer must be rounded or truncated. If this is the case, the choice of which bits to keep is very important. When multiplying two fixed point numbers with the same format, for instance with I integer bits, and Q fractional bits, the answer could have up to 2I integer bits, and 2Q fractional bits.

For simplicity, many fixed-point multiply procedures use the same result format as the operands. This has the effect of keeping the middle bits; the I-number of least significant integer bits, and the Q-number of most significant fractional bits. Fractional bits lost below this value represent a precision loss which is common in fractional multiplication. If any integer bits are lost, however, the value will be radically inaccurate. Some model-based fixed-point packages[5] allow you to specify a result format different from the input formats. This allows you to maximize precision and avoid overflow.

Some operations, like divide, often have built-in result limiting so that any positive overflow results in the largest possible number that can be represented by the current format. Likewise, negative overflow results in the largest negative number represented by the current format. This built in limiting is often referred to as saturation.

Some processors support a hardware overflow flag that can generate an exception on the occurrence of an overflow, but it is usually too late to salvage the proper result at this point.

Modern development cycles include a prototyping phase which examines the potential precision loss and overflow of designs using fixed point calculations before proceeding to physical prototyping.


Take into account different architectures, different operating systems and potential thunking issues.
Stay out of the shadows ... They bite
"
SkyCore wrote:

If i read Rhys' mind correctly, that has nothing to do with server overload. It deals with the fact that the client only pulses information to be processed every second. That information travels through tcp to the server. And then the server validates it. Then sends back the loot through tcp. Finally to be received by the client. All this takes time. Networks are unreliable resulting in resending the information causing yet more delay.
In the end you end up with a couple seconds of delay often.



Perhaps :)

I guess, we'd have to wait to hear what Rhys has to say; I still think that 2-3k-ms is abnormal though; but I will admit that I don't know how GGG are managing their ticks, so it might actually be optimal.
Stay out of the shadows ... They bite
"
Skogenik wrote:
"
LogoOnPoE wrote:
"
deteego wrote:

I understand what Fixed Point arithmetic is, I don't think you understand what was said in that article


Actually unless I missed it, that article says nothing about fixed point determinism, can you quote where it says that fixed point operations are non-deterministic?


I think this sums it up pretty well:

"
Wikipedia wrote:
Precision loss and overflow

Because fixed point operations can produce results that have more bits than the operands, there is possibility for information loss. For instance, the result of fixed point multiplication could potentially have as many bits as the sum of the number of bits in the two operands. In order to fit the result into the same number of bits as the operands, the answer must be rounded or truncated. If this is the case, the choice of which bits to keep is very important. When multiplying two fixed point numbers with the same format, for instance with I integer bits, and Q fractional bits, the answer could have up to 2I integer bits, and 2Q fractional bits.

For simplicity, many fixed-point multiply procedures use the same result format as the operands. This has the effect of keeping the middle bits; the I-number of least significant integer bits, and the Q-number of most significant fractional bits. Fractional bits lost below this value represent a precision loss which is common in fractional multiplication. If any integer bits are lost, however, the value will be radically inaccurate. Some model-based fixed-point packages[5] allow you to specify a result format different from the input formats. This allows you to maximize precision and avoid overflow.

Some operations, like divide, often have built-in result limiting so that any positive overflow results in the largest possible number that can be represented by the current format. Likewise, negative overflow results in the largest negative number represented by the current format. This built in limiting is often referred to as saturation.

Some processors support a hardware overflow flag that can generate an exception on the occurrence of an overflow, but it is usually too late to salvage the proper result at this point.

Modern development cycles include a prototyping phase which examines the potential precision loss and overflow of designs using fixed point calculations before proceeding to physical prototyping.


Take into account different architectures, different operating systems and potential thunking issues.


Not exactly what I was asking for, but let's get to this.

I have to admit it's been a while since my computer architecture and translation methods classes, but as I understand the loss of precision itself does not imply non deterministic behavior. The results of overflow would be incorrect, but they would be the same, or am I wrong?
"
Skogenik wrote:

I guess, we'd have to wait to hear what Rhys has to say; I still think that 2-3k-ms is abnormal though; but I will admit that I don't know how GGG are managing their ticks, so it might actually be optimal.


Did you ever noticed that sometimes loot drops with 1-2 sec of delay? Try to open chests when server is overloaded. This is only a small detail of the implementation. Maybe I can implement the protocol in such a way that when i kill a monster the packets is sent immediately instead of 1 second later. This would be as it is now. Please do not focus on such trivial details.

"
I have to admit it's been a while since my computer architecture and translation methods classes, but as I understand the loss of precision itself does not imply non deterministic behavior.


Loss of precison/overflow is an issue of ALL kind of computer calculation methods. It has nothing to do with determinism. ALU operations are detemrinistic and standard.
Roma timezone (Italy)
Last edited by HellGauss#6525 on Nov 22, 2013, 11:01:49 AM
I had some great thoughts today that I could use some community feedback on. So my original proposal primarily target combat, right?

What if the proposal JUST was designed to solve pathing/positions of things? Desync truthfully has the most devastating impact on movement. Although some combat skills affect your position, I believe that the game client could use determinism for movement. This should most of alleviate the floating point issues, and also solve the core problems with desync (getting completely out of position). This would also solve all the 'hackz' problems that people have been stating, because it would only keep your movement/mob movement synchronized rather than deterministically handle combat as well.

Also, this solution would be 100x simpler than the proposal which involves the entire combat system. If GGG could just move deterministic pathing to the client-side, that may be all that's needed. I apologize in advance if someone else thought of it first and I didn't notice it being recommended.

This solution could also be applied to multiplayer in a much more manageable way. I don't know why I didn't think of this 90 pages ago.

Thoughts?

If everyone agrees with this, I will write up a more elaborate code sample that targets this solution.
Last edited by qwave#5074 on Nov 22, 2013, 12:03:33 PM

Report Forum Post

Report Account:

Report Type

Additional Info