MetalSucker's lobby simplification thread
Posted: 25 Sep 2014, 02:41
I decided not to clutter the forum with random ideas.
I don't know if this has been previously discussed, accepted or rejected so feel free to point me in the right direction if there's previous work / conversation regarding this or tell me to gtfo if you don't like/want it.
tl;dr version: make a very simple GUI with a big button that just automagically finds a 1v1 game and starts it with minimal player effort and in the shortest time possible. All advanced options and what is currently considered a lobby should be hidden from the player - unless of course he wants to see it.
---- warning: long post ----
I'm not asking anyone to do it, I will attempt to do this myself.
I believe I can implement a lot of this without any lobby protocol modifications, basically by ripping apart springlobby (because multi-platform + seems fast + I understand most of the code I've looked at).
I will ignore single player/tutorial missions for now because that's a whole different topic and the content just isn't there yet, but multiplayer works - and it rocks hard.
What I would like to achieve is not really a lobby. I would call it a multiplayer auto-game finder and launcher, maybe a "non-expert mode" based on already existing lobby protocol libraries. In the end it should not block any other fully featured lobbies by functioning as intended, and this way to do things could become a part of them.
What I want to do for now is a big "Find 1v1 game now" button, with the rest of the UI showing just the following:
- how many people are online (using this lobby/launcher or whatever you want to call it)
- how many games are in progress -> a list of progress games that can be spectated
The Launcher would be restricted to one game. The way I'm imagining it, this is a tool that can be used by people who distribute their games, a tool that would make it dead easy for their players to start an online game. Of course the whole restriction is basically a string in a config file, a simple filter - but invisible to the end user.
If people want to see other spring games there are a few options - banners advertising them (yes, banner rotation within the launcher) or simply going to 'expert mode' or launching a fully fledged lobby, also packed with the distribution.
Distribution = this launcher + at least a lobby + engine version required + game + maps, etc., a package that has all content needed, with minimal/no other downloads required for that specific game
I will only address the "Find 1v1 game now" button since I believe this is essential. Yes, there could also be "2v2", "3v3" etc buttons, but all in due time.
A basic, naive usability metric is "how many clicks/actions do I need to do before I can actually play the game". Another metric would be "how long do I have to wait before the game starts".
While the second metric pretty much depends on download times and/or packing launcher + game + assets + maps together, the first one requires a bit of tinkering to get right.
The Launcher would need to know the following things:
-game name & version (for filtering)
-engine version needed (this should already be downloaded with the distribution)
-list of 1v1 playable maps - something like 5-10 decent maps will do for now.
Upon launching and logging in, the launcher should see if there are games with newer game/engine versions and simply nag the player to update. Since the available list of "accepted" 1v1 maps should be defined launcher side, there should be a mechanism to update that too.
Playing any game and even logging in using this launcher should be impossible unless all elements are up-to-date (to the versions the game creator decided they should be). A lot of this can depend on already implemented update mechanisms. An alternative way to do it is point the player to an archive/torrent with a full distribution available for download, with all the updated elements inside.
If login is successful and everything has the right versions the launcher grabs the battle list and looks for a battle with the following characteristics:
-not already running
-exactly one player inside not spectating
-expected spring engine version, game version, already have map downloaded and map in "accepted" 1v1 list for launcher
-game description contains the following;
SpecialString_1v1_%random_string%
where SpecialString would be something along the lines of "autofinder" or some unique prefix that players using regular lobbies would not normally use when creating custom games. This prefix could be used as a filter for hiding such games in regular lobbies.
%random_string% is needed and should be long enough to accommodate any surges in player/running game numbers.
Should no such game be found, the following should happen:
-the Launcher starts a game with said game description
-a random map is chosen out of the "approved" 1v1 maps list for the auto launcher (to be determined what maps)
-player joins a team automagically
-the player is told to wait until somebody comes in.
Should such a game already exist, the Launcher would attempt and re-attempt to join the oldest one for a number of times (or a random one?!) then move to the next one. A reporting mechanism for "stuck" games would be nice.
There is no chat, no re-defining map start positions (since there's an "approved" 1v1 maps list, those should have excellent starting positions built in), there's no !map (random).
Anyone wanting those features can use a fully featured lobby.
The second there are two people in such a game, they are each sent to opposing teams and then auto !start.
Of course there could be such thing as "average wait time for 1v1 game.." but those are final touches.
Yes I do want to hear from you. Feel free to be fully honest, I'm not easily insulted and the only thing I want is for people to play spring games. This is about making it dead easy for them.
Multiple edits: making things clearer.
I don't know if this has been previously discussed, accepted or rejected so feel free to point me in the right direction if there's previous work / conversation regarding this or tell me to gtfo if you don't like/want it.
tl;dr version: make a very simple GUI with a big button that just automagically finds a 1v1 game and starts it with minimal player effort and in the shortest time possible. All advanced options and what is currently considered a lobby should be hidden from the player - unless of course he wants to see it.
---- warning: long post ----
I'm not asking anyone to do it, I will attempt to do this myself.
I believe I can implement a lot of this without any lobby protocol modifications, basically by ripping apart springlobby (because multi-platform + seems fast + I understand most of the code I've looked at).
I will ignore single player/tutorial missions for now because that's a whole different topic and the content just isn't there yet, but multiplayer works - and it rocks hard.
What I would like to achieve is not really a lobby. I would call it a multiplayer auto-game finder and launcher, maybe a "non-expert mode" based on already existing lobby protocol libraries. In the end it should not block any other fully featured lobbies by functioning as intended, and this way to do things could become a part of them.
What I want to do for now is a big "Find 1v1 game now" button, with the rest of the UI showing just the following:
- how many people are online (using this lobby/launcher or whatever you want to call it)
- how many games are in progress -> a list of progress games that can be spectated
The Launcher would be restricted to one game. The way I'm imagining it, this is a tool that can be used by people who distribute their games, a tool that would make it dead easy for their players to start an online game. Of course the whole restriction is basically a string in a config file, a simple filter - but invisible to the end user.
If people want to see other spring games there are a few options - banners advertising them (yes, banner rotation within the launcher) or simply going to 'expert mode' or launching a fully fledged lobby, also packed with the distribution.
Distribution = this launcher + at least a lobby + engine version required + game + maps, etc., a package that has all content needed, with minimal/no other downloads required for that specific game
I will only address the "Find 1v1 game now" button since I believe this is essential. Yes, there could also be "2v2", "3v3" etc buttons, but all in due time.
A basic, naive usability metric is "how many clicks/actions do I need to do before I can actually play the game". Another metric would be "how long do I have to wait before the game starts".
While the second metric pretty much depends on download times and/or packing launcher + game + assets + maps together, the first one requires a bit of tinkering to get right.
The Launcher would need to know the following things:
-game name & version (for filtering)
-engine version needed (this should already be downloaded with the distribution)
-list of 1v1 playable maps - something like 5-10 decent maps will do for now.
Upon launching and logging in, the launcher should see if there are games with newer game/engine versions and simply nag the player to update. Since the available list of "accepted" 1v1 maps should be defined launcher side, there should be a mechanism to update that too.
Playing any game and even logging in using this launcher should be impossible unless all elements are up-to-date (to the versions the game creator decided they should be). A lot of this can depend on already implemented update mechanisms. An alternative way to do it is point the player to an archive/torrent with a full distribution available for download, with all the updated elements inside.
If login is successful and everything has the right versions the launcher grabs the battle list and looks for a battle with the following characteristics:
-not already running
-exactly one player inside not spectating
-expected spring engine version, game version, already have map downloaded and map in "accepted" 1v1 list for launcher
-game description contains the following;
SpecialString_1v1_%random_string%
where SpecialString would be something along the lines of "autofinder" or some unique prefix that players using regular lobbies would not normally use when creating custom games. This prefix could be used as a filter for hiding such games in regular lobbies.
%random_string% is needed and should be long enough to accommodate any surges in player/running game numbers.
Should no such game be found, the following should happen:
-the Launcher starts a game with said game description
-a random map is chosen out of the "approved" 1v1 maps list for the auto launcher (to be determined what maps)
-player joins a team automagically
-the player is told to wait until somebody comes in.
Should such a game already exist, the Launcher would attempt and re-attempt to join the oldest one for a number of times (or a random one?!) then move to the next one. A reporting mechanism for "stuck" games would be nice.
There is no chat, no re-defining map start positions (since there's an "approved" 1v1 maps list, those should have excellent starting positions built in), there's no !map (random).
Anyone wanting those features can use a fully featured lobby.
The second there are two people in such a game, they are each sent to opposing teams and then auto !start.
Of course there could be such thing as "average wait time for 1v1 game.." but those are final touches.
Yes I do want to hear from you. Feel free to be fully honest, I'm not easily insulted and the only thing I want is for people to play spring games. This is about making it dead easy for them.
Multiple edits: making things clearer.