Technical solution to eliminate desync in single-player sessions
" That's why I said it massively increases complexity, it theoretically it is possible. Practically, I'm starting to agree it might be too difficult to do it in limited time, so it's a right way to go. |
![]() |
" Yeah, I never said it wasn't theoretically possible. From what I can see, this is the only weakness of my proposal. I have mentioned this issue from day 1 of my post. But my main post lists some possible solutions. I would argue that the trade-off is worth it to fix desync. Last edited by qwave#5074 on Nov 21, 2013, 4:41:51 AM
|
![]() |
The problem I see with this solution is that the client could predict the outcome of some actions, such as taking reflect damage. You could prevent the action if it was going to kill you. The random sequence must be kept a secret from the client as well as calculations like damage taken. I believe damage calculation is performed only by the server in the current implementation.
You could also automate actions to avoid damage if you know a monster is going to charge you. |
![]() |
" Honestly, I'd missed the original point of why you put up that code sample. If it was just to show that the client and server can reliably produce the same results, even if based on a PRNG roll, I'd say that that's fairly obvious and doesn't require a code sample. Then again, I've seen enough people claim the contrary in this thread. As far as I can tell your suggestion is still fine up to some issues that Rhys pointed out earlier, particularly that there's some period of time during which the client can compute several states, picking the best outcome before committing to it by sending a packet. For a small window of time that wouldn't seem to matter, because you can't, as a player, make significant enough positioning choices to make a huge difference. Also it seems to be a small sacrifice that would eliminate single player desync (yay!) However, as Rhys said and I've seen written before, there is a very significant action that can be done by the player in any small window: that of the panic logout (or town portal). For whatever reason, GGG doesn't want to put a timer on it. Given that, your suggestion doesn't work. (I think PoE needs at least a short timer for removing oneself from harm for reasons beyond this one.) If since then you've found a way to fix this, I haven't seen it and the code certainly doesn't demonstrate it. Furthermore, there's the cost of code implementation and testing, and limited scope of it being only a solution for single-player that I think makes this solution impractical given the current PoE code infrastructure. (Also confirmed by Rhys as being issues with this suggestion). I also think that this whole discussion illustrates how GGG's dedication to a 100% provably secure simulation, without compromise, in combination with some of the features of PoE, necessitates the desync problem and in my opinion is detrimental to the overall game. It seems that they're being a bit too idealistic about what game they want to make, and need to compromise on either their security mechanism or the gameplay mechanics, because the extent of desync in the game makes things feel shoddy. Ex: I know there's going to be some desync, but why does some monster run at me, with me unable to shoot at him, and stand next to me for 5 seconds before he eventually rubberbands away? 5 seconds is a very long time. This happens exceedingly often in indoor maps with tight corridors. It happens even more with chilled ground, or with cyclone. Or that Dominus unique enemy that uses cyclone and also creates chilled ground underneath him. If desync is an intrinsic problem, they should at least design the game away from skills and environments that exacerbate it. IGN: SplitEpimorphism Last edited by syrioforel#7028 on Nov 21, 2013, 4:51:44 AM
|
![]() |
" Well, let me repeat then what I wrote some 20 pages ago: If a legit client can perform these calculations fast enough to provide fluid gameplay, and you yourself said that the calculations by themselves are not computationally expensive (because animations etc. are), why should it be "too difficult" for a hacked client to calculate and compare dozens, if not hundreds of such calculations? |
![]() |
" Because by hashing in the time of action to the rng seed, it increases the amount of required simulations to thousands and more. To better explain, with the added time hashing, an attack at time T could do 10 damage, but at T+10ms could do 100 damage with the same initial seed. Basically it increases the previously required calculations by a factor of 1000 if we assume that each snapshot contains the player commands over 1 second. |
![]() |
The ability for the client to try to predict things is up to how frequently the seed is rolled on the client. This is up to GGG. My suggestions for this are on the main post, and I also talked about using heuristics if they care that much.
Personally I think getting rid of desync is more important than hackers trying to write a bot. Even the most sophisticated World of Warcraft bots were 1000x less intelligent than this. I know a thing or two about botting, but that's another story. ;-) Last edited by qwave#5074 on Nov 21, 2013, 5:10:15 AM
|
![]() |
" If the RNG is volatile enough, even 5 or 6 variations over a 1s span is enough to produce a significant advantage (e.g. crits, dodge rolls). Some of these can be done in parallel, even. IGN: SplitEpimorphism
|
![]() |
" I agree. GGG doesn't. If they did we wouldn't have these problems. IGN: SplitEpimorphism
|
![]() |
" This is actually true. The point is how much this is exploitable. There could be 3kinds of cheat in PoE 1) Getting insane loot (the proposed architecture has not this problem) 2) Automated game assistant 3) Autonomous bot Point 2 and 3 could be relevant because of competitions for being the 'best' player. However i really don't think that an automated bot can play better than a skilled human. The design and the implementation should be that an automated assistant invalidate the gameplay experience. Technically, the only drawback of the model, if well implemented, is that the client knows the result of next rng-rolls, but it cannot modify it. I would not care if a bot get 10% more loot, as long as desync issue is solved. " I agree. But I also think that a good developer should provide the best solution to the user. This is his work. Desync is the only serious bug in PoE. Consider also that PoE has been released. " I would replace the first 'if' with 'since'. Roma timezone (Italy)
|
![]() |