Etiquette of Multiplayer

Are there any standard rules for multiplayer games? Particularly in regards to how much control the host has:

For instance

  1. Is it only the host player who should be able to start the game?
  2. In a multiplayer race after the first person has crossed the finish line what happens next?
    a) Wait until (possibly forever) for the other players to cross?
    b) Allow 1 minute for other players?
    c) Allow the host to veto and move on to the next track? (But then this messes up scores for other players)
  3. If the host decides to quit, should the game end or the hosting transfer to another player?
    If the host holds all the scores and decides to quit, then all the scores will be lost. Unless all clients periodically update a list of everyone elses scores.

I would be interested if there is a standard way in the gaming community which is considered the proper way of doing things and which things are considered bad form or impolite.

*By the way, this is assuming that the host is a player on a normal machine and the server just does matchmaking.

For most of these, it really depends on the game itself. When making multiplayer, try to make the game as seamless and painless for all of the players as possible. It really depends on what you think is best for your particular game.

  1. You can do a few different solutions for this. You can ether make it so the host starts the game when they want, the game starts when ether one or a majority of the players “ready up”, or you can make it so that the game starts immediately as soon as the matchmaker organizes the game.

  2. This also depends on the game. One of the best solutions for a racing game can be to just give the other players a set time to get to the finish and then calculate the finishing time depending on distance from the finish for the players who have not crossed on time. Again, this would only be one solution that doesn’t force all of the other players wait around forever if someone doesn’t know what they’re doing.

  3. This one is a bit more complicated. For a solution to this one, I would create my own algorithm that would determine the order at which player’s will be tested to see who should be the next host if the current one were to drop the game. This solution is a lot more complicated, but totally doable. It would also require an algorithm that would come up with the same results for all of the clients connected because they most likely will not be able to communicate until they all find the best host and connect to their game. While doing something like this, the game would most likely pause while telling the user that it is migrating host. Since in unity, all game objects are also stored per-client as they are instantiated, it would also ease up with the difficulties of having to completely re-construct the world. This one, however, would still be difficult to make. You could easily just disconnect all clients and add a “Disconnected from host” message appear or something.