Handling object pickup "races" in multiplayer coop?

Started by
3 comments, last by JensB 11 years, 1 month ago

This is partially a design question, but it's one driven by the realities of networked play.

I'm developing a Flash, multiplayer coop game, very similar to Gauntlet. One issue that I foresee being a problem is more than one player going for the same object (say a potion).

In order to make the game feel as responsive as possible, players' entities are moved locally on the client instantly, with the server only correcting the player if they did something impossible. Most of the time this isn't an issue, but where it will be an issue is if two players both try to pick up the same potion. The server currently will give the potion to whichever player arrives at the potion first, but from a player's perspective they may see the potion go to another player who seems farther from it.

I expect this will be annoying to the players and look like an unfair bug.

I've thought of one solution: have objects "drop" from an entity (like a chest). Every player will see the object and every player will be allowed to pick up the same object (possibly within a time limit). The object will only disappear from the client's view once they pick it up or the time limit expires.

Anyone have a different suggestion?

Advertisement
FPS games have this all the time. Health packs, quad damage, etc.

The way they solve it is to play the effect locally (sound effect, particle system specific to the object, etc) but to show the actual game effects only as a result of the server decision.

If you and a guy is racing for the quad damage, you can think you got it, hear the "quad damage" sound effect, but the server text message says "So-and-so got Quad Damage!" and you notice that you do not have it yourself. The way you internalize this is that, yes, you would hear the sound and see the effects even if so-and-so was there a split second before you.
enum Bool { True, False, FileNotFound };

Thanks for the suggestion.

I'm not sure if that will work for this game (typical latency will be higher than most FPS), but I should be able to test that idea shortly and see if it feels okay.

It's just part and parcel of the network latency. As long as the pick up is only picked up once,

Usually what would happen is that you would have a local 'pick up' animation, while your pick up request is in transit (client -> 'Can I pick that up?' -> server).

Then the server reply will tell you if you have picked it up or if you have been 'denied'.

Everything is better with Metal.

Diablo 3 gives all players their own loot, which has both upsides and downsides from a design perspective, but it would solve the problem stated.

// Jens

This topic is closed to new replies.

Advertisement