For a great example of a league that works this way, check out the Terra Mystica tournament at http://tmtour.org/#/.
Players are divided up into Leagues of 7 players each. The Leagues are then arranged into Divisions such that there is one League in Division 1 and then each higher numbered Division has twice as many Leagues as the previous number (two Leagues in Division 2, four Leagues in Division 3, etc.).
This structure is designed so that after a given season, the winner of each league can be promoted to the next division up the chain, and the bottom two finishers in each league can be demoted down one notch.
Everyone in a League will play four games, and the schedule is built such that each player is in exactly 2 games with each other player, and each player gets each starting seat position once (if the online implementation allows players to choose seats).
Games will be played asynchronously using an online implementation of the game in question.
If the number of players is not divisible by 7 then up to 6 of the lowest ranked Leagues will have 8 players each (and asymmetric schedules).
For each player, we track their score and finish position in each game, along with the number of players in that game.
This allows us to calculate League Points using the following chart:
- 1st : 10
- 2nd: 6
- 3rd: 3
- 4th: 1
If multiple players tie for a finish position they split the points (so a tie for 2nd and 3rd is worth 2 points each).
The winner of each division is the player who accumulates the most league points. The first tiebreaker is the number of games won, then the number of 2nd place finishes, followed by the number of 3rd place finishes. If players are still tied, we use the average percentage of the winner’s score across all games. After that, margin of victory is the next tiebreaker, followed by total points scored in all games. Net score in head to head games will then be used and finally, if necessary, the higher ranked player coming into the current season remains the higher ranked player.
This same set of tiebreakers will also be used in between seasons when comparing players for seeding purposes.
Lifetime Standings will be maintained on the website as a list of players sorted by lifetime league points by Division. One point in a higher division is worth more than any number of points in a lower division (so the first N players will be everyone who has ever scored a point in Division 1, etc.). You can see a good example of this here: http://tmtour.org/#/marathontable
In addition, we will track and prominently display Season Winners, which is whoever won the one League in Division One each season.
The basic idea is pretty straight-forward: new players start at the bottom and winning a league gets you promoted to a higher division while finishing in the bottom 2 gets you relegated. However, the details can get a little messy, especially when you consider players who drop out and then return after sitting out some number of seasons. What follows is an attempt at a precise algorithm to cover all these cases.
Step 1: Collect a list of all the players who want to participate.
Step 2: Determine how many Leagues there will be, and how many players each will have. (This is just players divided by 7 with the N lowest ranked leagues getting an 8th player, where N is the remainder from dividing by 7.)
Step 3: Sort all the players who participated in the previous season into one list (even if they aren’t playing the upcoming season). The sort is done using division and league placement, along with the tiebreakers specified above HOWEVER players who finish 6th and 7th are placed below the 5th place finishers from the next division down.
Step 4: Sort the returning players according to their most recent finish.
Step 5: Take out the players who are dropping out from the sorted list in Step 3, thus creating holes in the list. Fill each hole by first checking to see if the highest rated returning player’s most recent finish was that good or better. (For example, to fill a hole from a player who dropped out after finishing 2nd in one of the Leagues in Division 3, you could insert a returning player who most recently finished 4th in Division 2.) If the highest ranked returning player does not fit into the hole, then everyone in the list slides up one spot to close the hole.
Step 6: Any returning players who don’t fill a hole get added to the bottom of the list, followed by any new players. Note that new players should be sorted according to lifetime BPA Laurels in the relevant game, with ties broken by the order in which they signed up. (Realistically this sort by Laurels will only really matter for the very first season of a game.)
Step 7: Take the sorted list of all the players participating and put them into leagues, first filling Division 1 from the top of the list, then filling the 1st slot of each Division 2 league, then the 2nd slot of each Division 2 league, etc.
Once players are divided into divisions at the beginning of the season, a schedule is generated. The schedule will put each player into 2 games with each other player in the league. This works out to be:
4-player games: 4 games per player (7 total games)
If possible, seating positions should also be specified such that each player has as close to the same starting positions as possible. (If the online implementation of the game does not allow the specification of starting seat positions when setting up a game then this part will be skipped.)
Here are optimal schedule recipes that just need player names plugged in:
Seat 1 Seat 2 Seat 3 Seat 4
G1 1 2 3 4
G2 4 5 7 2
G3 2 6 1 5
G4 5 4 6 3
G5 3 7 5 1
G6 7 1 4 6
G7 6 3 2 7
Each game in the schedule will be given a unique name, using a pattern like ‘AGR S2 L3-B G12.’
If possible, games will be created automatically on players’ behalf. If this is not possible due to the online implementation of the game, then players will need to set up the games themselves. In either case, an e-mail will be sent to each player at the beginning of the season clearly specifying what games they are in, who those games are with, and what they need to do next.
The winner of each game is on the hook for reporting the results to us. Our plan is to have a webpage for entering the score of each player in the game. (For our first leagues, this may be done via e-mail.)
Any number of things could go wrong, not all of which we will be able to anticipate. Each event will have a GM who is empowered to fix things using their best judgment (and assistant GMs in case an issue comes up that involves the GM).
Slow play – Consistently slow players can be blacklisted from future seasons. If you do sign up, you are committing to checking the website a couple of times on most days (it’s OK if something comes up every once in a while, or if you’re out of town for a weekend (for example), but in general we’re hoping game lengths will be measured in weeks not months.
Dropping Out – Players who drop out of games will lose their ability to play in future Meeple League events.
Controlling multiple accounts – Players are forbidden from entering any online event more than once, or controlling multiple accounts in the same event. Anyone caught violating this will be banned from future Meeple League events.