Stories of the Past, #2
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:
- It will be more formal than we are used to, due to the complexity of the subject, but…
- It will have images! Nice whiteboard badly‑drawn Goblin‑style diagrams!
The Custom League Labyrinth
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.
What is a Conference?
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.
Newcomers: The Feeder
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.
Odd Teams: The Bye
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.
- You get 2 points, as if you had won.
- None of your Brawlers gets injured.
- You do no KOs. Consider that if two Teams have the same number of points, the one with most KO done is higher in ranking.
- You get no Shiny Gold.
- Your Brawlers get no XP.
- You, basically, don’t play the Brawl for one week. And you signed up because you want to play…
Who gets The Bye?
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:
- Received less byes
- Played most matches
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…
The Diamond‑shaped Tournament
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.
- Teams that have signed‑in very recently will end up in the Feeder, so they are removed from the list and added to the Feeder right away.
- The Feeder must have at least 4 Teams: if it doesn’t already, some Teams are taken from the bottom of the ranking and added to the Feeder.
- Now we count how many unassigned Teams we have left. We divide that number for the number of “Teams per League” we want, and we have the number of Leagues.
- Any leftover Team goes to the Feeder as well. This means that at the beginning of a season, the Feeder will have between 4 and “teams per league + 3” Teams.
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.
Solution: Diamond‑shaped 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!
Enough for now
That’s enough for now, I’ll complete the story later with the ranking and activity systems, so I bid you farewell with a Liquid Gold code! 9980-8381-9883
Violent and loveful brawling to all of you!