Tournaments
The tournament system provides fully automated competitive Pokemon tournaments with bracket management, team locking, NPC autofill, and rating integration. Tournaments progress through a strict lifecycle, handle registration and waitlists, and support both single and double elimination formats.
Tournament Lifecycle
Section titled “Tournament Lifecycle”Tournaments progress through a strict state machine:
SCHEDULED -> REGISTRATION -> LOCKED -> ACTIVE -> PAUSED -> CONCLUDED| State | Description |
|---|---|
SCHEDULED | Tournament is configured but registration has not yet opened. |
REGISTRATION | Players may register and submit teams. |
LOCKED | Registration is closed; teams are frozen; bracket is being built. |
ACTIVE | Matches are being played. |
PAUSED | Tournament is temporarily suspended (admin action). |
CONCLUDED | All matches complete; results are final. |
The tournament automatically transitions between states based on schedule times configured in the tournament config:
SCHEDULED->REGISTRATIONatregistrationOpens.REGISTRATION->LOCKEDatregistrationCloses.LOCKED->ACTIVEatbracketStarts.
Registration
Section titled “Registration”- Player submits a team for the tournament format.
- The team is validated against the tournament format rules (species, moves, items, clauses).
- If valid, the team is snapshot and stored in the database.
- If the tournament is full, the player is placed on a waitlist.
Registration Results
Section titled “Registration Results”| Result | Description |
|---|---|
Success | Player successfully registered. |
NotFound | Tournament does not exist. |
RegistrationClosed | Registration window has passed. |
AlreadyRegistered | Player is already registered for this tournament. |
InvalidTeam | Team does not pass format validation. |
Waitlisted | Tournament is full; player added to waitlist. |
Waitlist
Section titled “Waitlist”When a registered player withdraws, the first player on the waitlist is automatically promoted to a registered slot.
Bracket Types
Section titled “Bracket Types”Single Elimination
Section titled “Single Elimination”Standard knockout bracket. Each loss eliminates the player. The bracket size is padded to the nearest power of two, with byes assigned to top seeds.
Double Elimination
Section titled “Double Elimination”Players must lose twice to be eliminated. The bracket is divided into three sectors:
- Winners Bracket — undefeated players.
- Losers Bracket — players with one loss, competing for a second chance.
- Grand Finals — winners bracket champion vs. losers bracket champion.
Each sector is viewable independently in the bracket UI.
Locked Teams
Section titled “Locked Teams”Player teams are snapshot at the moment of registration and stored in the database. Once locked, players cannot modify their tournament team.
- If
rosterChangeBetweenGamesis enabled, players may adjust their roster between individual games within a best-of series, but the overall team pool remains locked. - If
revealFullBracketis enabled, other players can view registered teams.
NPC Autofill
Section titled “NPC Autofill”NPC autofill fills empty bracket slots to reach a bracket-compatible player count (power of two for single elimination).
- NPCs are assigned configurable AI skill levels (0-5).
- NPCs use a specified NPC class for rendering.
- Teams can come from a preset ID or be randomly generated.
- Names are drawn from the configured
namePool. - NPCs participate fully in the bracket, including best-of series.
See the NPC Autofill Config section for all available settings.
Best-of Series
Section titled “Best-of Series”Each match in the bracket can be a best-of series rather than a single game.
bestOf.defaultsets the series length for all rounds (e.g.,3for best-of-3).bestOf.overridesallows per-round customization. Keys are round identifiers (e.g.,"finals","semifinals"), values are the best-of count.
bestOf { default = 1 overrides { semifinals = 3 finals = 5 }}Rating Integration
Section titled “Rating Integration”Tournament results can optionally affect ladder ratings.
- Set
rating.affectsRatingtotrueto enable. rating.ladderReferencespecifies which ladder’s rating pool receives the rating changes (e.g.,"gen9ou"to affect the Gen 9 OU ladder).
Rating changes are calculated using the same algorithm as ranked ladder matches.
Webhooks
Section titled “Webhooks”Tournament events can trigger Discord webhook notifications. Supported events include registration opening, bracket generation, match results, and tournament conclusion.
Commands Reference
Section titled “Commands Reference”Player Commands
Section titled “Player Commands”| Command | Permission | Description |
|---|---|---|
/tournament menu | frontier.tournament | Open the tournament hub GUI. |
/tournament join <id> | frontier.tournament | Register for a tournament. |
/tournament leave <id> | frontier.tournament | Unregister from a tournament. |
/tournament bracket <id> | frontier.tournament | View the tournament bracket. |
/tournament spectate <id> | frontier.tournament | Spectate an ongoing tournament match. |
/tournament spectate stop | frontier.tournament | Stop spectating. |
/tournament optout <id> | frontier.tournament | Opt out of automatic spectating during finals. |
Admin Commands
Section titled “Admin Commands”| Command | Permission | Description |
|---|---|---|
/tournament admin forcestart <id> | frontier.tournament.admin | Force-start a tournament (skip waiting for full bracket). |
/tournament admin pause <id> | frontier.tournament.admin | Pause a running tournament. |
/tournament admin unpause <id> | frontier.tournament.admin | Resume a paused tournament. |
/tournament admin openregistration <id> | frontier.tournament.admin | Open registration for a tournament. |
/tournament admin restart <id> [round] | frontier.tournament.admin | Restart a tournament from a specific round. |
/tournament admin resetstate <id> | frontier.tournament.admin | Reset tournament state. |
/tournament admin disqualify <player> <id> | frontier.tournament.admin | Disqualify a player from a tournament. |
/tournament admin addnpc <id> <preset_or_class> [name] [skin] | frontier.tournament.admin | Add an NPC participant to a tournament. |
/tournament admin autofill <id> [count] | frontier.tournament.admin | Autofill empty slots with NPCs. |
/tournament admin fakeregister <id> <count> | frontier.tournament.admin | Add fake players for testing. |
/tournament admin fakeclear <id> | frontier.tournament.admin | Remove fake players. |