3 ms·
Until proven otherwise, I'm a firm believer that all good, modern multiplayer games basically rehash the original 1999 client-server, server authoritative archi
by andrewmcwatters 5y ago
Until proven otherwise, I'm a firm believer that all good, modern multiplayer games basically rehash the original 1999 client-server, server authoritative architecture design of QuakeWorld. You'll get a lot of young amateurs claiming otherwise or that game multiplayer networking is too nuanced than that, but I think that's a load of bunk.
I think the opposite is true, most good multiplayer networking uses this model, and deviations from it are the niche. You may even have large player base models that shard on top of using this design, but the original premise takes hold, and there are entire generations of young hobbyists who I think probably refuse to believe this in large part because most of them aren't doing sophisticated enough networking to say otherwise, and as soon as they even try, they'll be reinventing the wheel.
The nature of multiplayer games forces you to make architectural decisions that will always essentially look like a client-server, server authoritative model.
Why? Because you can't allow cheating, and you will always want some degree of prediction. Even if you didn't care about either of these you can simply choose to not opt-into those limitations.
But you get too many armchair network experts who have never opened a socket on HN saying that even things like serializing game data is too nuanced. Yeah, OK.
I'm sure there are alternative models that do exist, but it's been less than 25 years since that design took hold, and most significant real-time video games have used something exactly like it or similar.
Even RuneScape had serialized game event RPC that was reverse engineered over many years. Every game has something like that. You will always need to at least serialize something.
- andrewmcwatters 5y agoExamples in Lua/LOVE: https://github.com/Planimeter/grid-sdk/blob/master/engine/shared/network/payloads.lua https://github.com/Planimeter/grid-sdk/blob/master/engine/sh... https://github.com/Planimeter/grid-sdk/blob/master/engine/shared/network/payload.lua https://github.com/Planimeter/grid-sdk/blob/master/engine/sh... https://github.com/Planimeter/grid-sdk/blob/master/engine/shared/entities/player.lua#L66 https://github.com/Planimeter/grid-sdk/blob/master/engine/sh... https://github.com/Planimeter/grid-sdk/blob/master/engine/server/network/init.lua#L86 https://github.com/Planimeter/grid-sdk/blob/master/engine/se...