Products Docs Help Store Discord

Battle Formats

Three ways to prove your skills. Singles, Doubles, and Triples.

Singles

The classic duel. One Pokemon at a time. Pure strategy, no distractions.

  • Active: 1 Pokemon
  • Team: 3+ Pokemon
  • Style: Traditional competitive play

Fast-paced matches where every prediction matters. Perfect for players who love mind games and one-on-one showdowns.

Doubles

VGC-style 2v2 battles. Teamwork wins fights.

  • Active: 2 Pokemon
  • Team: 4+ Pokemon
  • Style: Team synergy and positioning

Spread moves, partner combos, and Protect mind games. The format where coordination is king.

Triples

Full-scale warfare. Three Pokemon clash at once.

  • Active: 3 Pokemon
  • Team: 6 Pokemon
  • Style: Complex positioning and team coordination

Position matters. Center Pokemon can hit anyone; side Pokemon have limited reach. The ultimate test of team building.

Random Battle (Randbats)

Pokémon Showdown-style Random Battle formats where the server generates your team for you. Available as RANDOM_SINGLES, RANDOM_DOUBLES, and RANDOM_TRIPLES. They use the same Singles/Doubles/Triples rules, but with a server-generated 6-Pokémon team instead of your own party.

Random Battle has its own separate rating and leaderboard, fully isolated from the regular formats. See Random Battle for the full guide.

Independent Rankings

Each format has its own:

  • Queue: Singles players only match with Singles players
  • ELO rating: Climb separately in each format
  • Leaderboard: Dominate one format or conquer them all
  • Blacklist rules: Different bans per format if configured
Player: Steve
├── SINGLES: 1850 ELO, Rank #5
├── DOUBLES: 1620 ELO, Rank #23
└── TRIPLES: 1540 ELO, Rank #8

Format Configuration

All format settings are configured in season presets (config/cobbleranked/season_presets/*.yml).

Enable/Disable Formats

Control which formats are available by setting enabled in each format section:

# season_presets/default.yml
singles:
  enabled: true
doubles:
  enabled: true
triples:
  enabled: false    # Disabled

Season Presets

Run a VGC-only season? A Singles tournament? Each preset has complete format configuration:

# season_presets/vgc.yml
name: "VGC Rules"

singles:
  enabled: false

doubles:
  enabled: true
  teamSize: 6
  selectCount: 4
  levelCap: 50
  turnTimer: 45
  matchDuration: 20
  megaEvolution: false
  zMoves: false
  dynamax: false
  terastallize: true

triples:
  enabled: false

Per-Format Settings

Each format has its own complete configuration:

# season_presets/default.yml
singles:
  enabled: true
  teamSize: 3
  selectCount: 3
  levelCap: 100
  turnTimer: 90
  matchDuration: 15
  megaEvolution: true
  zMoves: true
  dynamax: false
  terastallize: false

  # Clauses
  speciesClause: true        # no duplicate species
  itemClause: 1              # max duplicates of the same held item (0 = off, 2 = allow two)
  sleepClause: true          # only one opponent asleep at a time (see Sleep Clause page)
  ohkoClause: true           # ban OHKO moves (Sheer Cold, etc.)
  evasionClause: true        # ban evasion moves (Double Team, etc.)
  endlessBattleClause: true  # auto-draw endless stall loops

  # Restricted Pokemon
  restrictedCount: 1

  # Matchmaking
  matchmaking:
    enforceEloRange: true
    initialRange: 200
    expansionDelay: 30
    expansionRate: 50
    maxMultiplier: 3.0
    immediateMatchRange: 100

  # Blacklist
  blacklist:
    pokemon: []
    moves: []
    abilities: []
    heldItems: []
    labels: []
    labelLimits: {}
    inventoryItems: []
    consumables:
      blockAllHealingItems: true
      blockedHealingItems: []
      blockStatusHealingItems: true
      blockedStatusItems: []
      blockRevivalItems: true
      blockedRevivalItems: []

doubles:
  enabled: true
  teamSize: 4
  selectCount: 4
  levelCap: 50
  turnTimer: 120
  matchDuration: 20
  # ... similar structure

Matchmaking Settings

Control how players are matched within each format:

SettingDefaultDescription
enforceEloRangetrueEnable Elo-based matchmaking
initialRange200Starting ELO range (±100 = 200 total)
expansionDelay30Seconds before range starts expanding
expansionRate50ELO added per expansion cycle
maxMultiplier3.0Maximum range multiplier (3× initial range)
immediateMatchRange100ELO range for instant matches

How range expansion works:

  • Start: ±100 ELO (200 total range)
  • After 30s: ±150 ELO (expands by 50)
  • After 60s: ±200 ELO (expands by another 50)
  • Maximum: ±300 ELO (3× initial range)

Restricted Pokemon System

Some presets use a restricted Pokemon system (VGC-style):

SettingDescription
restrictedCountMax number of restricted Pokemon allowed
restrictedPokemonList of specific Pokemon marked as restricted

When restrictedCount > 0, players can only include that many Pokemon from the restricted list in their team.

Gimmick Control (Mega / Z-Moves / Dynamax / Tera)

The megaEvolution, zMoves, dynamax, and terastallize toggles actually disable the gimmick in ranked battles. Because these mechanics (added by Mega Showdown) are gated by key items, simply banning the items isn’t enough. CobbleRanked blocks the gimmick at the moveset level during battle (via a mixin on the action request) so it can’t be used even if the player has the item. Casual and non-ranked battles are unaffected.

Multi-Format Rewards

Season rewards are distributed per format. Rank high in all three? Get rewards for all three.


Related: Ranked Battles | ELO System | Seasons