ODAMEX
Ready Mode/Round System
Design Document
[What is the Ready Mode/Round System?]The purpose of the Ready Mode/Round system is to allow server administrators the option to offer players a more controlled, competitive environment.
[Research]The idea of ready mode/round system stems from mods for various modern games, perhaps most notably Quake 3's CPMA. Skulltag also has a similar, yet different design than the system detailed in this document. Alexmax's input (found in
bug 238) was also reviewed for this draft.
[Server Implementation]This system calls for the server to have four different states if the ready mode is enabled.
1) Warm up/Join
2) Begin round
3) End round
4) End Game
{Detailed Explanations of the Four States}1) Warm up/JoinThe warm up/join state is arguably the meat of this feature. In the warm up mode, players will get in line to play. If they are due to play in the upcoming round, players will be able to play freely without scoring until one of two conditions are met:
a) A server determined time limit on warm up is met
b) All players set their status to "ready"
Once one of these conditions is met by players in warm up mode, the engine will move on to begin the round.
2) Begin RoundOnce this state is reached, the server must soft reset the map and spawn all players on the same tic.
The soft reset calls for the map to return to its original state without an engine reload of the map. This includes sector states, items, and anything else dynamic found within a map. When this is acheived, all players should spawn in immediately at the same time.
3) End RoundTo end the round, conditions that normally would end a game without ready mode (fraglimit, timelimit, scorelimit) should still apply. If the new ready mode cvar, "sv_readymode" is set to 1, this will simply end the round and return the game to the warm up/join state.
If other players are waiting in the queue (this applies more heavily to 1on1 type play), the losing players are knocked out of the queue and others waiting enter ready mode with those that won the round. In a team based game, players may not be ejected from their teams.
4) End GameThe game can finally end if a new cvar, "roundlimit", is met. Once the specified amount of rounds have been played, the game will move to intermission and the next map in the maplist. If "roundlimit" is set to 0, the game will repeat states 1 through 3.
Maps can still be changed with the (proposed) votemap command.
[Client Implementation]Client implementation calls for clients to be able to do the following:
1) Join the queue
2) Declare their client "ready" in warm up mode.
3) Receive server information for rounds won and post them to scoreboard.
4) Be able to be forced back into spectator/wait mode upon a loss.
This design document is not entirely complete. Please offer input.