The scoring system for League 2022 is based on PB improvements. Each runner will start the league with an initial PB in each category, and then earn points by improving those PBs throughout the league.
As your PB improves, further improvements will become more and more difficult. Each category has a set of "tiers", to account for this. The better your PB, the more points you'll earn per second of improvement.
There is also an additional bonus, which guarantees you a baseline number of points just for beating your initial PB at all, even if the improvement is only very small. The bonus amount depends on your initial PB - the better it is, the higher the bonus.
Note that you won't receive any points if you don't beat your initial PB.
For more information on this scoring system, head over to the SM64 Romhacks Discord server.
league_pb_rank
- the position of your league PB on the league category leaderboardnumber_of_league_participants
- the total number of participants in the leagueleague_pb_in_milliseconds
- the total time of your league PB, in millisecondsleague_pb_in_seconds_floor
- the total time of your league PB, in seconds, rounded downleague_pb_in_seconds_ceiling
- the total time of your league PB, in seconds, rounded upinitial_pb_in_milliseconds
- the total time of your initial PB, in millisecondsinitial_pb_in_seconds_floor
- the total time of your initial PB, in seconds, rounded downinitial_pb_in_seconds_ceiling
- the total time of your initial PB, in seconds, rounded upa * b
- a
multiplied by b
a ** b
- a
to the power of b
a // b
- how many full lots of a
fit into b
(also known as "integer divide")a % b
- a
modulo b
min(a, b, ...)
- the lowest of a, b, ...
max(a, b, ...)
- the highest of a, b, ...
abs(a)
- the absolute value of a
tier_1_score = 2 * max(0, min(1830, initial_pb_in_seconds_floor) - max(1635, league_pb_in_seconds_floor))
tier_2_score = 3 * max(0, min(1635, initial_pb_in_seconds_floor) - max(1455, league_pb_in_seconds_floor))
tier_3_score = 5 * max(0, min(1455, initial_pb_in_seconds_floor) - max(1305, league_pb_in_seconds_floor))
tier_4_score = 9 * max(0, min(1305, initial_pb_in_seconds_floor) - max(1215, league_pb_in_seconds_floor))
tier_5_score = 14 * max(0, min(1215, initial_pb_in_seconds_floor) - max(1140, league_pb_in_seconds_floor))
tier_6_score = 21 * max(0, min(1140, initial_pb_in_seconds_floor) - max(1080, league_pb_in_seconds_floor))
tier_7_score = 34 * max(0, min(1080, initial_pb_in_seconds_floor) - max(1035, league_pb_in_seconds_floor))
tier_8_score = 105 * max(0, min(1035, initial_pb_in_seconds_floor) - max(1005, league_pb_in_seconds_floor))
tier_9_score = 158 * max(0, min(1005, initial_pb_in_seconds_floor) - max(0, league_pb_in_seconds_floor))
main_score = tier_1_score + tier_2_score + tier_3_score + tier_4_score + tier_5_score + tier_6_score + tier_7_score + tier_8_score + tier_9_score
tier_1_bonus = 100 - (100 * min(195, max(0, initial_pb_in_seconds_floor - 1635))) // 195
tier_2_bonus = 100 - (100 * min(180, max(0, initial_pb_in_seconds_floor - 1455))) // 180
tier_3_bonus = 100 - (100 * min(150, max(0, initial_pb_in_seconds_floor - 1305))) // 150
tier_4_bonus = 100 - (100 * min(90, max(0, initial_pb_in_seconds_floor - 1215))) // 90
tier_5_bonus = 100 - (100 * min(75, max(0, initial_pb_in_seconds_floor - 1140))) // 75
tier_6_bonus = 100 - (100 * min(60, max(0, initial_pb_in_seconds_floor - 1080))) // 60
tier_7_bonus = 100 - (100 * min(45, max(0, initial_pb_in_seconds_floor - 1035))) // 45
tier_8_bonus = 100 - (100 * min(30, max(0, initial_pb_in_seconds_floor - 1005))) // 30
tier_9_bonus = 100 - (100 * min(1005, max(0, initial_pb_in_seconds_floor - 0))) // 1005
bonus = 100 + tier_1_bonus + tier_2_bonus + tier_3_bonus + tier_4_bonus + tier_5_bonus + tier_6_bonus + tier_7_bonus + tier_8_bonus + tier_9_bonus
final_score = (main_score + bonus) * min(1, max(0, initial_pb_in_seconds_floor - league_pb_in_seconds_floor))