Help & user guide

How Loaded Dice (loaded-dice.xyz) works for commissioners, coaches, and spectators: leagues, dual-channel live drafts (web and Discord), weekly matches, transactions, War Room calc, and standings. Tip the odds in your draft.

Getting Started

Create a league, invite coaches, and configure the Pokédex and point budget.

Create a league

Sign in at https://loaded-dice.xyz, then choose Create New League. Enter a display name. A URL slug is optional (one is generated if you leave it blank). A Discord guild ID is optional and only needed if you want slash commands tied to that server.

You become commissioner of the league you create and land on the league Admin page to finish setup. Loaded Dice — tip the odds in your draft.

Invite coaches

On Admin, copy the invite link or join code and send it to coaches. The link opens the league overview with ?joinCode=… so they can join in one step. Commissioners can regenerate the code if an old link should stop working.

Turn on Accepting members if you want people to join. Set a max member count if the league should close automatically when it is full.

League visibility can be Public (listed on Explore, open to spectators) or Private (unlisted, invite-only). Add a short description and format tags so the directory is searchable.

Pokédex and Showdown host

Admin → Showdown base URL is the origin used for this league’s dex and the War Room damage calculator (for example https://play.pokemonshowdown.com or a custom server). Leave it blank to use the official Showdown host. Pokedex path and formats path default to /data/pokedex.js and /data/formats-data.js.

Admin → Custom Sprites Base URL is an optional directory of `{id}.gif` / `{id}.png` files (for example https://heroicemolga.serveminecraft.net/sprites/gen5/). The Draft Board, War Room, roster views, and Discord pick embeds try custom sprites, then official Showdown gen5ani GIFs, then gen5 PNGs, then a Pokéball placeholder so a missing file never shows a broken image.

Sync the dex from Admin after the Showdown URL is set so the draft pool matches that server. Species ids follow Showdown toID (Landorus-Therian becomes landorustherian).

Point sheet and roster limits

Upload a CSV on Admin with Pokémon and Points columns (Name/Cost and Species/Point Cost also work). Rows with points greater than 0 are unbanned into the draft pool. Cost 0 or a Banned column marks a species banned.

Choose a roster limit type: Exact (min = max size), Range (min–max), or Flex budget (default 110 points, typical max 11). Flex drafts reject a pick that would exceed the remaining budget.

Spectator Mode & Public Leagues

Public vs private visibility, Explore discovery, and read-only draft watching.

Public vs private

Public leagues are listed on Explore and can be opened by any signed-in user as a spectator. Private leagues stay unlisted: coaches join with an invite link or join code, and outsiders cannot browse the board.

Commissioners set visibility on Admin → Settings. Tags and a short description help Explore search. Accepting members and max member count still apply even when a league is public.

Explore directory

Explore lists public leagues with filters for Live Drafting, Upcoming, and In Season. Search matches league name and tags. A live league deep-links to the Draft Board; others open the overview.

Opening a public league you do not belong to shows a SPECTATING badge. You can watch the live board, schedule, and standings. Pick, queue, War Room, and Admin actions stay with members.

Read-only draft board

Spectators see the same realtime ticker, pick clock, pool, and team rosters as coaches. The SPECTATING badge and banner make it clear that picks cannot be submitted from that session.

Coaches who are not on the clock also wait on the board; Discord `/pick` from a linked coach still streams onto every open board.

Draft Board & Timers

Live vs async clocks, queues, auto-picks, bots, flex budgets, and overnight pause.

Open the Draft Board

Use Draft Board in the league nav. The board is live: picks, the on-clock team, and the pick clock update for every coach in the league, not only the person who clicked. Species icons use the league’s Showdown base URL from Admin.

Commissioners start, pause, reset, and change draft order from Admin → Draft. Starting the draft posts a green embed in the linked Discord draft channel (Admin → Settings → Draft channel ID, or `/draft-setup`) and pings the first coach on the clock. Each pick (web or `/pick`) posts a purple embed with the Pokémon sprite thumbnail, cost, remaining budget, and a ping for the next coach.

Timer presets

Standard Live: 4 hours per pick every round.

Async Slow Draft: Round 1 is 8 hours; later rounds use the 4-hour default.

Speed Draft: 3 minutes per pick.

Custom: set hours and minutes per round. Changing Round 1 only overrides that round; later rounds keep the default unless you edit them too.

Overnight pause

Optional overnight pause (default 23:00–08:00 in the league timezone) does not consume timer hours. If a pick would expire at the freeze, autodraft still runs at the freeze instead of waiting until morning.

Auto-picks, queues, and bots

When the clock expires, the engine tries that team’s Queue in order. Illegal queue entries (already drafted, banned, over budget, or over roster max) are skipped. Open Queue to drag targets, flag taken mons, and 1-click add from the remaining pool.

Bot teams then choose from the legal pool: they stay under the flex spend cap (reserving about 1 point per remaining roster slot), prefer the round’s point band, and skip expensive NFE/LC mons when a fully evolved option exists.

If nothing legal remains for a team (empty pool or leftover budget below the cheapest mon), that team is treated as done so the draft can complete instead of looping.

Dual-Channel Live Drafting

Draft from the web board or Discord at the same time, with live embeds and slash commands.

Web and Discord stay in sync

The live draft is one clock on Loaded Dice (loaded-dice.xyz). A pick from the Draft Board or from Discord `/pick` writes the same roster row, advances the same on-clock team, and refreshes every open board without a reload.

When a commissioner starts the draft, the bot posts a start embed in the linked draft channel and pings the first coach. Later picks post a purple embed with the Pokémon sprite, cost, remaining budget, roster count, and a ping for whoever is next.

Slash commands

`/draft-setup <channel>`: commissioners (or server managers) link a Discord text or announcement channel as this league’s live draft room. The same channel ID can also be set on Admin → Settings → Draft channel ID. Pick embeds and the draft-start announcement post there.

`/link-coach <code>`: bind your Discord account to your league coach profile using the invite/join code from the web app. Linked coaches get on-the-clock pings (`<@user>`) in the draft channel.

`/pick <species>` (also `/draft pick`): search legal species with autocomplete and lock in a pick while you are on the clock. The bot posts the live embed with a sprite thumbnail. Invalid, banned, already-taken, or over-budget species are rejected the same way as a web pick.

What you need configured

Paste the Discord guild ID on Admin → Settings so slash commands register for that server. Set a draft channel with `/draft-setup` or the Draft channel ID field. Coaches should run `/link-coach` once so timer pings mention them.

If no draft channel is linked, web picks still work; Discord just stays quiet. If the bot is offline, the web board remains the source of truth.

Draft Wishlist & Autopilot Queue

Prioritize targets, watch remaining points, and let the clock autodraft when you miss a turn.

Build a wishlist

Open Queue in the league nav (coaches only). Add legal targets from the remaining pool, then drag the grip handle or use the arrow buttons to set priority. #1 is the next auto-pick if it is still legal when your clock expires.

Each card shows types, cost, and status: Next auto-pick, Taken, or Unaffordable. Clean Up Taken removes species someone else already drafted. Changes save immediately.

Live point budget

In a flex-budget league the queue header shows remaining points and a budget-after-#1 preview so you can see what a first autodraft would leave you. Picks that would exceed the leftover budget are marked Unaffordable and skipped by autodraft.

Exact and range leagues show roster size instead (current count vs max). The same legality checks run on web picks, Discord `/pick`, and autodraft.

Autopilot on timer expiry

When your pick clock expires, the engine walks this saved queue in order and takes the first legal species. You do not have to be on the web page. Discord embeds still announce the autodraft like any other pick.

Auto-Draft on Timer Expiry is a browser reminder toggle. Turning it off does not disable the server queue: the live clock still consumes the saved list. Pre-draft planning lets you fill the queue before the commissioner starts the timer.

League Management & Admin Isolation

Schedule generation, score overrides, and transaction approvals live only in Admin.

Coach pages vs Admin Portal

League nav pages (Overview, Draft Board, Schedule, Standings, Kill Leaders, Transactions, Queue, War Room) are for watching and playing. Commissioners and super admins also see Admin.

Schedule generation, match score entry/overrides, kill/death corrections, draft start/pause/reset/order, point CSV upload, Discord channel linking, and transaction approve/reject live exclusively under Admin (`/league/:id/admin/*`). The public Schedule page is read-only.

Admin tabs

Settings & Rules: visibility, invite code, Showdown URLs, custom sprites, Discord guild and draft channel, transaction review mode.

Members & Roster: roles, team names, replace-coach. Draft Room Controls: create/start/pause the draft and timers. Transactions: approve or reject pending FA and trades when the league is in manual review. Schedule & Matches: generate the calendar and enter results.

Shortcuts from coach views

On Schedule, commissioners see Manage in Admin Portal, which opens Admin → Schedule & Matches. Draft Board shows an upload-CSV shortcut when the pool is still locked. Those links never put commissioner tools on the public matchup cards.

Schedule & Match Reporting

Week slider, matchup cards, replay links, and admin-only result entry.

Single-week navigator

Schedule shows one week at a time with previous/next controls. The default week is an in-progress match if one exists, otherwise the first scheduled week, otherwise the latest completed week.

Odd-sized leagues insert a weekly BYE: that coach has no match that week. Generate the schedule from Admin after the roster is set.

Matchup cards

Each card is the home vs away matchup for that week, with a score divider and a winner highlight when the result is in. Coaches in the match can open War Room from the card. Replay links show as a compact icon when a result includes a Showdown replay URL.

Commissioners generate the calendar, enter or override scores, and correct kill/death stats from Admin → Schedule & Matches. Use Manage in Admin Portal on the Schedule page to jump there.

Entering results

From Admin → Schedule, pick a winner and enter surviving Pokémon scores (winner score vs loser score). Differential is winner score minus loser score and feeds standings.

Paste a Showdown replay URL when you have one. For each Pokémon that appeared, mark it included and enter kills and deaths. Those stats feed Kill Leaders. Save writes the match, standings, and kill board for the whole league at once.

Transactions & Free Agency

Trades, drop/add FA, budget checks, and auto-approve vs commissioner review.

Open Transactions

The Transactions tab has Free Agency, Trade Center, and an activity feed. A glowing count badge appears on Transactions (and on Trade Center / Incoming Offers) when another coach has sent you a pending trade. Accepting or declining the offer clears the badge immediately.

Free agency

Drop rostered Pokémon and/or claim legal free agents in one proposal. The engine checks: the claim is not already owned, not banned, your roster stays within min/max size, and a flex league still has enough points after the swap.

Trades

Choose a counterpart and the Pokémon each side sends. Both resulting rosters must stay legal on size and points. The other coach must accept a trade before it can execute (unless a commissioner approves it in manual mode).

Auto-approve vs manual review

AUTO_APPROVE_LEGAL: a legal FA proposal executes immediately (shown as Auto-Approved). A legal trade executes when the other coach accepts. Both write draft-pick roster rows and mark the transaction Approved inside one database transaction.

MANUAL_COMMISSIONER_REVIEW: proposals stay Pending until a commissioner (or super admin) approves or rejects them from Admin → Transactions. Either mode still runs the same legality checks. Illegal moves return HTTP 400 with the budget/species error — they are not saved as successful.

The board stays live: league:transaction_updated (and league:transaction_executed when a move applies) refresh rosters, remaining points, and the activity feed without a full reload. Incoming trade badges listen for league:trade_proposed and league:trade_resolved.

War Room & Damage Calculator

Private match planner plus the Smogon calc with custom dex data.

Open a match War Room

From Schedule, open War Room on your matchup (league nav War Room is a shortcut into match pages). Only participants, commissioners, and super admins can enter.

Match planner is private to your team: drag up to 6 brought Pokémon, write notes vs an opponent mon, and export a Showdown paste. The opponent never sees this board.

Damage calculator

Switch to the Damage calculator tab. The left column is you (roster pre-loaded): species, EVs/IVs, nature, item, ability, and four moves. The middle column is field conditions: sun/rain/sand/snow, terrains, Stealth Rock, spikes, Reflect, Light Screen, and singles vs doubles. The right column is the opposing coach’s team.

The banner prints the full calc line, the damage roll array, percent range, and KO text (for example 252 Atk Life Orb Arbok Gunk Shot vs. 252 HP / 252+ Def Gloom: 57.7 - 68.5% -- guaranteed 2HKO).

Custom species, moves, abilities, and items

The calc uses @smogon/calc Gen 9 data, then overlays this league’s remote Showdown JS (pokedex.js, moves.js, abilities.js, items.js fetched from Admin → Showdown base URL, or SHOWDOWN_DATA_BASE_URL if that field is blank). Local /data/*.json overlays still win when present.

If the remote host is down, the calculator falls back to stock Smogon data plus those JSON files so you can still prep.

Standings & Kill Leaderboard

Tiebreakers, live ranking updates, and MVP-style kill leaders.

Team standings

Standings rank teams by Wins, then net Differential (game score difference), then Head-to-Head among teams still tied, then Total Kills. Name is the final stable sort. Unplayed or BYE weeks count as 0–0 with no NaN percentages. Differential shows as a +/- badge.

A playoff cutoff highlight marks the top 4 (or all teams in tiny leagues, or top 8 in large ones). Rankings refresh live when a match result is submitted. On mobile, the rank column stays sticky while you scroll the rest of the table.

Kill Leaders (MVP board)

Kill Leaders ranks individual Pokémon by total kills, then kill/death differential, then fewer deaths. Filter by point-cost tier: Premium (15+), Mid (10–14), Budget (1–9).

K/D shows ∞ when a Pokémon has kills and zero deaths. Perfect 0-death rows are never sorted as NaN.

Help & user guide | Loaded Dice | loaded-dice.xyz