A fix to RTS
Posted: Thu Jan 31, 2019 6:34 pm
I think we have a relatively good fix to avoid RTS. However, coding is needed, but with my low expertise, it might be achievable.
It is basically a very softened version of "players program orders and orders execute simultaneously". Well, they don't, but the effect is somewhat similar.
The solution is, simply, the server creates a delay between a unit being moved and all other clients receiving the information. So, the short version:
1. Player A moves a unit. Information reaches the server and the player immediately sees the result of his action.
2. Server delays relaying information to all other clients for X seconds (I estimate that a good X is between 10 and 60, but anything can be debated)
3. In case another player moves his unit into a tile that player A's unit just moved (and he doesn't see it), a window pops up: "There has been enemy movement reported very recently, situation is unclear; Proceed? (Y/N)" If Y, player B's unit moves in and standard stuff happens. If N, nothing happens. Naturally, Player A doesn't see Player B's unit until *his* X seconds are up.
This may seem somewhat problematic, but similar thing happens when you set GoTo and your unit stumbles upon an unexpected enemy unit. This only has a slightly different resolving mechanism.
Yes, this way the player who plays first has a slight advantage, but it is impossible for some players in some situations NOT having some kind of advantage. It is basically nullified by the fact taht the second player having the advantage of being able to fully react when the situation is fully clear.
Possible abuses:
If X is set to more, like 60 seconds, a player coudl endlessly delay others by moving a unit every 60 seconds. To prevent this, it could be set that only the first counter starts from full 60, and others start from significantly less. The important thing is that the First Player needs to have enough time to finish the move he started without being interrupted in the middle of the move.
It is basically a very softened version of "players program orders and orders execute simultaneously". Well, they don't, but the effect is somewhat similar.
The solution is, simply, the server creates a delay between a unit being moved and all other clients receiving the information. So, the short version:
1. Player A moves a unit. Information reaches the server and the player immediately sees the result of his action.
2. Server delays relaying information to all other clients for X seconds (I estimate that a good X is between 10 and 60, but anything can be debated)
3. In case another player moves his unit into a tile that player A's unit just moved (and he doesn't see it), a window pops up: "There has been enemy movement reported very recently, situation is unclear; Proceed? (Y/N)" If Y, player B's unit moves in and standard stuff happens. If N, nothing happens. Naturally, Player A doesn't see Player B's unit until *his* X seconds are up.
This may seem somewhat problematic, but similar thing happens when you set GoTo and your unit stumbles upon an unexpected enemy unit. This only has a slightly different resolving mechanism.
Yes, this way the player who plays first has a slight advantage, but it is impossible for some players in some situations NOT having some kind of advantage. It is basically nullified by the fact taht the second player having the advantage of being able to fully react when the situation is fully clear.
Possible abuses:
If X is set to more, like 60 seconds, a player coudl endlessly delay others by moving a unit every 60 seconds. To prevent this, it could be set that only the first counter starts from full 60, and others start from significantly less. The important thing is that the First Player needs to have enough time to finish the move he started without being interrupted in the middle of the move.