Avatar

kotaku: Destiny 2 for PC, won't carry over year 1 characters (Destiny)

by Kahzgul, Thursday, September 29, 2016, 06:03 (2765 days ago) @ uberfoop

If you left a game of Halo and were the host, the game would pause and wait for another player to become host. I have never had this happen in Destiny. Why is that?


According to their networking presentation, in PvE they basically just let things play out without authoritative confirmation from the host until a new host is selected. After which point the new host just kind of sorts everything out in real time as things converge back to normal.

This is sometimes what's going on when you can shoot enemies but not kill them. You're a non-host and there's no host. Because there's lots of client trust, the game is okay with it if you keep running around and doing stuff (and it'll later try and reconcile things like your new player location once there's a host), but some host-required actions like enemy kill confirmation aren't being returned.


And this behavior is exactly why it's problematic in pvp. There's too much implicit trust in the clients and there's no host system to act as arbitrator.

You mentioned in your response to me that the same data transfers happen in a traditional host-client pvp scenario. It's different, and I'll try to explain.

For the traditional pvp setup with a host, picture that host as the hub of a many-spoked wheel, where each spoke is the connection to a client. Clients send data to the host that says (I want to move here) or (I'm shooting now) and the host makes it happen and then sends to everyone else (this client moved there and he's shooting now). There are more predictive ways to do this where you send bits of information to the other clients as well, but the key element is that the host dictates to every other system what happens in the game. If you lag while sending "I'm moving" to the host, the host won't get that data so it will assume that you're not moving, and tell the other clients as much, so everyone else sees you standing still and not shooting even though you think you're running and gunning. If they shoot you, you die on their systems and in the game, and as soon as you catch up you will teleport back to where you started lagging and be dead. This system sucks if you have a shit connection, but it is not exploitable via network interference (lag-switching). Also, lagging is generally immediately obvious to the lagger because they stop getting info from the host, which means they see everyone else stop moving at once. The major advantage to this architecture is that if you shoot someone, they will die, even if they are lagging. The only thing that determines your effectiveness in combat is your own connection to the host. Typically, a client-host system also has a hidden "host reliability" tracking setup so hosts who have poor connections or who frequently drop out of games or quit them are weeded out and eventually only reliable players are allowed to be hosts.

The Destiny model is more like a 12 pointed star where every point is connected to every other point. When you move, you send an "I'm moving" packet to every other player, all at once. It's up to each of those systems to interpret that data properly. Also, instead of one system handling everything, it's sort of a weird halfsies split. System A sends "I'm shooting in this vector" and System B sends back "I took damage." From my observations (I'm a 13 year pro tester, these are not lay observations), it appears that System A would actually send "I have created bullets between points A and B" where A is the player's gun and B is where system A thinks those bullets hit something. However, if System B doesn't agree that player B is standing where System A thinks he was standing, it simply won't return any damage as registered. This is one of the most frustrating parts of destiny PvP. When one player lags, his avatar continues to move in a straight line thanks to the predictive algorithm, and it stops any and all bullets that hit the avatar, registering zero damage to the actual player, even when that player's system has him standing directly behind the avatar. So it appears that the PvP netcode of Destiny sends "I'm moving here," "I'm shooting between these two points," and "I've taken damage" messages to the other players, and that's basically it. When you fire your gun, you are trusting that (a) your system is correctly showing you where the other players in the game are, (b) the other systems are correctly receiving your bullet locations, and (c) the other systems will accurately report that they have received damage. That's three different places that a small amount of lag can cause no damage to register, and it's very frustrating. These points of fail are very similar to those of token ring architecture, which is why I reference it that way, even though it's not at all the same actual netcode. Now, there is one player who is the "physics host" of the game, and that player's system handles the clock countdown timer, ammo spawns, and - presumably - non player object motions such as ammo drops (though it is entirely possible that ammo drops are 100% contained within their own players' systems).

Is this network mesh model innovative and new? Yes. But it is also bad for competitive pvp because it is grossly unreliable, has multiple points of potential failure, and is easily exploitable via lag-switching. It also rewards players for lagging rather than punishes them, and - thanks to the predictive algorithms in destiny - does not do a very good job of distinguishing lagging players from non-lagging players during gameplay. If you shoot someone in Destiny, you have no idea if you will actually hurt them, even if your bullet passes right through their virtual brainpan. Major caveat: Since the latest PoE update, I have noticed far less lag than prior to that. I am not sure what changed, but it seems to have been very much for the better.


Complete thread:

 RSS Feed of thread