Tournament

How do league point formulas work?

Every league awards points to its players for each tournament they play, using the scoring system you choose when you create or edit the league:

  • Logarithmic
  • Square Root
  • Linear
  • Fixed (you enter the exact points for each place)
  • Custom (write your own formula)

Custom formula variables

A custom formula is worked out once for each player at the end of a tournament. Some of its variables describe the tournament, so they hold the same value for everyone in it, and some describe the player being scored. Knowing which is which is most of the skill in writing a formula.

About the tournament, the same for every player:

pnumber of players
nnumber of entries (including re-entries)
bthe buy-in
zprize pool
mnumber of paid places
ttournament format (1 standard, 2 split, 3 shootout, 4 mystery bounty)

About the player being scored:

ffinish position
cwhat they spent (buy-in plus their own rebuys and add-on)
kknockouts they made
rrebuys they took
aadd-ons they took
xbullets they used (their total buy-ins)
wwinnings (the amount they won)
drounds from the final in a shootout (1 is the final round)

For example, this formula gives each player a point for every opponent they outlasted, a 2-point bonus for each knockout, and subtracts a point for each rebuy:

(p - f + 1) + (2 * k) - r

Advanced: writing your own formula

Beyond arithmetic, two pieces of notation do most of the work in real league formulas: conditions and point tables. You can also use sqrt, log, log10, exp, pow, round, floor, fix, abs, min and max, and ^ for powers.

Conditions with ? :

A condition reads as test ? value if true : value otherwise.

f == 1 ? 50 : 10

That awards 50 points to the winner and 10 to everyone else. Note the double == for "is equal to". You also have <, <=, >, >= and !=, and you can join tests with and and or:

p >= 20 and f <= 3 ? 10 : 0

Conditions chain, which is how clubs write a different rule for each position. Each : hands over to the next test:

f == 1 ? 30 : f == 2 ? 20 : f == 3 ? 15 : 5

Point tables with [ ... ][f]

Instead of chaining conditions, you can list the points in order and pick the one for the player's finish:

[100, 85, 70][f]

The list is read by position: first place gets 100, second 85, third 70. Positions start at 1, so f lines up with the list without any adjustment.

Always guard a point table with a condition. If a player finishes below the end of the list, the formula fails and that player scores nothing at all. A list of three entries needs f < 4:

f < 4 ? [100, 85, 70][f] : 0

Use the : value to set a floor for everyone else, for instance : 5 to give five points for turning up.

Watch the brackets

Multiplication and addition are applied before a comparison, which quietly changes what a formula tests. Written without brackets:

30 * k + f < p / 3 + 1 ? 100 : 1

the test becomes "is 30 * k + f less than p / 3 + 1", not "is f inside the top third". A league can run a whole season on the wrong rule this way. Wrap the condition, or the whole conditional, in brackets:

30 * k + (f < p / 3 + 1 ? 100 : 1)

Formulas clubs actually use

These are real patterns from leagues running on Blind Valet, simplified only where a club's list of places was very long.

What the club wantedFormula
A point for turning up, nothing else1
A leaderboard of wins onlyf == 1 ? 1 : 0
Knockouts, plus a point for the wink + (f == 1 ? 1 : 0)
One point per opponent outlasted, with a podium bonusp - f + 1 + (f < 4 ? [4, 2, 1][f] : 0)
A fixed table, but everyone else still scoresf < 10 ? [1500, 1200, 900, 700, 600, 500, 400, 300, 200][f] : 100
Higher stakes worth more, every rebuy costs pointslog(p + 1) / f * 10 + b - c / 4
Points scaled by the size of the prize poolsqrt(p + 1) / f * z / 500
Only the top third scores, scaled by field size30 * k + (f < p / 3 + 1 ? sqrt(p / 10) * [120, 90, 70, 60, 50, 45, 40, 30, 25, 20][f] : 1)
Each place a percentage of a base that grows with the fieldf == 1 ? round(600 + p * 10) : f == 2 ? round((600 + p * 10) * 0.82) : round((600 + p * 10) * 0.74)

The stakes example shows why the two groups matter. It uses b and c, which look similar but sit on opposite sides: adding b lifts every score in a higher buy-in tournament, because the buy-in belongs to the tournament, while subtracting c takes back a share of what each player individually spent. A player who rebuys twice finishes with fewer points than a player who took the same place on one bullet.

Checking your formula

The league settings preview the points for every finishing position as you type, so you can see the shape of the payout before you save. If the preview is blank, the formula isn't valid yet: check for a missing bracket, or a point table that a low finish can run off the end of.