Hacker News new | ask | show | jobs
by reitzensteinm 1249 days ago
The spiral of death trade-off does not happen as you describe.

While a client is catching up, you run the sim in a loop and don't render the game.

The deterministic simulation code is only a small part of the overall game logic, and you can run it much faster than real time.

If a client is slow enough to genuinely experience a spiral of death, the game will not be playable for them, and "mild annoyance of brief pausing" is not remotely what the other players will experience if they're forced to stay in sync.

Wait time is the common solution in older games to prevent abuse, yes. But it doesn't prevent somebody with high ping making a game run at half speed.

Go play Company of Heroes 2 with a packet loss simulator. Even as the bad client, it's totally playable. For everyone else, it's silky smooth.

I don't think you'll come back and tell me you prefer the implementation in AoE II Definitive Edition.

1 comments

The simulation is, rather obviously, what's being referred to with the spiral-of-death -- it's not unusual for instance in Age of Empires II to encounter transient periods where-in steps take an order of magnitude or more than the period they're simulating on less-capable machines (due to some O(n*n)'s in the AI system).

In the end this is still a decision regarding how to handle player's falling behind; too far and they're effectively taken out of the game as they're no longer interacting within a sufficient approximation of the current state.

Under what design is "high ping" going to cause the game to run at lower "speed"? The only possibility I can see is where-in the turn period is, for some bizarre reason, also the granularity of the simulation step and you're also adapting the turn based on player latency (in aid of fairness, usually)

Having implemented such a system myself, a few times now, it has in practice performed sufficiently well.

DE is garbage in general so it's not really a fair comparison.

Transient periods is the point - for a client to enter a spiral of death, the simulation is running slowly enough that a client can't keep up, even if it's all they're doing. If a client enters this state, it's simply not going to be able to run the rest of the game, and it's out of the match regardless of what you do unless the game slows down permanently for everyone.

If you could simply wait a few seconds for them to catch up, they'd also be able to catch up without a global pause.

In any case, we're going in circles. I came to this thread to claim that "If one person lags, everyone lags." is not intrinsic to this kind of net code, and you disagreed. Company of Heroes and my own games are existence proof of my claim. I'm not really interested in arguing about it any more - millions of players can't be wrong.