Technical solution to eliminate desync in single-player sessions
" You are still misunderstanding the way the seed works. Yes, you could predict the damage of your next hit, but you could NOT 'change' the damage of your next hit. Your client must adhere to the seed. " The client can control the order of events, but it cannot 'assign specific numbers' to events. There is not a 'pool of random numbers', its a deterministic seed. You are misunderstanding the nature of how this works. " Currently this amount of data is being sent back and forth between the client. My solution proposes that the client streams data to the server and that the server does not need to send data back to the client. This will significantly reduce the amount of bandwidth required. " I addressed this in my previous post. | |
" You are misunderstanding how the deterministic seed works. Your client can't make the boss 'reroll' his attack/crit without corrupting the entire snapshot. | |
" Packet loss is completely different from a full lapse in the data stream. This data stream would utilize a TCP stream, whereas the current system relies heavily on UDP packets. I do appreciate you playing devil's advocate ScrotieMcB, because I am looking for someone that can refute this solution. I know that you want desync to be eliminated as much as me, so your critical feedback is definitely necessary to finding a solution. And I certainly do not want cheating to be possible, so that's why I have put a lot of thought into making this system work while minimizing any chance of cheating. Last edited by qwave on Nov 18, 2013, 1:37:05 AM
| |
" That depends on how many things you allow to modify the RNG state, how often your updates need to be sent up to the server (needs to be properly addressed still), etc. IGN: SplitEpimorphism
|
|
"Bullshit. It is a pool of numbers. Deterministic seed #XXXXXXX = RandomNumber1, RandomNumber2, RandomNumber3, RandomNumber4, ... When you have a seed, a deterministic random number generator is no longer truly random, it's deterministic. It's a specific set of numbers, and when the client can order events, it's a pool of numbers which can be ordered as it wishes so long as it knows the seed in advance. Just in case you didn't know this already, GGG already sends the client a random seed for the map layout of an instance. So guess what? We have fully functioning maphacks in the game right now. That is just what happens when you give seeds to the client. 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.
|
|
Yeah, it would be extremely difficult to modify the RNG state without generating completing new permutations of data. As long as the RNG state only changes when you perform actions, then it will be virtually impossible to undo full seconds of snapshot because the server has already received the stream.
| |
I'm not playing devil's advocate. I'm playing fuck this suggestion. Because fuck this suggestion.
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.
|
|
" You're not rerolling, you're changing the order of events to distribute more good rolls to the player. | |
" What's the granularity of the client->server updates? If each action is streamed with timestamp, you could prematurely cut off the stream upon encountering a bad result, after computing the bad result. You hypothetically would have the the ability to undo anything within a certain time window. With better connections you can guarantee a smaller window, but I'm not sure how small. The above example given of possibly just-barely-avoiding an incoming crit could fall into that bad case space. IGN: SplitEpimorphism
|
|
" Scrotie, I appreciate your criticism, but you still have a misunderstanding on how this 'pool of numbers' is used. Lets assume your pool of numbers are: 0.52, 0.1, 0.9, 0.33 This means that you would have to fabricate a situation in which these randomly generated numbers are used to generate random numbers in your favor. To further reduce the likelyhood of doctoring the numbers, the server could send a seed for EACH type of action. This would make it even more difficult to perform a series of actions with a favorable outcome. |