Technical solution to eliminate desync in single-player sessions

(Going to bed, obligatory bump)
IGN: SplitEpimorphism
"
qwave wrote:


I'm not sure what you mean by this. The proposal would move very little code from the server to the client, enabling the client to perform certain calculations. The size of such a patch would likely be under a megabyte. This is because this proposal does not involve any assets.


Unfortunately when something is developed like this, you cannot simply "move some code" from a server side solution in order to create a client side solution. There is a mountain of algorithms, compatibility testing, error handling etc in between.



"
This has nothing to do with the size of the team. And again, im not saying that the game should be 'single player'. I'm saying that the game client should be able to perform many of the calculations that the server is responsible for.


Their size is relative because they don't have the same amount of cash to spend on infrastructure. Client "performing calcs" is very vague.


"
Fixing balance issues is one thing, I do not believe they can fix desync unless they approach it with a solution like this.


What are you basing this on?
Last edited by Baxta#3149 on Nov 18, 2013, 3:33:48 AM
"
It sounds technically possible. But yeah, it still wouldn't resolve the desync problem getting us killed if we party, and going solo later in the game without a stellar build/gear is kind of suicide.


Baby steps! I think this proposal is the first major step that will dramatically reduce some of the problems with desync. I know of some techniques to reduce desync in multiplayer/party play, but I believe it's significantly more complicated and not a 'low hanging fruit' like this proposal offers.

Perhaps going solo in late game without stellar gear would be significantly more possible without worrying about lag and desync.
The Only fix for desync; to to have offline play enabled, toons can never interact online. why isn't this done? well probably because its much easier for 3rd parties to reverse engineer the games code, which may (would) lead to more hacking and such. key word is easier.

so the question remains... why isn't it done.
"
Baxta wrote:
[...]


"
Fixing balance issues is one thing, I do not believe they can fix desync unless they approach it with a solution like this.


What are you basing this on?

Well, they kinda claimed this themselves with their past
explanation of where the desync derives from in this game.


Kinda dig the suggestion, I would however propose to stress out in the OP that only combat related calculations should be affected by this technical solution. Also the ideas concerning hardcore death abuses should be included. If a developer decides to look into this thread, I doubt he'll have the time at his hands to fully review the complete thread.
Last edited by Nightmare90#4217 on Nov 18, 2013, 3:40:23 AM
"
Unfortunately when something is developed like this, you cannot simply "move some code" from a server side solution in order to create a client side solution. There is a mountain of algorithms, compatibility testing, error handling etc in between.


The nature of the proposed changes primarily involve calculations involving combat, pathing, and map generation. This type of code is not as volatile as you suggest if they've followed good design patterns, and should not introduce a 'mountain of issues'.



"
What are you basing this on?


I'm basing it on my experiences as senior software architect. From the get-go, I have stated that I am not an expert on this particular topic, but I am offering whatever knowledge I can in order to help facilitate a solution. I think this is far more constructive than complaining that a problem exists.
"
Kinda dig the suggestion, I would however propose to stress out in the OP that only combat related calculations should be affected by this technical solution. Also the ideas concerning hardcore death abuses should be included. If a developer decides to look into this thread, I doubt he'll have the time at his hands to fully review the complete thread.


I'll modify the main post to include the answer to hardcore deaths and combat calculations.
"
qwave wrote:
I'm not sure if this has been posted before, but I haven't found anything. I am by no means an expert on this matter, I am only offering my 2 cents based on my current software development knowledge. I have lost many hardcore characters due to desync issues, and I feel strongly that the desync problems can be fixed with a little bit of re-architecture. It is possible that I am wrong about the cause of the desync issues, but I believe this is fairly accurate.

I believe that desync can be eliminated in single-player instances. In fact, I think desync is mostly just a problem during single-player play when I do not have friends to support me and protect me during lag/disconnects.


I. PoE is not an MMORPG, it's a fast-paced action RPG

The client currently acts as a 'dumb terminal' which is continually streamed the game state from the server. The client's only responsibility is to render the game state and send input to the server. The client performs very little actual calculations, and instead relies almost 100% on the server to validate the game state. This means that the server is likely running an ongoing simulation of the game instance and is continually notifying the client of changes to the state based. Even introductions of small amounts of latency can cause desyncs (forcing the game client to the current authoritative game state). This is the common MMORPG design pattern due to the number of connected clients that are simultaneously affecting the world state.


II. Client should be a full authority during single player instances

Desync can be 100% eliminated in single-player instances by granting the game client full authority for a majority of the game interactions. To technically accomplish this safely, here is a breakdown of the steps to achieve it:

A. When the player enters a new instance, the server transmits a timestamp and seed so that the client can accurately generate portions of the game map and content without the server's authority. This seed is only used to generate all random numbers which result in combat and exploration.. The client continually streams the game state to the server as 'snapshots', but the server does not validate the state, it just stores it in case there is a disconnect. The server's only responsibility at this point is to store the snapshots for later review.

B. Once the player leaves the instance (through TP or zoning), the server performs a full authoritative check on the player's complete play-through of the zone using the snapshots. As long as the player was not cheating, the server will be able to validate that every action was accurate and produced a result based on the generated seed. This means that it more or less 'replays' the simulation in server memory.


III. If the client is authoritative, wouldn't that allow players to cheat?

A. Yes, the player could cheat during their play. However, once the player left the instance/zone, the server would recognize the cheated play and flag the account. It would then rollback the character's state prior to when they entered the instance.

B. The random seed would be changing so quickly that a memory reader would not be able to feed the player enough data to accurately estimate item drops/monsters. Loot drops could be handled exclusively by the server in order to prevent doctoring of the game state and seed to facilitate optimal scenarios.

C. Crafting/looting would be 100% server-side, because these actions do not result in desync. In fact, any action that the player performs (such as chat) do not need to be simulated by the client.

IV. What happens if other players enter the instance?

Once another player enters the zone, the server will need to immediately perform the authoritative game state check. Once multiplayer is introduced, the above solution is not optimal, and will need to revert to the current architectural approach.


V. Are there any other pros/cons to this proposed system?

As a result of implementing this system, Path of Exile would also gain:

- A full combat log, which many have asked for! This is because the client would be responsible for generating snapshots.

- A replay system, which I also believe would be absolutely amazing. The snapshots themselves are more or less 'replays' that contain the snapshot data, allowing the game client to 'play them back' at a later time.

- Reduced bandwidth and costs. This is because the server would not need to continually process state data and send it back to the client. It would only need to evaluate the state once.

- Happier players and more revenue! The desync and lag has caused a lot of complaints from the community, especially on hardcore. I believe that by reducing the number of desync deaths, the playerbase will expand.


VI. How can multiplayer desync be improved?

This topic is not designed to address desync issues during multiplayer play. Synchronization in multiplayer scenarios is far more complex, and reflects the development team's current approach to the network architecture. This game was obviously meant for multiplayer, but many people play solo, especially when leveling up and during races. Personally, I believe that desync is -less- of an issue in multiplayer because there are other players to support you.


yeah , not happening , God Mode on
top kek
"
yeah , not happening , God Mode on


You obviously didn't read/understand the post. If you use a hack of any kind, the server would detect it and ban you.
OP, you seem to firm that knowing the deterministic sequence of numbers cannot be used to gain advantage. I do not agree, but I may be misunderstanding what you mean by it. If you could, please demonstrate some sample logs using a sequence.

My stand on it

Too risky. As long as a piece of deterministic information is given to the client, it can be used, no matter how obscure it is. The safest is by doing all calculations server side.
I need more purple titles

Report Forum Post

Report Account:

Report Type

Additional Info