Client-server Action Synchronisation

"
sidtherat wrote:
So nothing will change.

World of tanks would like to have a word with you guys on how to make synchronous system smooth as butter.

You went for cost saving model and it is clearly visible. But with a lot less players than even few months ago you can try sending full state periodicaly. Some of my desync deaths are so bad that playing poe is simply revolting after experiencing smooth as butter gameplay of d3

And while d3 obviously does not have few perks neither does poe. D3 by design and poe by avoidance. In poe any movement based build is so desync prone that it is a noob trap. Same with stun. Any stun/chill/freeze build = desync. Ive never desynced as much as with glacial hammer plus ele prolif. It is simply revolting experience. So - keeping to your explanation- desync resons are the very mechanics players avoid like a plague: movement, stun, body blocking..


If you're dying to desync after you've been playing the game a while and you know what it is, it's because you're shit at the game. It's easy to avoid and a macro can solve desync whenever it does happen.
"
Goose312 wrote:
"
Chris wrote:
To prevent players cheating, it's important that these calculations are not done on the gamer's computer, because they can easily modify the result of such calculations.

Because of this, all calculations that affect someone's progress must be done on servers that we control.


Why not client side calculations verified via server side calculations? Rather than waiting for a response from the server, carry out the action, client does all calculation and displays result, send the action to the server which verifies that it is valid.

If it is valid the server allows the client to continue. If the action falls outside of the bounds of what is an acceptable or possible outcome, serverside calculations recognize that outcome is not within possible outcomes and corrects the client outcome (or shuts down client if tampering with the client side calculations are detected). If you have 50% chance to evade an attack from a boss but someone tampered with the client and the server sees the last 2 swings were evaded, it can attempt to correct the action, likely causing some desync. If the server cannot verify the correction fixed the calculation from the client it can shut down the client's session and flag them as having a modified client, i.e. cheating.

Rather than having constant desync you only really run into a desync situation when the client, for whatever reason, performs actions that shouldn't be possible.

Hackers will just probe the servers with dummy accounts until they can figure out what the optimal values are for each circumstance and use a program to only feed the server optimal values. Also, how can the server know what is reasonable without simulating the running its own instance and being fed info by the client in the first place?
Computer specifications:
Windows 10 Pro x64 | AMD Ryzen 5800X3D | ASUS Crosshair VIII Hero (WiFi) Motherboard | 16GB 3600MHz RAM | MSI Geforce 1070Ti Gamer | Corsair AX 760watt PSU | Samsung 860 Pro 512GB SSD & WD Black FZEX HDD
"
faction55 wrote:


"Doorways are large"
"Minimal room obstructions"

lol yeah, huge issues there.


You serious? I get desync very rarely in d3, but when I do, it's mostly in a3 small doorway areas, especially with the exploder mobs around that can stun you with their big dmg explosion.

Also, desync in solaris/lunaris temple is miles better than desync in vaal pyramid - big, open rooms and doors vs small doors and rooms filled with impassable obstructions. D3 has almost no indestructible doodads - basically only the various weapon/armor racks are impassable and I've had issues fighting around those - not comparable to PoE issues but they're there, and they're not there when I fight in completely open terrain.

Different level design can easily alleviate this in PoE but it's not a trivial issue from developer hours spent perspective to change what already exists so drastically.
Since you mentioned Brutus hook specifically, I'd like to talk about that.

What I've been noticing in that fight is that I can
-dodge the hook
-hear the hook hit me anyway and see my character get stunned
-take up to 2 seconds for me to actually get pulled

Obviously I'm not actually dodging it (which is understandable at ~80 ping, I don't mind that or that the hitbox is big). It's just frustrating to that my client KNOWS I got hit (because I heard the hit) but DOESN'T know I got pulled.
"
Chris wrote:
There are absolutely problems with various skills (Whirling Blades, Cyclone, Brutus' Hook, etc) that make them more desync-prone than others. These are being aggressively investigated and we should have good progress to share on that front soon.


The major problem for me, at least, is that desync is such an issue that it makes certain builds (which I VERY MUCH would have liked to pursue) - like cyclone, flicker strike, etc. - practically impossible to run successfully most of the time. I use speed as both an increased damage source as well as a source of increased survivability to make my build work. When I'm not hitting the monsters because flicker strike can't even target the correct positions of monsters each strike, it makes me die VERY quickly. There are a myriad of other specific issues related to desync, of course - most of which you (Chris) have broadly touched on already.

The fact that the way your game architecture is set up, is preventing people from using certain builds is abysmal. This is not a small issue. You said it yourself, desync is a very hot topic - and with GOOD reason.

I acknowledge your counterpoints to changing the way you handle client-server interaction and all the drawbacks of doing it the way MOBAs (for example) do it; but even given all of that, I STRONGLY suggest you reconsider doing it this way. I personally don't care how long it takes to 'rewrite most of the game' as long as you start working on it. I fully recognize what an undertaking this will be - as a developer myself - but, honestly, I respectfully submit that you made a mistake in your initial design decision to set the game up to use this type of client-server interaction in the first place and the time has long since passed to begin working on correcting it.

I fully believe the payoff for re-coding to use the alternate method of client-server interaction, mentioned before, will be well worth it in the long-run.

The bottom line, here, is: If there is an issue that causes players to not be able to rely on their inputs to produce expected results, then there is something very wrong.. something that needs to be fixed.

I am proud of and happy with almost every aspect of your game. This one issue is the single massive misstep in the game's development/design.
Last edited by Darkfyre on Apr 21, 2014, 1:11:46 PM
"
Startkabels wrote:
Read the original post because GGG's answer couldn't possibly be any clearer.


I did read all the original manifestos when they came out, it's been a while so I don't remember much of them, I did not the read the recent edits but I did read the newly added info, my post was based on that, I'll grant you that everything is already explained but there's so much info, I would just want a simple answer.

"
PrimeHydra wrote:
I suspect the real reason is this bullet point (which I wish GGG would expand on):
"
[other Action RPGs tend to use] Various speed/collision concessions that make it easy to speedhack and/or walk through monsters with modified clients


I'm guessing this means that in D3, one can get away with running into a doorway, aggroing a bunch of monsters, then running back out due to these "concessions". PoE's server side must be stricter, more likely to say "uh-uh, you're still stuck in the room behind a pack of vipers. Sorry, client!" *Dead*

Hopefully their coming optimizations will reduce this issue. But I'd love to know exactly why D3 (for example) does so much better in this area. Are client movement hacks really such an issue in those games? (I haven't played D3 since discovering PoE).


Thanks for pointing this out, nice post
You mentioned that sometimes the hit calculation is at issue. That is, the server knows the outcome of a hit, but the client doesn't. That can be alleviated by syncing random number generators on the two, and partitioning those RNGs more finely. E.g. if currently two hits in different orders from different monsters can throw off the RNG, split the RNG across the monsters (instead of sharing one common RNG).

The more you supply each kind of action with its own RNG source, the better the synchronization will be maintained across client and server.
"
DexDeus wrote:

So the way you play is charge in and do your big AoE and just run around killing with no real tactics in mind, all you have to do is watch your health a bit and kill...

I dont want this ... i want a hardcore game...


what game are you playing? That is exactly what all my melee duelists do! A lot of times I don't look at the screen just click and watch my health/flasks

especially on most bosses since I'm life leech based and can just leech through damage with the appropriate flask/w leech on it

i.e. topaz for lit mobs/ amethyst for chaos etc

all with life leech mod on them


S L O W E R
One of the reason D3 desyncs less is because all non-sustained attacks will connect. Although you can Dodge attacks in D3, D3 treats dodging as a simple % chance to dodge the attack as the calculation is still performed even if you physically moved out of the way of the attack (There are a handful of exceptions though, certain specific skills in the game will allow the player to move out of the way without risk of being hurt by the attack).

With POE something like 99% of attacks can be dodged by moving out of the way of the attack, completely avoiding damage in the process! This approach is much harder for a prediction model to handle well.

There are also critical hits that the client might not know has occurred, which stunned you/an enemy momentarily causing you/an enemy to go out of sync with the server!

And the trusty ability to have your/an enemy attack outright fail/miss.

Remove these mechanics and it will be as stable and perfect as D3's infrastructure but the gameplay will suffer.
Computer specifications:
Windows 10 Pro x64 | AMD Ryzen 5800X3D | ASUS Crosshair VIII Hero (WiFi) Motherboard | 16GB 3600MHz RAM | MSI Geforce 1070Ti Gamer | Corsair AX 760watt PSU | Samsung 860 Pro 512GB SSD & WD Black FZEX HDD
Last edited by Nicholas_Steel on Apr 21, 2014, 1:31:00 PM
Also from my own experiences using Quartz flasks even just running around regularly gets rid of about 90% of desyncs, which lead me to believe that 90% of desyncs are caused by player/monster collisions and because of that, desync will never go away
S L O W E R
Last edited by ampdecay on Apr 21, 2014, 1:29:18 PM

Report Forum Post

Report Account:

Report Type

Additional Info