I feel that I need to start off by pointing out that I’d absolutely love to do multiplayer. I really would. Co-op, hosted/dedicated world servers, join-at-any-time worlds hosted by single players, or just a simple deathmatch: I would really, really love to do multiplayer. Unfortunately, I’ve come to the conclusion that I can’t.
I spent all Sunday and a fair amount of Saturday ripping apart my code and making it play nice across a network, and while it’s a little complicated at first, once I got the four or five base concepts down, I was sailing. Netcode isn’t the issue here; the issue is that I can’t figure out how to make multiplayer work from a conceptual standpoint.
Multiplayer games, in general, are extremely good at handling different players in different points in space – it’s what the games are designed to do, and they do it well. Scales range from a handful of players in a room (Quake, Counterstrike), to tens of thousands of players across continents (WoW, ESO) and across entire damn galaxies (EVE). Multiplayer games, however, are designed to actively combat players being in different points in time, something which is absolutely crucial to my game. I tried thinking back to games that dealt with nonuniform timelines, like Max Payne, to see how they dealt with multiplayer, and – predictably enough – they don’t.
As Sunday stretched on and the sun (the real one) started to dip in the sky, I glanced over my two or three hundred new lines of code, and asked myself, “wait, why am I doing this?” – a question I really should have asked myself before I dropped 12 hours worth of effort into those lines. Back in the UDK days, I’d come across this issue before, and had also come down on the side of singleplayer, but during the UDK/UE4 switchover, I had revisited the issue and decided – I don’t remember why – that multiplayer was at least feasable.
So from sunset (again, real one) to about midnight, I dug through my notes and went through about half a notebook’s worth of paper sketching out new ones, and found or came up with the following approaches to multiplayer:
- Traditional Multiplayer (Battlefield, Minecraft) – players join a game hosted on a dedicated server. They spawn into the game with a default state and proceed to run around the gameworld and do things. When they die, they jump forward 20 years to their next-of-kin, and- oh, shit. Now we’ve got different players playing the same game – in the same world – 20 years apart, and players in the relative past can alter the world in ways which would put the future-world in a constant state of change. This won’t work. Either we give the causal reigns of the world to the past-most players, which would turn the world ahead of them in time into an indeterminate clusterfuck of uncollapsed superpositions, or we throw causality out the window and being branching off new worlds every time someone dies, which would technically work, but is more towards multiverse than multiplayer. Okay, traditional multiplayer is out.
- Death-Defeating Co-Op (Gears of War) – two players join a world hosted by one of the two and run around exploring things together. When one dies, the other runs up to and resurrects him or her. This would work if I could figure out a way for it to not break canon right from the get-go. I don’t want players knowing magic, especially something as powerful as Resurrect or Raise Dead right off the bat; I want it to be something the player has to work for. Also, this would require the players to be practically leashed to each other: if they run off in different directions (“you go get wood for a fire, I’ll kill some cows for food” – totally plausible), and both fall off a cliff, they’re both doomed to watch themselves bleed to death. This isn’t fun. Resurrection is out.
- Tourguide Multiplayer – essentially this would be an interactive Let’s Play: the host player opens up their world to the network and people come from far and wide to see it. These other people are free to start their own settlements or go off and do their own thing somewhere else, but since the host’s timeline has priority, if guests die, they don’t respawn. If you think of this as a sort of remote version of Minecraft’s Hardcore mode (except that you get effectively banned from the world upon death instead of the world destroying itself) this idea has some potential. Unfortunately a large amount of that potential is for twattery and general dickheadedness: I know that I, at least once, would probably jump into someone else’s world, light a whole bunch of cows on fire, run into the woods, and watch the flaming bovine burn the host player’s village to the ground while laughing hysterically. It would be fun for me, certainly, but only once or twice, and it would be almost certainly ragequit-inducing if I were on the other end of it. Okay, this idea’s out, but if we keep inching closer and closer to singleplayer, why not just do singleplayer?
- Hand-Me-Down Singleplayer (Dwarf Fortress’ “Boatmurdered”) – players start a world on their own and play in it until they realize that they have made a huge mistake which they cannot fix and will eventually kill them, then sweep some leaves over the mistake to hide it and give the savegame file to a friend to play. I really like this idea, especially when you add in some kind of central repository for savegames and make it easily accessable from within the game itself. Imagine two options within the “New Game” menu: start a blank-slate world, untouched by (actual) humans, or start a new game with a new character and new bloodline, except start it in someone else’s world, possibly far away from where that other human played. The idea of wandering around the world and stumbling across something another (real) human on the other side of the (real) world created hundreds of (ingame) years ago and then abandoned sounds awesome as hell to me. As for the online repo, this offers a way to make Traditional Multiplayer’s multiverse actually work: if the original uploader has control over their their savegame’s timeline, they can decide what’s canon and what isn’t, thereby creating a jumping-off point for a story, giving it to the community, and then shaping it somewhat like a traditional DM. This sounds awesome to me.
Granted, Hand-Me-Down is still in the sketching-out phase, but it sounds absolutely fun as hell to me, and I’d love to play it. For now, this means that I will abandon the client-server codebase and concentrate on singleplayer: I may come back to a more traditional multiplayer setup at some point in the future (for instance, to make the original uploader mentioned above an actual DM capable of spawning monsters into the world or building structures), but for now I’m going to focus my effort on singleplayer.