Skip to content

Ladders

File: config/frontier/ladders.conf

Ladders define the competitive queues players can join. Each ladder references a format, configures its own rating system, and defines rank tiers.

ladders {
singles {
displayName = Singles
description = "Standard singles ladder"
format = standard
battleType = singles
teamSize = 6
rating {
algorithm = GLICKO2
startRating = 1500.0
startRD = 350.0
}
rankTiers = [
{ name = "Poke Ball", minRating = 0.0, icon = "cobblemon:poke_ball" }
{ name = "Great Ball", minRating = 1200.0, icon = "cobblemon:great_ball" }
{ name = "Ultra Ball", minRating = 1400.0, icon = "cobblemon:ultra_ball" }
{ name = "Master Ball", minRating = 1600.0, icon = "cobblemon:master_ball" }
{ name = "Beast Ball", minRating = 1800.0, icon = "cobblemon:beast_ball" }
]
}
}
FieldTypeDefaultDescription
displayNameString"Singles"Human-readable name shown in GUIs and commands.
descriptionString""Description shown in ladder selection.
formatString"standard"Format ID referencing a key in formats.conf.
battleTypeString"singles"Battle type: "singles" or "doubles".
teamSizeInt6Maximum Pokemon on a team.
ratingRatingConfigSee belowRating system configuration.
rankTiersList<RankTier>5-tier systemOrdered rank tiers from lowest to highest.

Each ladder has its own rating configuration. Frontier supports two algorithms.

FieldTypeDefaultDescription
algorithmString"GLICKO2"Rating algorithm: "GLICKO2" or "SHOWDOWN_K_SCALING".
startRatingDouble1500.0Starting rating for new players.
startRDDouble350.0Starting rating deviation (uncertainty). Higher = more uncertain.
minRatingDouble0.0Minimum possible rating.
maxRatingDouble9999.0Maximum possible rating.
rdFloorDouble50.0Minimum RD. Prevents ratings from becoming too certain.

Only used when algorithm = "GLICKO2".

FieldTypeDefaultDescription
startVolatilityDouble0.06Starting volatility. Represents expected fluctuation in rating.
tauDouble0.5System constant controlling how quickly volatility changes. Higher = more reactive.

Glicko-2 is the default and recommended algorithm. It accounts for rating uncertainty and adjusts faster for new players while stabilizing for experienced ones.

Only used when algorithm = "SHOWDOWN_K_SCALING".

FieldTypeDefaultDescription
kMaxDouble50.0K-factor for provisional players (few games). Controls rating swing magnitude.
kMinDouble20.0K-factor for established players (many games).
kScalingGamesInt20Number of games until K-factor reaches kMin.

K-Scaling is simpler — new players swing by larger amounts (up to kMax per game), and the swings gradually decrease toward kMin as they play more games.

Rank tiers define the competitive brackets players progress through. They must be ordered from lowest to highest minRating.

FieldTypeDescription
nameStringDisplay name of the tier.
minRatingDoubleMinimum rating required to achieve this tier.
iconStringMinecraft item ID used as the tier’s icon in GUIs.

All default ladders use the same five tiers:

TierMin RatingIcon
Poke Ball0cobblemon:poke_ball
Great Ball1200cobblemon:great_ball
Ultra Ball1400cobblemon:ultra_ball
Master Ball1600cobblemon:master_ball
Beast Ball1800cobblemon:beast_ball
IDDisplay NameFormatBattle TypeDescription
singlesSinglesstandardsinglesStandard singles ladder
doublesDoublesdoublesdoublesStandard doubles ladder
vgcVGCvgcdoublesBring 6, pick 4, level 50 doubles
little_cupLittle Cuplittle_cupsinglesUnevolved Pokemon only, level 5
monotypeMonotypemonotypesinglesAll Pokemon must share a type
randomRandom BattlerandomsinglesRandom teams from competitive sets
random_doublesRandom Doublesrandom_doublesdoublesRandom teams in doubles format

All default ladders use Glicko-2 with a 1500 start rating and the default rank tiers.

Here’s a ladder with Showdown K-Scaling and custom rank tiers:

ladders {
competitive_ou {
displayName = "Competitive OU"
description = "OverUsed tier with Showdown-style rating"
format = "base_ou"
battleType = "singles"
teamSize = 6
rating {
algorithm = SHOWDOWN_K_SCALING
startRating = 1000.0
startRD = 350.0
kMax = 40.0
kMin = 16.0
kScalingGames = 30
}
rankTiers = [
{ name = "Bronze", minRating = 0.0, icon = "minecraft:copper_ingot" }
{ name = "Silver", minRating = 1100.0, icon = "minecraft:iron_ingot" }
{ name = "Gold", minRating = 1300.0, icon = "minecraft:gold_ingot" }
{ name = "Diamond", minRating = 1500.0, icon = "minecraft:diamond" }
{ name = "Champion", minRating = 1700.0, icon = "minecraft:nether_star" }
]
}
}

Remember to add tier colors for your custom tiers in messages.conf:

tierColors {
Bronze = "<#cd7f32>"
Silver = "<gray>"
Gold = "<gold>"
Diamond = "<aqua>"
Champion = "<light_purple>"
}