Warzone2100 / warzone2100

Command the forces of The Project in a battle to rebuild the world after mankind has been nearly destroyed by nuclear missiles. A 100% free and open source real-time strategy game for Windows, macOS, Linux, BSD+
https://wz2100.net
GNU General Public License v2.0
3.17k stars 525 forks source link

Speed Control and Pause in Multiplayer Games #4002

Open razielaka opened 2 months ago

razielaka commented 2 months ago

I often play Warzone 2100 with my son, and we've noticed that late-game stages, especially against AI, can get tedious when you're already powerful enough to win. It would be great if we could change the game speed, and even pause during multiplayer matches for a bathroom break or snack. I seem to remember that SupCom has these features. Even with cheat or debug mode on, the speed can't be changed in MP, not to mention that it's arguable whether changing speed is actually a cheat, and being called a cheater ruins the game for you. I realize that more "professional" matches might not want to have variable speed, but we just want to have fun together.

To prevent unfair use, the system could be implemented in different ways, for example:

  1. Voting System: Players vote to change speed or pause. A majority vote enacts the change.
  2. Pre-Game Option: Allow the host to enable speed control and pause when setting up a game.
  3. Host Controls: Give the host the ability to adjust speed and pause during the game regardless of votes.

Thank you for considering this request!

Chewbakka-Wakka commented 2 months ago

I would supplement another checkbox option to your "Pre-Game Options" being: Set default game speed

IMO most pragmatic would simply be Option 2 initially to implement. I'd factor in that players are to be notified prior to sudden changes dynamically in-game when performed by the host. I.e. "Host increasing / decreasing game speed to X" in 3... 2...1... Last thing players need is being taken by surprise.

mirror176 commented 4 weeks ago

You could make it so each player's speed adjustment counts as a vote and when everyone votes faster/slower. If everyone votes for a change in one direction, the game changes to the smallest requested adjustment. If players don't want to play away from normal speed, they can avoid requesting a speed adjustment. It would make most sense that once a player moves their request toward normal that the speed defaults back to that lesser difference until someone sets normal and its not adjusted.

This would still be a surprise for any player that wasn't the last to request speed move further from normal or the first to request it move back to normal. Surprise could be removed by a delay before changing speed and announcing the change, preferably with a countdown.

Requested speed changes should be announced publicly to all players; they can either request a different game speed too or not as their own choice. There should be a limit and a way to silence speed requests; requested gamespeeds of all players could be displayed as a number on the score page too.

Implementing pause could either be the same as above, or could be an exception where someone can pause the game without others agreeing. Need to decide if count of pauses can be limited in the lobby and if other players can pause.

Disconnecting should be a loss of any speedvote/pause.

A different lobby planned adjustment would be scheduling speed changes so you could start the game slower/faster, change it after initial startup, and later have 1+ scheduled changes to further adjust. This could be more reliably agreed upon by players without it being as unexpected. Could give countdown timer and maybe alerts as the next speed change approaches.

I forget the bug # but changing speed breaks replays.