About Pupupu League

Pupupu League is an unofficial rated competition for Kirby Air Riders City Trial battles, run by Yotsuba Kou.

It offers rating tiers and ranks so that players from beginners to experts can join easily.

Join the Discord

Update policy

Bug fixes and responses to critical issues are made as needed at any time.

Major updates such as rule changes, rating-design changes, and matchmaking-spec changes are, as a rule, only made when seasons change. During a normal season, large spec changes don't happen frequently — the basic policy is roughly one update every few months.

Reporting bugs

To report a bot bug, please open a ticket from the 不具合報告-bug-report channel rather than in normal chat.

When reporting, please include the following.

Seasons

Pupupu League uses a season system. Ratings and stats shown by the bot are based on the current season.

On the website you can switch between seasons to view rankings, match lists, player stats, and graphs.

Achievements carry over across all seasons.

How to register

To join, first press the “Register” button on the pinned message in the 新規登録-register channel. You can also register with /register.

Once registered, rating data linked to your Discord account is created.

Your starting rating is 5000. You can join rated battles as soon as you register, and you're automatically sorted into the low / high / shared slot based on your numeric rating at that moment (details on the table split below).

Once you take part in a match whose result is officially applied, you receive a rank role matching your rating at that time.

Rating tiers

Rating band Rank name
–3999 Waddle Dee
4000–4999 Waddle Doo
5000–5999 Chef Kawasaki
6000–6999 Meta Knight
7000–7999 King Dedede
8000–8999 Kirby
9000– Star Warrior

Rank roles are granted according to your rating.

Rating tiers (ranks) reflect only the normal rated-battle rating. ≤4-player rated battles use a separate rating, so they don't affect tiers or rank roles.

Table split & shared slot

Rated-battle tables are split into two kinds: “Low” and “High”. Which table you join is decided automatically by your numeric rating at the moment you join (roles are not used for this).

  • High (α): the rating band above the shared slot
  • Shared slot: a middle band that can fill in for either the Low or High table
  • Low (β): the rating band below the shared slot

The shared slot's range is not fixed; it is adjusted according to the rating distribution at the time. For that reason, specific cutoff values are not listed here.

People in the shared slot are automatically assigned to the table that's closer to filling (the side that needs fewer players to reach 16). Inventory is always counted toward only one table, never double-counted.

As soon as either table reaches 16, it starts immediately. Players of that band are seated first, and any shortfall is filled from the shared slot in order of earliest waiting time. Shared-slot players who aren't seated remain in the waiting line.

The α (High) / β (Low) roles are display roles that indicate your current band and update automatically when your rating changes (in the shared-slot band, both α and β are applied). Matchmaking always uses your numeric rating.

Rated battle overview

A normal rated battle works as follows.

  • One rated battle consists of 3 matches.
  • Each match assigns points based on placement.
  • After 3 matches, you submit the total points.
  • Based on the submitted points, the bot automatically calculates placements and changes ratings.
  • You can't apply to join the next match until result submission is complete.

Scoring per match

If scoring gets complicated, we recommend using the match calculator tool.

Open the match calculator

Normal point distribution

In each match, point brackets are decided based on placements with ties grouped together. The middle of an odd-sized placement group is treated as “dead center”.

For example, if placements are 1st, 2nd, 3rd, 4th, 5th, it works out like this.

  • 1st: 10pt
  • Upper: 7pt
  • Dead center: 5pt
  • Lower: 3pt
  • 1st → 10pt
  • 2nd → Upper (7pt)
  • 3rd → Dead center (5pt)
  • 4th, 5th → Lower (3pt)

Scoring when the stadium is unified

Here too, point brackets are decided based on placements with ties grouped together, just like normal.

  • 1st: 10pt
  • Upper: 8pt
  • Dead center: 7pt
  • Lower: 6pt
  • Don't treat VS. Gigantes as stadium-unified; calculate it with the normal point distribution.
  • The unified point distribution may be adjusted in future updates.

Tie rules

Players with the same placement are treated as a single placement.

Example 1

Placements: 1, 2, 3, 3, 3, 6, 7 → treated as 1st, 2nd, 3rd, 4th, 5th.

  • 1st → 10pt
  • 2nd → Upper (7pt)
  • 3rd → Dead center (5pt)
  • 4th, 5th → Lower (3pt)

Therefore the players tied at 3rd get 5pt.

Example 2

Placements: 1, 2, 2, 4, 4, 4, 7 → treated as 1st, 2nd, 3rd, 4th.

  • 1st → 10pt
  • 2nd → Upper (7pt)
  • 3rd, 4th → Lower (3pt)

So the players tied at 2nd get 7pt, and those tied at 4th get 3pt.

Example 3

Placements: 1, 1, 3, 4, 5, 5, 7 → treated as 1st, 2nd, 3rd, 4th, 5th.

  • 1st → 10pt
  • 2nd → Upper (7pt)
  • 3rd → Dead center (5pt)
  • 4th, 5th → Lower (3pt)

Multiple players can be awarded 1st place / 10pt this way. In Pupupu League we value “taking 1st” in City Trial, so all players tied for 1st are treated as 1st and awarded 10pt.

How to participate

① Joining a rated battle

Press the “Join” button in the 16p-match channel and you're automatically sorted into Low / High / shared slot based on your numeric rating at that moment, and added to the waiting line.

The waiting status (the number of Low and High players, and which table the shared slot is currently filling) is shown in a single message that updates each time someone joins or cancels.

It starts as soon as 16 players gather. To stop participating, press the “Cancel” button.

  • Joining requires prior registration via /register.
  • You can't join the next match until result submission is complete.

② Assignment to a room

When a table forms, participants are ordered by rating (descending) then arrival order, and assigned to a private thread.

Players filled in from the shared slot are also finalized as members of that table.

③ Running it in the private thread

After assignment, a private thread is created automatically for each room and all participants are mentioned.

Whoever presses the “I can host” button within 3 minutes of thread creation becomes the Host. After 3 minutes the “I can host” button is disabled and the highest-rated player is asked to open the room.

The Host opens the room and posts the room ID and password in the thread.

Room settings

  • Players: 16
  • Swap rematch: Off
  • 5 minutes
  • No CPU fill-in
  • Terrain changes: On
  • Events: On
  • All stadium switches: On

Before the match starts

  • The Host should open the room and share the room ID & password within 5 minutes of everyone gathering.
  • Before the match starts, all 16 players should check the race settings.
  • If the Host doesn't respond within 5 minutes, another participant may open the room and proceed instead.
  • If players still aren't gathered 10 minutes after the room ID & password are shared, you may prioritize progress and start.
  • However, if 3 or more players are absent at that point, the room is disbanded.
  • When re-opening a race during the 3 matches, if 5 minutes have passed since the race was set up, you may force-start without waiting for everyone to be ready.
  • Whoever opens the paddock (room) should use a wired connection where possible to stabilize the connection.
  • Do not use the force-join-to-race feature.
  • Keep communication to the minimum necessary. Chatting is not allowed.

About proxies

If someone is missing after the match starts, you can recruit a proxy using the “Recruit proxy” button in the thread.

For lateness, leaving mid-battle, etc., the affected person themselves should press the “Recruit proxy” button.

  • When proxy recruitment starts, a notice with an “I'll sub” button is sent to the proxy channel matching the target's band (High = 代理募集α-proxy / Low = 代理募集β-proxy). For the shared slot, the notice is sent to both proxy channels.
  • To be a proxy, press the “I'll sub” button on the notice to join.
  • The first person to volunteer is confirmed as the proxy, and can join the match in that person's place even partway through.
  • When a proxy is confirmed, the match waits up to an extra 3 minutes until the start of the next race (within the 3 races) so they can enter the room.
  • When a proxy is used, submit the original person's points and the proxy's points combined.
  • Only the proxy themselves can enter the confirmed target's score via /score_submit.
  • If the rating goes up → added to the person who acted as proxy
  • If the rating goes down → subtracted from the original person's rating

Rating changes are handled as follows.

After each match

After each match, send the event you played, your placement, and your points to the dedicated thread.

Example

Gourmet GROUP2 7th 3pt

If there are many ties and calculation gets complicated, you may calculate all together after the 3 matches.

If it's still hard to calculate, check with other participants or contact @モデ.

Tallying after 3 matches

Participants can enter points with /score_submit.

Normally you can also enter other participants' points; in that case, who entered them is recorded.

Once everyone's points are in, the bot automatically posts a confirmation message in the thread.

  • Once a majority of participants approve, the result becomes ready to submit.
  • After it's ready, pressing the submit button on the result message officially submits the result and runs the rating calculation.
  • After submission, the room is also released automatically.
  • If even one objection reaction is added, submission is halted and the bot sends a fix guide.
  • When the person who pressed ❌ makes a fix, the confirmation message is reposted automatically. To repost manually, use /score_confirm.

Disconnects & invalid matches

  • If 3 or more players disconnect at the same time, that match's result is invalid.
  • If an invalid match occurs, an extra 4th match is played so that there are 3 valid matches.
  • Also, considering connection conditions, the Host may at their discretion pause the rematch series after a match, disband the paddock once, then re-open and resume immediately.
  • If 3 or more players disconnect simultaneously in 2 consecutive matches, the entire rated battle is treated as invalid.
  • If you disconnect, report it in chat immediately when you notice.
  • Matches you couldn't take part in due to lateness, leaving midway, or disconnects are scored as if you placed in the lower bracket.
  • However, if a CPU raced in your place after the disconnect and that CPU's placement can be confirmed, you earn points matching that placement.
  • If other trouble makes it hard to continue, file a request via the invalid-match request button.
  • An invalid-match request is started first by the Host; if a majority of participants then approve, the entire rated battle is treated as invalid.
  • Even for an invalid match, participants who were absent or left without notice without a valid reason may be manually given a −50 rating penalty (at moderator discretion).

Disconnect compensation & troubleshooting

Disconnect compensation and troubleshooting are decided by moderators. We aim for an operation that can run even when admins are absent.

When trouble occurs, press the “Call @モデ” button in the thread to summon a moderator.

  • If it's possible to continue, we prioritize progress where possible.
  • If it's hard to continue, prioritize an invalid-match request.
  • If a bug prevents result submission, participants use the invalid-match request, and moderators use /release_room as needed.

Practice matches (no rating change)

For those who want to practice running matches without worrying about rating changes, we provide the 模擬戦-practice channel.

Practice matches run much like normal rated battles, but they are not reflected in ratings, achievements, or rankings.

When you use /host in the 模擬戦-practice channel, the recruitment text changes to “Recruiting a practice match with no rating change.”

  • In practice matches, with 8 or more players you can force-start by unanimous agreement of all participants.
  • During a practice match, you can't start a new recruitment in the same channel.
  • Practice matches have no invalid-match request. If it becomes hard to continue, the Host or an admin should end it with the “End practice” button.
  • Practice matches can be ended even without everyone's /score_submit in.
  • Practice results are posted to that 模擬戦-practice channel, not the 結果-results channel.

Handy command list

You can check and register various info with the commands below.

Feel free to use the 新規登録-register channel when you want to view data.

Command Description
/register Register for rated battles (you can also register from the pinned-message button)
/rating Check your current rating
/rating_graph View your rating-history graph
/player_history View your past per-match record
/my_stats Show your stats in a readable format
/host Create a practice-match recruitment
/score_submit Submit your scores
/score_confirm Repost the confirmation message after fixing results

Finally

Pupupu League aims to run autonomously with the bot and moderators even when admins are absent.

If there's an important rule change, we'll announce it again on Discord.

≤4-player rated battle overview

≤4-player rated battles work as follows.

  • One rated battle is just a single match.
  • Based on the submitted placements, the bot calculates and changes ratings.
  • You can't apply to join the next match until result submission is complete.

Your starting rating is 5000. ≤4-player rated battles are managed with a separate dedicated rating and ranking from normal rated battles.

How to participate

① Joining a ≤4-player rated battle

Press the “Join” button in the ≤4-player rated-battle channel to be added to the waiting line.

The waiting status is shown in a single message that updates each time someone joins or cancels.

Matchmaking is assigned every 10 minutes. To stop participating, press the “Cancel” button.

② Assignment to a room

After 10 minutes, participants are ordered by rating (descending) and assigned to a private thread.

To avoid making 2-player rooms where possible, rooms are basically split into a mix of 3- and 4-player rooms. A 2-player room only happens when there are exactly 2 or 5 participants.

Players are matched with others of similar rating, so they're split in rating order; but the room-size order is shuffled each time, so the lower-rated side doesn't keep ending up in small rooms.

It's finalized by the participants at the exact cutoff time; after that, you can't cancel or join late. Consecutive participation is allowed.

③ Running it in the private thread

After assignment, a private thread is created automatically for each room and all participants are mentioned.

Whoever presses the “I can host” button within 3 minutes of thread creation becomes the Host. After 3 minutes the button is disabled and the highest-rated player is asked to open the room.

The Host opens the room and posts the room ID and password in the thread.

Room settings

  • Players: 2–4
  • Swap rematch: Off
  • 3 minutes
  • No CPU fill-in
  • Terrain changes: On
  • Events: On
  • Stadium switches: only the 2 battle-royale types Off
  • No stadium vote

Before the match starts

The Host should open the room and share the room ID & password within 5 minutes of everyone gathering.

Before the match starts, everyone should check the race settings.

If players still aren't gathered 10 minutes after the room ID & password are shared, you may prioritize progress and start.

However, if a majority are absent at that point, the room is disbanded.

Whoever opens the paddock (room) should use a wired connection where possible and must not use the force-join-to-race feature.

Keep communication to the minimum necessary. Chatting is not allowed.

Entering ranks (competition ranking, ties allowed)

Enter ranks using competition ranking. When there are ties, give the same rank and skip the next rank(s) accordingly.

  • 1,2,3,4 (no ties)
  • 1,1,3,4 (two players at 1st)
  • 1,2,2,4 (two players at 2nd)
  • 1,1,1,4 (three players at 1st)
  • 1,1,1,1 (everyone tied)

About rating changes

Between players of the same rating, ratings move roughly by the following baseline amounts.

  • 2-player: 1st +100 / 2nd −100
  • 3-player: 1st +100 / 2nd ±0 / 3rd −100
  • 4-player: 1st +100 / 2nd +50 / 3rd −50 / 4th −100

When there's a rating gap, these baseline values are adjusted (a higher-rated player winning gains less; a lower-rated player winning gains more).

When there are ties, the change amounts for those placements are averaged and distributed. The total change is always 0.

After the match

After the match, send the final placements to the bot.

Press the “Submit ranks” button in the thread and enter the ranks comma-separated (e.g. 1,2,3,4) following the order of the members shown, then send.

Once you send, the bot automatically posts a confirmation message in the thread.

Once 2 or more approve, the result becomes ready to submit.

After it's ready, pressing the “Submit” button on the result message officially submits the result and runs the rating calculation.

After submission, the room is also released automatically.

If even one “Object” is pressed, submission is halted and the bot sends a fix guide.

When the objector's ranks are fixed (resent), the confirmation message is reposted automatically.

About proxies (≤4-player)

≤4-player rated battles do not use the proxy feature.

For lateness, leaving mid-battle, etc., you're forcibly treated as last place.

Disconnects & invalid matches (≤4-player)

If 2 or more players disconnect at the same time, that rated battle itself is treated as invalid.

If you disconnect, report it in chat immediately when you notice.

Matches you couldn't take part in due to lateness, leaving midway, or disconnects are treated as last place.

However, if a CPU raced in your place after the disconnect and that CPU's placement can be confirmed, you earn points matching that placement.

If other trouble makes it hard to continue, file a request via the invalid-match request button.

An invalid-match request is started first by the Host; if 2 or more then approve, the entire rated battle is treated as invalid.

If results are still unsubmitted 30 minutes after thread creation, it automatically becomes an invalid match.

Disconnect compensation & troubleshooting (≤4-player)

Disconnect compensation is not provided for this rated battle. Please use a wired cable where possible.

When trouble occurs, press the “Call @モデ” button in the thread to summon a moderator.

If it's possible to continue, we prioritize progress where possible.

If it's hard to continue, prioritize an invalid-match request.

If a bug prevents result submission, participants use the invalid-match request, and moderators use /release_room as needed.