Idea: Implement a possibly-less-responsible but reliable multiplayer code. Maybe, for simplicity, an optional distributed transaction mode for game commands. I'd rather enjoy playing while waiting extra 200ms for a reaction to my move command, than not play multiplayer at all due to constant desyncs.
Background: my partner and I are always looking for nice 4x games to play together, and we both loved Humankind and Endless Space 2 in single player and would probably play it for hundreds of hours. Unfortunately, both of these games are impossible for us to play together and enjoy due to desync problems (and crashes). For Humankind especially this happened to us since lunch; for ES2, we even had once a race condition on game load, where loading a game on a faster machine caused reliable crashes due to some missing references to game objects, and switching host allowed us to play. Now, despite replacing our machines since, when we recently tried Humanking MP again, we had to abort a game after laboring through desync-and-reload on every turn for multiple turns. We have stable fiber connections, play in the same room, and have reasonable machines.
Given these seem to happen to many players for many games, I don't expect individual bugfixes to bring reliable multiplayer soon. I get it, simultaneous moves and out-of-order/delayed commands mean perfect successful merge of conflicting moves between human and AI players cannot always be found, and that means either reload or undo of some commands, and these merges and undos and potentially binding conflict time windows may be complicated to code for every single possible conflict, if that is how it is done (and seems like it) - but a net code paradigm that results in an unplayable game by design or by unmaintainable bugginess is clearly in the wrong, and a huge shame.
That's why I propose the simplest possible "commit before executing move" net code mode to back into all games sharing these issues - just send the commands to a transactional distributed queue first, and let all games hang while waiting for acks. Even without performance hacks, it should be reliable for many players, especially on same network, and errors much easier to handle. It's very little UX/performance lost compared to not trusting the game to let us play, and the reloaded state to reflect integral state of our actions.
Disclaimer: yes, I don't know how the net code works and am speculating about how the fix would look like, but the problem has been handled well before elsewhere, and it clearly is not working for many people across many games over the years. Feel free to read this post as "please fix your MP for unreliable connections, possibly make your paradigm race-free by design rather than by luck, and then take our money". I wish we could play EL2 :) Huge gratitude for what all the developers and designers are doing!
Comments
Moderate comment
Annotate comment