TLDR: there should be a multiplayer option to reduce the interaction with the server to make multiplayer playable for isolated/high latency players
What (same base functionality as multiplayer but different implementation):
A client specific multiplayer option where players primarily interact with a single player copy of the server which is then merged with the server through change requests from the client and primarily building and player information updates from the server (ie only player locations, enemy counts, building updates and in world item locations need correspondence from the server).
Definitions:
- Server: The player/device that is hosting the game for the multiplayer session.
- Client: A player/device connected to the server.
- Update: The server sends a packet (or set of packets) at a relatively infrequent interval (probably between 0.5-2 seconds) to the client containing the information required to sync the client to the state of the server when the packet was created.
- Request: A packet containing a request for an item or building to be added or a removed from a building or the world. if sent to the server, these requests can be ignored and reversed on the client.
- Enemies are spawned by server and controlled locally and then kills for mobile enemies are added to server and numbers updated to client.
- Bases, and worms are treated as buildings (ie kills sent in update request).
- The local player interacts directly with a single player world (there is no influence on movement due to updates from the server).
- Other player's locations are shared with the client as allowed by ping (not really a concern).
- If a player is controlling a vehicle, it acts locally, otherwise its coordinates are sent in each update from the server.
- Buildings are built on the local world immediately and stored as build requests to be sent to the server (items removed from inventory on request success).
- If there is an existing building in that position on the server, the request is ignored.
- Information about buildings built on the server since the last update is provided to the client and thus any conflicting buildings are removed.
- Buildings act according to server and items given to or remove from them are treated as requests
- Inventories are handled locally and interactions are added as requests to the server.
- picking up items is done locally and a request for an equivalent number of items to be removed is sent to the server (polished in return update).
Why:
Playing with poor latency (such as satellite internet for people living in remote areas) can make the game practically unplayable, with the player not being able to move properly, vehicle (car, tank, etc) control being a set and pray, waiting almost a second for any inventory input aspect to take affect and combat generally isn't viable at all.