Client-server Action Synchronisation

"
Xavderion wrote:
"
sidtherat wrote:
"
DexDeus wrote:
So d3's approach is.

Mobs are ghosts - run through them all you like
Skills have massive AoE - doesnt really matter where they are on the server - you'll hit them
Minimal room obstuctions
Doorways are large
Corridors are wide
Mechanics are basic - no accuracy mechanic for example, calculations are minimal

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...


are you sure you have played d3 at all?

half of these are wrong and 'complicated mechanics' - there are accuracy/evasion (d3 has dodge/block as well) and stun. just two.


Half is wrong? Only one point he made is wrong, mobs aren't ghosts. I'd also like to add that in D3, movement and gameplay is generally a lot slower (the epitome of this is the Crusader, thanks for the 20 second cooldowns, Blizz). And you forgot Knockback :) All these mechanics cause desync, but also allow for a deeper game experience. I'm okay with it.


"Doorways are large"
"Minimal room obstructions"

lol yeah, huge issues there.
Obviously, constantly re-synchronizing everything is tremendous overhead.
But what about having only a few most important entities, the main character, unique bosses and rare mobs, positions linearly interpolate? That way, it wouldn't be as twitchy as someone typing "/oos" every tenth of a second, minimizing the experience of rubber banding. Not costly at all on bandwidth to have 5-10 entities per instance have their positions updated every few ticks.
Having that natural 100-200ms discrepancy in positions isn't the part of desynchronization that's driving people mad. It's the important stuff (Kole, Brutus, Vaal, your own char) suddenly teleporting for a screen-sized portion of the zone. Constantly forcing important entities to interpolate towards their respective positions is what counts.
Few white out-of-place mobs are only harmful in short races, where you run through narrow corridors. In 99% of endgame playtime, having white skeletons desynced, even by a lot, is completely negligible.

Also, CONVEY DANGER. Telegraphing large hits gives time to sync them with clients. That way you can keep your 1-shot high dmg megaburst mechanics in game, and retain the feeling of fairness "I knew I shoud've not been standing under that large Vaal hammer ball, shit was scary"
Leap Slam (especially through doorways) also causes a fair amount of desync quite regularly.

There are many objects strewn about the ground that snag the character. Map clutter I suppose. Perhaps try lessening that.
Pacific (GMT -8) Time
"
demonskye wrote:
Ahoy Chris,

I'll toss my .02 in on this matter, as my background is in network engineering. (I currently work for Akamai, so I know quite a bit about this sort of thing as traffic routing / peering is my career).


I want to respond to your post because for somebody who's is claiming to know a lot about networking your assumptions are shocking.

"
I read the entirety of your first post and I'm somewhat surprised that the design team hasn't considered moving from the damage calculation models that they're using to a partial-trust model in order to reduce the reliance of constant peer-to-peer communication. As we all know, the internet is only about 99% reliable on it's best day. Packets get dropped, lost in between peers, routed wrong, or a client / server will error and a packet won't be sent. A 3-way handshake might not sync, or there can be any of a million layer 1-3 errors that happen along the way.


What?! You're basically answering your own question right there. You're surprised why GGG hasn't moved to a partial trust (whatever that concretely means)? Well it's maybe not that easy as you are assuming there?

"
So, my question is: If you've implemented a system that is checking EVERY swing, why not limit that system to something like every (random -- 10%) of swings are sent to the server. If the server goes "Hey, I really think that should have hit based on what we're seeing" it flags it. Continue this process for some time, and then start doing robust gameplay logging on the accounts that have come up most flagged. The people who are cheating might not be getting hit at all. Finding and banning one or more of these people would take hardly any time or effort at all.


Good question, but you had to leave it as a question. That last sentence is another bold assumption.

"
Another feasible solution which I somewhat enjoy is the idea of a "pause", though this isn't viable in multi-player games. If you're playing single player and the game hasn't received a keep-alive from the client in (x) then the game pauses and a resync is forced before the game is unpaused if there's mobs within (y) range. This would ensure that the person is at the VERY least able to see what's about to happen. I understand that this might "break immersion" but it's quite a bit worse when desync breaks your immersion AND your hardcore character.


You're assuming that it's a feasible solution but at the same time you're saying it doesn't work well in multiplay?

"
There's a lot of ideas that you guys could toy around with, but considering my background you should know that my answer is to increase the amount of servers and to vary their geographic locations (shit, look at who I work for, you're never more than ~1000 miles away from a server we own, basically anywhere in the world that's not an ocean). Doing peering checks during gameplay to check latency of other nearby servers (USEast 1: 150ms, USEast2:97ms, USEast3: 57ms, USEast4: 220ms -- transfer session from USEast1 > USEast3) to optimize play-ability. This will help a LOT with handling client-side latency issues. Just because Comcast / Verizon has shitty peering agreements, it won't stop you guys from giving you good results and your customers the best experience possible.


GGG doesn't have the time and money to toy around and somebody who works for a big company like yourself should know that.
Also what the hell do you mean "the answer is increasing the servers"?

"
I have a lot more considerations that I would be more than happy to communicate but this is simply what comes to mind off the top of my head at 8:30am before I go into work.


Yeah I bet you have a lot more of that stuff, man :|


Last edited by Startkabels on Apr 21, 2014, 12:29:43 PM
I don't understand why Diablo 3 feels so much better compared to Path of Exile in terms of 'desync' or whatever the issue is.

D3 is not that more simple compared to PoE, they both have enemy collision, dodging/blocking, stunning and knockback, PoE has mazes which D3 doesn't have, as well as accuracy but that's it I think.

D3 doesn't seem to have issues with fast movement skills, when I use vault, strafe or whirlwind in large mobs of enemies, I don't remember encountering 'desync'.

I'm not saying D3 never lags but when it does, it doesn't seem related to what's happening on screen and it's always quickly fixed.

I don't know if it's desync but something is really wrong about PoE and I don't know if simplifying the game would really fix the issue when D3 seems to handle it fine.

Good luck finding what the real problem is GGG.
Sorry, I don't want to be rude here but to the people who can't understand why D3 doesn't have desync:

Read the original post because GGG's answer couldn't possibly be any clearer.

/facepalm
Last edited by Startkabels on Apr 21, 2014, 12:31:26 PM
"
Jihoko wrote:
"
sidtherat wrote:

You went for cost saving model and it is clearly visible.


What are you talking about? Did you even read the post? They cannot simply solve desync by throwing money at it, that's now how it works. Desync has nothing to do with the quality/quantity of their servers.


He never reads the posts nevermind does he even play the game. He's just a Blizzard plant.
My Keystone Ideas: http://www.pathofexile.com/forum/view-thread/744282
"
Coal48 wrote:
I don't understand why Diablo 3 feels so much better compared to Path of Exile in terms of 'desync' or whatever the issue is.

D3 is not that more simple compared to PoE, they both have enemy collision, dodging/blocking, stunning and knockback, PoE has mazes which D3 doesn't have, as well as accuracy but that's it I think.

D3 doesn't seem to have issues with fast movement skills, when I use vault, strafe or whirlwind in large mobs of enemies, I don't remember encountering 'desync'.

I'm not saying D3 never lags but when it does, it doesn't seem related to what's happening on screen and it's always quickly fixed.

I don't know if it's desync but something is really wrong about PoE and I don't know if simplifying the game would really fix the issue when D3 seems to handle it fine.

Good luck finding what the real problem is GGG.

I had the same experience with D3...there was rarely any desync, and certainly not when I was whirlwinding through mobs or hit-and-running through a doorway. I don't see how "chance to hit" can have that big of an effect in this case.

No, I suspect the real reason is this bullet point (which I wish GGG would expand on):

"
Chris wrote:
[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 more easily get away with running into a doorway, aggroing a bunch of monsters, then running back out when them nearly surrounding you. 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 what the "concessions" that D3 (for example) uses to make for such a smoother experience. Are client movement hacks really such an issue in those games? Might some of these compromises be worth it? I'd sure like to know. I've had to modify my play style to account for desynch, and that's the wrong kind of "hardcore".
In the morning
Laughing happy fish heads
In the evening
Floating in the soup
Last edited by PrimeHydra on Apr 21, 2014, 12:46:14 PM
You should probably include in the manifesto an explanation of why a consistent ping is required to minimize the frequency of experiencing a desync (It's required for prediction technology to work well). Currently you vaguely touch on this topic with a single vague line.

"
Why sync problems occur with this system and how they manifest
This above example assumes that everything went smoothly. It's entirely possible for the 2 second travel time to be completely different on both ends, or for a lag spike to occur causing the timing to get completely out of sync. If the attack is interrupted on the server before it starts (during movement) but not on the client, then you have a long animation playing that can't be cancelled because the communication time is a decent length of the animation.
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, 12:47:40 PM
"
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.

Report Forum Post

Report Account:

Report Type

Additional Info