Client-server Action Synchronisation

so any news on whats being done to fix the rubberbanding and desyncs?
Above content may contain traces of nonsense.

Reality is simply an unrealistic version of online gaming.
"
gehirnmutant wrote:
What BF4 does in that patch is the following: They define a small area around the player (they call it a bubble) and they send you a lot more position updates per second for enemies in that bubble than for those outside of it. This is not a new technique, I think I've read about the original Unreal Tournament doing something like that already.

This cannot work for a game like PoE. Shooters send position updates for every entity in the game many times per second. That works fine for them because in a shooter, you usually have just a handful of players. BF is at the upper end of that scale, but still, most players are usually out of sight and can be optimized away by the netcode (which is more less what they did in that patch). Just look how BF4 performs on a 64 player server if you really put all 64 players in the same room. In PoE, you have dozens, if not hundreds of entities on your screen at once.

The current network architecture is not bad, it should just move some responsibilities to the client so that the player can at least rely on the position of his own character. Cheaters can still be detected by validating the client decisions on the server.


Some interesting background info there.

But when they increase the update rate of entities in a bubble what is the problem with PoE having a lot more entities in general when there would be a bubble around the player that sets the proximity of entities to update?

Last edited by Startkabels on Jun 10, 2014, 10:25:04 AM
"
Startkabels wrote:

Some interesting background info there.

But when they increase the update rate of entities in a bubble what is the problem with PoE having a lot more entities in general when there would be a bubble around the player that sets the proximity of entities to update?



A lot more entities syncing = a lot more internet traffic.

This might not be much for a handful of players or maybe even a hundred but when you start sending GB's of information around every few milliseconds the internet will die :D

Giving any kind of trust to the client opens it up for cheating and detection will start getting difficult and it's an arms race GGG will lose. So we'll end up with people teleporting all over the place. If you implement some kind of check like "you can only move 1 screen per second" or you get resynced won't do anything other than limit the teleport rate.

If GGG start using some kind of "Warden" it will be out-teched by hackers as usual.

Given the way PoE works there's not much to be done, we either have noticable desyncs or hacks.

By the way, I'm really not getting desynced as much as other people seem so I was wondering if I'm playing the system or if my internet connection to GGG is just that good that no packets get lost/stuck?
I think GGG really needs to update the manifesto with a decent explanation on why too many resyncs is actually a bad thing. There are numerous people in this thread who simply don't understand the concept that, even if we could /oos twice a second, it would look like shit and be even less playable.
When Stephen Colbert was killed by HYDRA's Project Insight in 2014, the comedy world lost a hero. Since his life model decoy isn't up to the task, please do not mistake my performance as political discussion. I'm just doing what Steve would have wanted.
I think a good solution to the Desync Dilemma would be to apply a "Forgiveness Filter" on top of the prediction system.
Take this example.
Player clicks a monster, moving to and attacking the monster.
Click is sent through to the Server, asks if the monster was there and was hit.
On the Client, the monster is there.
On the Server, the monster is not.

Currently, this results in a miss as well as the monster teleporting away and possibly attacking the player in the meantime. This is jarring and often damaging to the player.

With the Forgiveness Filter Client-Side results are favored, so the Server (upon realizing the monster is no longer there) metaphorically "shrugs" and treats the monster as hit before relocating it or even going so far as updating its "real" position to where the Client portrayed it in the first place.

Seeing as a player cannot feasibly react to the Server's accurate representation of the game, it doesn't make sense to punish them when the gap between Client-Server is dramatically increased. Instead, provide some amount of leeway for players.
Now, attacking where a monster was indeed located... five seconds ago... should not kill the monster, obviously. The Forgiveness Period would be significantly smaller, likely under one second. Tweaking is necessary, obviously. The FP could also increase or decrease based on the ping of any given client, to account for networks that Desync more than others.

Applying this system the other way around too, with monster>player attacks, would work wonders.
When the server Desyncs and a player is located somewhere different from where it thinks they should be, they teleport to where it's most "correct". This is usually in the middle of a pack of mobs who have been attacking you for several seconds, before the Client position even updated. With this new system, the Client position is assumed to be the right one, and any damage taken while Desynced is ignored. This would completely eliminate Desync deaths, which would be a godsend.

The downside to this system is that the other end, the enemies, would be consumed by a burning hatred for the player. He keeps teleporting around and seems to hit with melee from half a screen away! They would group around the player, only to realize that he's already halfway to the Waypoint! NOT FAIR GGG, NOT FAIR. Oh wait, NPCs don't have emotions... Ha.

I concede that I have no idea how GGG would program this into the netcode, and keeping multiplayer locations cohesive may be an issue, but it is certainly not an insurmountable goal. If anyone could explain exactly how this would be impossible, please do so.
*You call into the void. You hear a sound in the distance.*
Desync on the mana pool is really bad.
This happens when the cost of a spell is slightly lower than your mana pool.

While using a pot you will always end up wasting ALL of your mana pots to cast your zombies for example because the pot will disable itself even after you cast the spell slightly before mana fills.

Also the pool will sometimes show full but not cast the spell and use your mana client side.

Its hard to describe but easily noticeable and very annoying.

If mana is used split seconds after the pool is full it should continue to fill for the duration of the pot. This would help?
Last edited by RootCookie on Jun 12, 2014, 6:32:58 AM
"
RootCookie wrote:
Desync on the mana pool is really bad.
This happens when the cost of a spell is slightly lower than your mana pool.
While using a pot you will always end up wasting ALL of your mana pots to cast your zombies for example because the pot will disable itself even after you cast the spell slightly before mana fills.
Also the pool will sometimes show full but not cast the spell and use your mana client side.
Its hard to describe but easily noticeable and very annoying.
If mana is used split seconds after the pool is full it should continue to fill for the duration of the pot. This would help?


It is annoying.
I don't think that a resource reaching its cap should totally disable a flask, it should just render its effects null while full, and stop when the duration ends. This results in literally the same gameplay, but without the frustration of wasted pots.
*You call into the void. You hear a sound in the distance.*
copy/pasting my post in Feedback that I titled
"I really want to take PoE seriously"

I haven't played for a little while mainly cause I'm just waiting for the next big content update, not having friends who happen to play PoE (the rest of the story may hazard a guess as to why). So I log on, I'm doing some quest in A3 merciless, getting the decanter spiritus I think.

I find a rare strongbox, ID it, it has: 2000% increased rarity, firestorm, curses you, and some other shit I forget which.

I open it and immediately pop a quicksilver and run away. I'm quickly out of harm's way and happily start to turn around to face the mass of monsters when POOF! Rubberbanded right back in the middle of the group. I start taking a shitload of damage but I pop my potions, and manage to get out again (I'm playing a pretty frail Shadow) and POOF! Rubberbanded right back in the middle a SECOND time. So I try to make my THIRD escape now while popping whatever's left of my potions and various things to stay alive. I am about to make it out when POOF! Rubberbanded a THIRD fucking time. And then I die.

No, my connection wasn't having any particular trouble at the time. The game does this at least once a half hour and that's when I'm having a lucky day.

In conclusion:
[Removed by Support]. This is a joke and will remain a joke to anyone not cheap enough to "excuse" this shitty prediction model.

(that includes most of my "old school" "hardcore" gamer friends, by the way)
Path of PEW PEW PEW PEW PEW PEW
Last edited by Gary_GGG on Jun 20, 2014, 12:54:20 PM
"
Noobshock wrote:
*SNIP*
In conclusion:
[Removed by Support]. This is a joke and will remain a joke to anyone not cheap enough to "excuse" this shitty prediction model.

(that includes most of my "old school" "hardcore" gamer friends, by the way)


Come on man, there's no reason to be toxic. If you can't play the game as is, don't. If they lose enough of their playerbase to desync they'll have no choice but to address it, likely with a massive rewrite of server architecture.
It IS successful, because there are enough players to support it monetarily. Of course, if ONE rich dude wanted to play he could support it alone, but I'm pretty sure this is a community led effort.

Note that I completely agree that desync/rubberbanding needs to be overhauled. Desync itself is unavoidable, but rubberbanding is not. See my post above where I suggest changes to the system. I think it would work, as the current system doesn't "correct" desync, it punishes players for thinking outside of what the prediction algorithm is capable of, which really is not necessary and is the wrong way to go about things.
*You call into the void. You hear a sound in the distance.*
Last edited by Gary_GGG on Jun 20, 2014, 2:52:14 PM
"
"
Startkabels wrote:

Some interesting background info there.

But when they increase the update rate of entities in a bubble what is the problem with PoE having a lot more entities in general when there would be a bubble around the player that sets the proximity of entities to update?



A lot more entities syncing = a lot more internet traffic.

This might not be much for a handful of players or maybe even a hundred but when you start sending GB's of information around every few milliseconds the internet will die :D

Giving any kind of trust to the client opens it up for cheating and detection will start getting difficult and it's an arms race GGG will lose. So we'll end up with people teleporting all over the place. If you implement some kind of check like "you can only move 1 screen per second" or you get resynced won't do anything other than limit the teleport rate.

If GGG start using some kind of "Warden" it will be out-teched by hackers as usual.

Given the way PoE works there's not much to be done, we either have noticable desyncs or hacks.

By the way, I'm really not getting desynced as much as other people seem so I was wondering if I'm playing the system or if my internet connection to GGG is just that good that no packets get lost/stuck?


As I said before: There is a difference between cheat prevention and cheat detection. PoE currently goes for prevention, i.e. all decisions are made by the server and therefore, clients cannot cheat even for a second. I think you can still have the same amount of security and a much better user experience if the client is allowed to make at least some decisions (like the position of your own character) and the server validates them.

For this to work, the server must not only know the outcome of the client's decision, but also everything that influenced that decision, i.e. what server commands had already arrived when the decision was made, and what input came from the user. With this, the server can just feed those inputs into the same logic that the client is using and check that it receives the same result. If it computes some other outcome, it means that the client must be cheating.

So, yes, cheaters would be able to teleport around wildly, but a second later, they'd be banned.

This becomes more complex if the game uses an unreliable protocol for its messages and the client can process server events out-of-order, but with some extra effort, it should still be feasible.

Edit: One drawback of this approach is that some changes that can currently be applied purely server-side would require client updates. As long as the client only handles movement, I can't think of anything (but of course I don't know the source code). Even then, I think we would all gladly download a couple extra updates now and then if this fixes most forms of desync.
FilterCloud: https://filter.poe.gg
Filter Debugger: https://bschug.github.io/poedit/poedit.html
Last edited by gehirnmutant on Jun 18, 2014, 5:40:10 PM

Report Forum Post

Report Account:

Report Type

Additional Info