I’ve been thinking lately about the problem of multiplayer IF. Since I am not aware of any tools that handle this already, I’m forced to consider ways to kludge a faux-multiplayer out of existing structures.
Solution: Build a single player game with the ability to add NPCs that you control. At key moments, particularly when outcomes are interdependent on both your moves and the NPC’s, you choose the NPC’s actions also. Both players download the same client and coordinate their moves somehow (text messages, chat room, IM, whatever). At those key moves, you’ll get an encoded sync string and share it with the other player. The string contains all the essential variables for the moves you made that affect the other player’s world (you got the silver key, talked to the troll, unlocked the musty treasure chest, etc) and skips the things that are irrelevant (you examined the brass door, tried opening the jar of baby dragon food, etc).
You could even personalize your character, RPG style, and share a character string that encoded all your character’s possessions, stats, and traits; and depending on the kind of game, your personal preferences (eg, my character is hetero female, no in-game flirting or violence allowed) to delimit the choices the other player can take against your character. A checksum could verify that the other person entered your character string faithfully.
Here’s how this addresses some problems of multiplayer.
- Disconnections. If you are forced to wait for the other player’s every move, you can always proceed and choose an action for the other player. Also prevents trolls from going AFK just to annoy you.
- Lag. For the most part, the only lag is the difference in reading speed between the players.
- Game lobbies. This would be handled by whatever communication platform the players choose.
- Policing unsavory online social behavior. The players can only interact within the game in ways that are predesigned. Any personal communication in the chat room or IM is outside the game’s scope.
Here are problems that are created:
- Humans are responsible for syncing the two clients. If one player forgets, or misses the other player’s sync request, the game state of the two clients will diverge. It may be necessary to enforce a sync code exchange before certain events, eg, you can’t enter the room with the drawbridge without imputing a code (which would indicate whether the other player lowered it). Could also implement a checksum to make sure the other player entered your code; you can’t proceed until they acknowledge they’ve got your latest moves.
- Codes would have to be verified. If game states can be changed by entering a code, you’d have to prevent players from simply using the codes without doing the work. The game would have to say, “Wait, the NPC can’t have got the crown yet. The king is alive and the brass door is locked, and the NPC is still in the starting room.” Sure, you could still game a system like that by entering the codes at the proper time, but it wouldn’t be significantly easier than just playing the game.
- Random numbers would either have to be pregenerated or predictive, or shared in an encoded format so players don’t get to simply send the code for the desired die roll.