Posted April 18, 2019 by Goblinsama Ltd.
#design #past
This is the second instalment of the stories of the past, you can read the first one here.
By order of The Most Redundant Lord Orkish, Earl of Orkishire, Patron of Many Orks, this post will have two unexpected features:
Initially, in the very first version of OMFB, there were several semi‑independent Leagues.
One was considered to be “top‑level” and eventually awarded a trophy, and the others were manually connected… you own League A, and decide to accept one promotion from League B and one from League C and will send there your relegations… Leagues had a variable number of Teams, and might even had different sets of rules, different beginning and end dates…
It was a total mess!
Sure, every League had its own name, and theoretically in future this could have expanded into something interesting… but no, it really was a mess and something had to be done.
So, after seven seasons, I came out with the concept of Conference, and it stuck.
Skippable description follows, mostly aimed at clarifying the terminology.
A Conference is a Tournament where Teams sign‑in.
A Conference is organised in several Divisions, with the best ranked Teams in the top Division, and the new entries in the lower.
Divisions may be split in several Leagues.
Every League in the whole Conference has the same number of Teams, and mostly the same rules.
When a season ends, Teams are assigned a rank, based on their position.
When a season starts, Teams are arranged in Divisions according to their rank, Divisions are split in Leagues, the Round dates are set, and the Matches for each Round are randomly drawn.
A season lasts several months, and Leagues are only rearranged at the start of a season, so I had to find a way to allow new Users to somehow enter the game mid‑season.
Here comes the Feeder: it’s a special Division, at the very bottom of the Conference, always made of a single League.
While the Round dates are in sync with the rest of the Conference, the Matches aren’t drawn at the beginning: the next Match is drawn when the previous one has been played!
Teams might enter the Feeder at any time: when they sign‑in they are considered “pending”, and when a new Match will be drawn they will be part of it.
What if there’s an odd number of Teams?
Every Round, one Team has to skip it: that Team gets a bye, which is, “as many points as if it had won a Match”.
Now, getting a bye has pros and cons, and is slightly disruptive.
Pros:
Cons:
The Feeder already is at the bottom of the Conference, so there are no relegations. Thus, what matters most are the promotions, i.e. the upper part of the ranking table.
That’s why the bye is assigned, starting from the bottom, to the Team that has:
The first condition is “received less byes”: we want to avoid as much as possible to give more than one to any Team.
The “played most matches” is also an important factor: since you can sign in the Feeder at any time, Teams might play a different number of Matches during the course of a single season. We don’t want to have someone who is already playing less Matches anyway, to also skip an extra one, if we can avoid it.
The pairing algorithm for the Feeder matches is inspired to the Swiss‑system tournament.
Starting from the bottom, it picks a Team and pairs it, going up, with the first available Team that has played against it the least number of times.
Doing so will ensure there is some variety, and also that a newly signed Team will have to face the weakest Teams first.
If we started from the top instead, newly signed Teams would likely face the top ones for a while!
The con of this algorithm is that the very top Teams might face each other several times, but it’s not a huge deal: after all they are trying to establish supremacy and get promoted…
When a season starts, Teams are counted, and arranged in order of rank.
First thing to do is to decide how many Leagues we can have from the Teams we have.
Traditional tournaments usually employ a triangular structure: the higher Division hosts a single League, and the lower you go the more Leagues you’ll get, with the bottom Division having the most Leagues.
This approach causes two problems.
With a triangular structure, when you fill up a Division and decide to create a new one at the bottom, you end up with an empty one. Adding a single League as the bottom Division, when the Division one above has many, doesn’t really make much sense.
A possible solution is to split in two the “former” lower Division, thus creating two equal‑sized Divisions, and then add new Leagues to both of them, more at the lower than at the higher, so that the triangular structure is preserved.
This has an ugly effect: half of the Teams from the “former” lower division would be relegated, which definitely isn’t great.
We have already established we’ll have a single Feeder as the bottom Division, and this is quite incompatible with the triangular structure.
I thus came up with the idea of a Diamond‑shaped structure: a single League at the top, a single League at the bottom, and the more you go to the centre, the more Leagues you get per Division.
When your Team sits in the bottom half of the Diamond, Leagues will feature 2 promotions and 1 relegation, because the Division above will have more Leagues than the Division below… when it’s in the top half, it’s the other way around.
This is better than what you get with the triangular‑shape: in that case you always get fewer promotions than relegations, so it’s always very hard to climb the ladder… with the diamond‑shape, at least for the first half of your journey, you’ll have an easier time!
That’s enough for now, I’ll complete the story later with the ranking and activity systems, so I bid you farewell with another Liquid Gold code! 5689-9884-6612
Violent and loveful brawling to all of you!