Technical solution to eliminate desync in single-player sessions

"
qwave wrote:
Zero impact on performance means it will not reduce your framerate. Obviously it will cost microseconds, but these are not tangible in a game like this. Line of sight calculations are even cheaper because they can be done by the GPU. (although that is highly unlikely given the simplicity of the algorithm)

The client already performs line of sight calculations, so that's not anything new.

The issue is not with the exact execution of the los formula, but with its prior calls to determine the EXACT positions of 2 things. Which if off even by a pixel results in a catastrophic cascade of desynch.
Which comes down to the precise implementation of server validation in your proposal. If the server is not maintaining its own state of the game then such a thing is trivial as the client can assert the exact locations. But if the server IS maintaining states, the issue of desynch again arises.
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 20, 2013, 8:47:46 AM
Tantabobo, virtually every RPG out there performs similar combat calculations. If these were expensive, then RPGs would require massive hardware. The truth is, RPGs perform very few calculations compared to games like RTSs.

Try calculating the paths of 5000 units on a map, now that's taxing. Calculating the next critical strike? Not so much.
SkyCore, we're 70 pages into this thread and you still don't understand even the most basic principles of the system. I am completely floored, seriously. It's like you don't even want to try to understand.

Why do you continually post on this thread if you're not interested in understanding the proposal from the get-go?
Last edited by qwave#5074 on Nov 20, 2013, 8:52:12 AM
"
qwave wrote:
Tantabobo, virtually every RPG out there performs similar combat calculations. If these were expensive, then RPGs would require massive hardware. The truth is, RPGs perform very few calculations compared to games like RTSs.

Try calculating the paths of 5000 units on a map, now that's taxing. Calculating the next critical strike? Not so much.


You can not use what another game does as a basis for what this game does. Unless you can demonstrate that the underlying engine is the same. Otherwise you are comparing apples to oranges.
Last edited by Tantabobo#6200 on Nov 20, 2013, 8:52:03 AM
Tantabobo: The mathematics for all of these things are in plain text on the wiki. Go see for yourself. You can put them into your calculator and verify them. They are all simple.

PoE's combat algorithms have been documented for a long time. The devs themselves have declared many of them as well.
Last edited by qwave#5074 on Nov 20, 2013, 8:53:35 AM
"
SkyCore wrote:
"
Citronvand wrote:
"
SkyCore wrote:

Sarcasm detected.
Analyze post content: . . . . . . . . . . . . .
None detected.
Request thread lock.


I don't see how locking this thread would achieve anything desirable. Even if qwave is completely wrong it is an important issue to talk about and try to solve. I suppose you want to lock all threads relating to desync so we can all stick our heads in the sand and pretend it doesn't exist.

Oh, I almost forgot.

Request thread to be open.

[...]

As for this thread, its laced with misleading and contradictory solutions and information. It has boiled down into insults and sarcasm from the OP. In my eyes, grounds for thread locking.

After such remarks were thrown in by the opposition
and OP ignored them most the time in a pretty stoic manner.

How about you make constructive suggestions based on what Rhys said instead?
"
Rhys wrote:
As the programmer responsible for maintaining the client/server synchronization of the random level generation, I can tell you that this sounds like a nightmare, for a few reasons.

1) The server must validate the snapshots in real-time, not once the client leaves the instance. This is because the client can potentially muck around in one instance for huge lengths of time. Hours, days, weeks even, if the realm stays up. Processing so much all at once would lag the instance to hell and back, and changing areas has to wait on this task. Also, you will still need the ability to resync players to a recent state, when desync inevitably occurs (see next point). Also also, you need to be able to save the player's data at a moment's notice to prevent item dupes with trading.


I'd like to thank the devs for talking through the issues with us, rather than just ignore us which is a viable alternative. :P

I am not going to tell you guys how to do your job, that would be insulting to your collective intelligence, however, something of interest to me is duping. I duped a few items in D2 when a friend told me how, mostly to test it (because I didn't believe him at the time) and because I was surprised that duping could exist.

While my own experience in programming is hobby level, I did MUD level C coding for years back in the day.

I am surprised duping is a problem in this day. Objects were disposable in MUDs, probably similar to ARPGs because of the volume of objects created. Every time you pick something up, trade it, drop it, the process involves creating and destroying objects, the only thing that exchanged were object values but there was no actual 'moving' of objects. I am not sure if this process has evolved over the years or not, it doesn't sound like it has.

The problem with D2 was that items were being created in parallel to the destruction, as far as I could tell from an end-user perspective and it was sensitive to latency and multi-threading weaknesses in the code when it comes to verifying the object has been destroyed before re-creating it somewhere else.

I think MMOs learned a lot from MUD experiences with multi-threading and database management, but ARPG seem to still suffer from the same issues. I am not sure why MMOs can prevent duping but ARPG seem to be plagued with the same issues from decades ago.
"
ScrotieMcB wrote:
Spoiler
"
Daefecator wrote:
Actually, desyncs are not even remotely the same experience for any given two machines. It's not like we are in the same room, our IP routing paths differ, our ping fluctuates and is not somehow synchronized etc. I really don't feel like both clients could ever see the same distorted (or desync'ed) game state.
You're looking at the wrong things. Reread Chris' example of how client prediction works; the only key factor is latency, and it's still possible for clients with very different latency to fail the same prediction.

For example, let's say you have 75ms latency, and your friend has 125ms latency.

-125ms: Your friend orders to attack Monster 1 with a melee attack. He begins moving to within range on his screen.
-75ms: You order to attack Monster 1 with a melee attack. You begin moving to within range on your screen.
0ms: The server receives both you and your friends commands simultaneously. On the server, you both begin moving to within range.
2875ms: According to your friend's client, he arrives at the monster and begins the attack animation.
2925ms: According to your client, you arrive at the monster and begin the attack animation.
2950ms: On the server, Monster 2 (a Skeletal Rhoa) makes contact with a Charge, stunning you. It sends information to both clients indicating that you've been stunned.
3000ms: On the server, your friend arrives at the monster and begins attacking it.
3025ms: Your client receives the information that you've been stunned by a Rhoa. You are resync'd back to the spot where you were hit.
3075ms: Your friend's client receives information that you've been stunned by a Rhoa. Your character on his screen is resync'd back to the spot where you were hit.

Note that you have only 60% of the latency of your friend, yet both of you suffered essentially the same desync. That's because the desyncing event took place during a time where both clients were in a latency period. Keep in mind that, usually, you and your friend would be unlikely to have that large of a difference in latency; most users have similar latency during the same times of day, even with different ISPs, and that most times one of you might have a 5% or 10% advantage, if even that much.
Yes, technically you are correct. But you consider just one case out of all possibilities out there. You can prove something wrong using a counter example, but You can never prove something right basing on several correct examples.

It's just very odd, that both clients see equally desync'ed game state far too often to simply be considered a coincidence.


What really amuses me here, that in your previous post you stated that you think two clients see the same game state comes from similar game client code and similar data.
"
ScrotieMcB wrote:
Spoiler
"
Daefecator wrote:
Spoiler
It is actually very amusing encountering these "predicting" mistakes eventually leading to desyncs. I am regularly playing with my brother, and we are actively communicating via Skype while playing. We both use /oos macro at about every 6-10 seconds.

It is just freaking amazing, that 90+% of the time we both see the exact same game state before using /oos macro - let's say mob is in front of us, but after /oos it appears to be behind us.

It is really rare when one of us actually sees the other desync'ed. I can actually recall yesterday's event, when we were farming ledge merciless and I was using Weapon Throw and was unable to damage anyone (despite having Resolute Technique). After using /oos I saw i was hitting wall all the time, but my brother saw me hitting the wall for all that time already.
The other case was when he saw he was at least half a screen away from Volatile Stormblood but got hit nevertheless, but I saw he was actually in range all the time.

This makes me think that "Client Prediction" (if we call it like that) is very similar for all clients (like me and my brother both playing), but at the same time it looks like it completely differs from "Server Prediction"!

TLDR: Doesn't the root of the D problem lie in that client predicts game state in a totally different way that server does?

How comes we both see boss is here, but loot drops somewhere else? Couldn't it be because of some bug fix applied to server code somehow just didn't make it to the client code, or vice versa?
This makes a lot of sense when you really think about it. The client is a computer program, after all; given the same inputs, the exact same calculations are made on all clients. Since you were partying together and for the most part in very similar situations (very similar inputs), wouldn't it necessarily follow that most of the time failed predictions would exist on both machines simultaneously? To be honest, I'm a little surprised there was any variance whatsoever.

And now you state an example of how this similarity can also happen while having different input data. This shows You actually make blind guesses then retract your arguments later.

Two clients being pretty well sync'ed together while both being desync'ed from server is highly unlikely to be a simple coincidence like your recent example. This just happens far too often.
"
qwave wrote:
SkyCore, we're 70 pages into this thread and you still don't understand even the most basic principles of the system. I am completely floored, seriously. It's like you don't even want to try to understand.

Why do you continually post on this thread if you're not interested in understanding the proposal from the get-go?

'Your system' has changed 150 times over the course of 70 pages.
I suggest that each time you revise 'your system' you post COMPLETE detailed information about its current design.
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
"
The problem with D2 was that items were being created in parallel to the destruction, as far as I could tell from an end-user perspective and it was sensitive to latency and multi-threading weaknesses in the code when it comes to verifying the object has been destroyed before re-creating it somewhere else.


You are correct. Item duping frequently occurs as a 'race condition' due to poor managed locks and mutexes involved with multi-threading or distributed computing.

Duping is rarely a problem nowadays because game developers are more aware of the conditions that cause it.

Report Forum Post

Report Account:

Report Type

Additional Info