Hostless lobbies concept (lots of code/DB stuff)

From the release of DE there has been one major thing that people have been complaining about, and that’s the lobby/custom games system.

Now, I don’t know how it is implemented, outside that it works solely on HTTP requests, but one thing is known- a lobby can’t function without a host. Hence, the player hosting the lobby becomes automatically the one responsible for the rules, and each lobby can only represent 1 game, in addition to the restriction that a lobby must always have a host.

This isn’t really a thread for discussion, it’s something that perhaps the devs could look into as a realization concept of the lobby system in a multiplayer update:

Lobbies become detached from the player hosting them, but retaining the “a player may only be/have hosted 1 lobby at a time”. On the surface level, nothing related to that changes, except that the driving mechanism is now the lobby instance, not the player creating it.

For any lobby, the person choosing the settings (or in other words, the current “host”) becomes the first player to join it. By creating a lobby, the host always is the first person to join it, but after the host leaves, the lobby can then exist on it’s own (with or without a loading screen while the new host is being picked and the information is transferred to them, maybe TCP is a better option here, but I have no idea how the rule changes are made visible on the players anyway, but since they are fast, I assume it’s with TCP). After the lobby receives the new host, the topmost person in the lobby screen becomes the new host, and the old host is replaced.

When the game launches, the lobby remains, and remembers who the host was, the rest of the players don’t matter- maybe it moves to the “Started games” section so to say, maybe it stays in the “All lobbies” feed. People can join as spectators (where spectator chat isn’t something that’s a priority, but in essence the spectator instance of the game would be a second “lobby” which instead of playing, has the game data being received from the main lobby. Anyway, that’s not relevant).

After the game concludes, the players are presented with an option to go back to the lobby, in the postgame screen- “Leave Game” and “Back to lobby” options.

Currently the issue of what the lobby ID is going to be is present, as each game/lobby can have 1 ID, I believe regardless of whether it is actually played or not. If you create a lobby, the global game ID “counter” goes up, and if the lobby is closed without a game being played- it doesn’t go down. Which implies that all game IDs are unique.

It is very possible that in the games played database, the table “Lobby” has the primary key of “Id” and that’s the ID used for the lobby we see in the game, and as a consequence, the ID of the game itself. But, if the ID of the game was a different ID from the one of the lobby- I shouldn’t need to explain how database migrations work- then by creating a lobby the lobby ID gets used, and then when a game launches in the said lobby, the game ID gets used. And since a game can only be linked to one lobby, a one-to-one relationship would be easy to implement, though all of this comes with the caveat of having to split the lobby and the game tables, where the lobby contains which players are inside the lobby right now, and the settings, and the game contains what the settings are, what the players are, the result, etc etc etc.

But I think the reason we can’t have persistent lobbies is very fundamental and lies in the way the database is designed, not in that it’s impossible to implement with the networking code, or to have it properly displayed in the UI.

!

Anyway, post over. For the mere mortals like me and everyone else on this forum, we can only guess what the inner workings of the system are. I guess post what you think the reason behind not having a proper lobby system is, and how it would be fixed, though it’s probably not going to lead to anywhere, as we might be horribly wrong with how things currently stand in the backend to begin with.

Cheers all.

1 Like

The connection type is probably (not largely) unrelated to how the backend is implemented, so I doubt the TCP/HTTP/UDP/you-name-it relates a lot here (tho I guess the game lobby data is passed via TCP and the game data is passed via UDP)

As the search function in lobby is broken af, I doubt their backend is structured properly tbh, I guess there are a lot of spaghetti code (search engine of ~2K lobbies should not be that difficult right…)

it is a long shot before something like this would ever happen, however u never know because what they see as priority is different from us. I see bug fixes as priority but they make content sometimes prior to bug fixes.

I’d much prefer having 10 or 12 players in the same game, legfest is always fun.