This spawned after my brother proposed it, we discussed it intensely and I realized I had a very similar idea years ago while playing Day of defeat, but I never thought of doing that in Soldat or in any other game. Now it seems very intriguing.
The idea is called seamless servers, as in seamless textures (textures that when joined in groups have no apparent beginning or end). Let’s discuss the simplest case based on this picture:
Three servers (A, B, C) are joined together creating a seamless server. For the outside world they are seen as one. For example if a player opens the server browser this junction is seen as one server, let’s call this a game node. Players instead of joining a single server join a game node.
Server A runs ‘map A’ (green rectangle area). Server B runs ‘map B’ (blue). Server C runs ‘map C’ (red). These maps are constant and don’t change unless all three are changed at once to a different set of maps ABC.
On joining, as a red team member, the player arrives on server A. Through game progress he can move between servers, as in the example he can move forward according to the game flow. He starts on the left side and when reaching the right edge of the map he can switch servers and move to server B (blue rectangle). This is done instantly, because all servers know about the player, so there is no long connecting, and the map size is really small so they can be held in memory. The player reaches the edge, zap, he is on the other server (map).
What to do with this? I have several cool gameplay ideas and features for this:
- Conquest mode
This was the idea I had with Day of defeat. Imagine a large city. A city to be conquered by an army must move from sector to sector and win each of them. A city is a bunch of sectors, each sector is a map, each map is running on a separate server, all joined together in a seamless server. On the image above you can see red and blue dots, these are flags to be conquered. If all flags are taken on a map the players spawn and play on the server where the conflict is not yet defined (server B). The game is ended if a team conquers all sectors.
- RPG mode
Role-playing and long hours of play on one server will make a lot of sense with this. This will be one big world with different maps. Players will move between servers according to their experience. So at start a player would join a noob map and move from there. This would be exactly as a Massive-Multiplayer game but of course much cooler.
- Goodbye lobby server
Imagine a multiplayer game without a server browser. Anything like that out there? I don’t think so. Let’s say every single server in the world would be joined creating one game node, or several, for example one for each continent ‘(to solve ping issues; one game node for Europe, one for North America etc.). In each node there would be hundreds of servers. The way you would travel between servers would be through portals. Each server would link to other servers and in different parts of maps there would be little portals through which you could instantly get to another server. Of course these portals would have little info drawn on them like ping, number of players, map would be seen just by looking through the portal. Imagine chasing each other not just on one map but through several servers and maps. You could hide on a different server or go help your buddy on a different one, all without exiting the game once, all realtime.
Of course there is much much more to this. I won’t write about the technical aspect of this because it is boring. The thing that matters is that this can be done. Definitely I want to try this out in my next game. In the meantime it can be done in Soldat.
What a seamless server needs is:
– a powerful host to setup 2 or more servers.
– specifically designed maps which would act as one (or just split an existing one)
– a script which would detect if a player reaches the edge of a map
– disconnect the player and make him join again on the next server (this can’t be done but I can make it in 5 minutes for version 1.4.2 (feature added))
What do you think?