There is a combination of client behaviours that lead to incredibly frustrating blunders when inputting moves under time pressure.
- There is a delay between making a move and being able to interact with new things created by the move. For example, after moving a minion or general, there is a delay before you can attack with it.
- The turn ends before the turn timer runs out and the turn timer sound ends.
- Both of these timings seem to be effected by the network conditions, causing them to be inconsistent.
I’m assuming the client waits to hear back from the server to learn about the new game state before accepting more input. This makes sense, as sometimes the client can’t know the outcome. It seems that the client also waits to hear from the server that your turn is over before stopping the turn timer sound.
Combine these behaviours together and you have a recipe for disaster:
- If your inputs are too quick, they will be completely ignored. That is, you’ve clicked in all the right places in the right order, but your dudes didn’t attack.
- If your inputs are too slow, you get told “you have run out of time” when your clicks happened before the timer was out and during the turn timer sound.
Because the client purports to accept inputs immediately with its system for accepting inputs before the animations resolve and because it purports to know when your turn will end, both of those situations feel so bad as a player. It feels like game is incompetent in the first case and cheating in the second.
There a few things that would help to avoid these outcomes:
- The simplest thing to do would be to have the client predict the end of your turn and present it conservatively. That is, when there are 30 seconds left start a timer for (30 seconds - server latency - some buffer) and have the timer and sound actually end at that time. The timer that is presented to the player is what the player is training against, when they are learning how much time they need to input their moves.
- Another change that would help a great deal would be to grant a small amount of bonus time for every move input right at the end of the timer. This would ensure that a player cannot run out of time if they are inputting their moves about as fast as the client is accepting them.
- The last thing I can suggest is to increase the number of things that the client confidently predicts allowing follow up input immediately. This seems like a lot more work though, and fixes fewer cases.
I probably should rope less, but every time I figure out decent move in a desperate situation in the nick of time only to have the game say “you got in before the bell, but that wasn’t quick enough”, or every time I fail to navigate an Abyssian swarm because I had to wait a half second between each move, I feel like flipping my desk.