All Collections
Features and APIs
Introduction to brainCloud Global Tournaments
Introduction to brainCloud Global Tournaments

Design & Implementation Details

John Harley avatar
Written by John Harley
Updated over a week ago

Overview

brainCloud’s Global Tournaments are a great way to increase player engagement in your game. Global Tournaments are suitable for any game where competition centers around leaderboards or rounds of play where the goal is to achieve the highest score

Global Tournaments: 

  • Are easy to add to apps

  • Are flexible in terms of the tournament schedule, phases, rules, payouts, etc.

  • Automate key aspects of player engagement

  • Are manageable so that entry fees, prize amounts, etc. can change over time as you iterate

  • Act as building blocks for building more complex tournament types (i.e., tiered tournaments, etc.)

Design Concepts

A good way to begin your design consideration for a Global Tournament is to think of it as a set of prize rules associated with a leaderboard.

Your design will want to consider how to use these features of Global Tournaments:

  • Entry fees – Free vs. Paid Tournaments with separate prize pools. Consider if you wish to Free and Paid players to fight on the same Leaderboard even though they are competing for different prize payouts. 

  • Auto-Join for Free Tournaments - Automatically enrolls your user into a tournament, so they have no way to miss the thrill of competition

  • Duration – support for daily, weekly, weekend, or arbitrary length tournaments (up to 14 days). Also, consider having some off-time to give your users some rest between Tournaments. 

  • Competition Metric - Choose if you want players to compete based on their Top Score from their best single round, or a Cumulative Score that collects all their participation during the Tournament. 

  • The Phases of your Tournament – Announcement to build interest in an upcoming tournament, an open enrollment period before the competition starts, competition start, how long past the start of competition you want to allow new players to enroll, a wrap-up buffer, and the payout phase

  • Prizes – Based on Rank, Award participants any combination of virtual currency, XP, player stats, achievements, and custom data. 

  • Push Notifications – automatically send configurable push notifications at key points during the tournament.

  • Email Notifications – Option to send custom email notifications as well.

Design Tips

Here are some trends we are seeing in Global Tournaments implemented by our customers: 

  1. Free Tournaments boost player engagement and give players confidence about their ability. Soft currency prize payouts are effective lures for engaging players during Free Tournaments. 

  2. Auto-Joining Free Tournaments significantly improves player session-length as players discover they have the opportunity to vie for a prize.

  3. Free Tournaments should let players enroll until nearly the end of the competition period since there is no downside. 

  4. Paid Tournaments should close enrollment at the point where Design feels they won't have adequate time to post a competitive score. In a Tournament based on Top Score, this might be equal to the time it takes to play just over 10 rounds. In a Paid tournament based on Cumulative score, this might be two or three long play-sessions, including breaks (perhaps as high as ~14 hours).

  5. The minimum Buffer length which allows players to submit their score but not start new rounds that count towards their rank should be longer than two rounds of play. Eg. If an average round takes about 5 minutes, then a buffer of 15 minutes is safe. 

  6. Casual player engagement is dramatically increased during Tournaments based on Cumulative Score. 

  7. Hard currency entry fees for Tournaments are accepted by players provided the players compete on an even footing (players are restricted to the same gear/boosts), and Rank is based on Top Score as opposed to Cumulative Score.

  8. Running your tournament competition period Friday Afternoon through Sunday night seems to build the most engagement since players are not busy with weekday work. 

  9. Most Players appreciate Push Notifications for: "Tournament starting now", "You were passed", "Tournament nearly over", and "Come get your prize"

  10. Players need some rest period between tournaments to avoid fatigue. (Typically: Monday through Thursday)

  11. Since Casual players and Payers prefer different types of Tournaments, it's a good idea to offer each type, but alternate between them like so: 

  • Weekend 1 - Free Tournament, Cumulative score

  • Weekend 2 - Paid Tournament, Top Score from your best run

  • Weekend 3 - Free Tournament, Cumulative score

  • Weekend 4 - Paid Tournament, Top Score from your best run... and so on 

An effective prize structure for tournaments has payouts for the following pay ranks: 

  • 1st place

  • Top 3 (will pay only to 2nd and 3rd place since 1st place already got a prize)

  • Top 10% (will skip top 3 players since they already got a prize)

  • Small Consolation Prize for the remainder of players. 

UI Recommendations

Tips on how to express Tournaments to your users:

  • Tournaments should be expressed in the theme or style of your app. 

  • Prompt the user to join available tournaments with a button or affordance in the main or lobby view. 

  • A tournament's offer should show: Tournament name, Time, Offer to Join, and a button to view the Prize list.

If you implement concurrent tournaments, offer a means to cycle between them. 

The Confirmation page to join the Tournament should show the Tournament name, Time, Offer to Join, and Prize list. Note: The entry fee and payout values shown in the example below may not be appropriate for your game's economy should be tuned according to your design. 

Confirm successful entry

Once your user is enrolled, offer a means for the player to view: Tournament Name, Time, a ranked list of participants centered on the player, Player nicknames, Player scores, (Optional) Player profile picture, Prize List Button. If your Tournament implements a different mode of play, put the Play button for it in this view

On Login and Returning from a round of play, check for a Tournament Payout and display it to the player. Show: Score, Final Rank, and Prize. Celebrate his performance. This dialog should have a claim button to dismiss it.

Implementation Concepts

This diagram describes the main entities involved in creating a Tournament:

  • Leaderboards are defined in the brainCloud system by entities we call Leaderboard Configs

  • To create a tournament, you attach a Tournament Template to a Leaderboard Config

  • The Tournament Template defines the rules of a tournament – entry fees, prize rules, notification templates, etc.

  • The Leaderboard Config defines how scoring works (highest score, cumulative score, etc.), the rotation schedule, and also the pacing of the tournament phases.

  • Each rotation of the leaderboard is a Leaderboard Version. All scores are stored by version in Leaderboard Entry objects.

 

Special rules:

  • The same tournament template may be used by multiple leaderboards. This, of course, creates a separate tournament per leaderboard.

  • A leaderboard may also attach multiple tournament templates. This is useful for cases where you want to have both free and paid versions of a tournament, that act upon the same set of scores. (rationale: better liquidity, smaller payouts)

 

Tournament interactions / API

The following are the key tournament interactions to understand:

  • Get Tournament Status – returns the status of the specified tournament, and whether the player is currently enrolled in it. If the player is not enrolled, returns details of all the tournament configs associated with the leaderboard

  • Join Tournament – tournaments must be joined before you can submit scores to them. Joining a tournament involves specifying the leaderboard that anchors the tournament, and the tCode of the tournament [template] that you are joining. An entry fee will automatically be deducted from the player’s currency balance if required.

  • Post Tournament Score – posts a score to the tournament leaderboard. Note that you must pass in the epoch time that the game round started in, to ensure that the score is eligible. Note that there are several versions of this operation (see the API for details).

  • View Current Reward – returns the player’s standing in the currently active tournament, and the reward they can expect to receive if they keep this rank.

  • View Reward – returns the players reward for a completed tournament, and whether it has already been claimed. Will return an error if the player is not enrolled in the tournament.

  • Check For Events – query the brainCloud events queue to see if any Tournament Completion events have arrived

  • Claim Tournament Reward – claims the rewards for a completed tournament, incrementing appropriate player balances (currencies, etc.).

For more information on these interactions, see the Tournament API.

 

Phases and States

Tournament States are used to organize the broader tournament lifecycle. They determine when tournaments are active, processing award calculations, and available for award clams.

Tournament Phases help to micro-manage when players can join tournaments, post scores, etc. throughout the Active tournament state.

The following diagram summarizes the relationship between brainCloud tournament states and phases:

Note that brainCloud doesn’t explicitly tell you the phase it is in – instead, it gives you information as to when registration starts and ends, when play starts and ends, etc.

 

Events and Notifications

A key goal of brainCloud’s Global Tournaments system is to automate the tournaments interactions with players. As such, the system:

  1. Automatically rotates and cycles through tournament states and phases as per the schedule defined

  2. Send events to players when the tournament has completed

  3. Optionally sends push notifications and/or emails: 

  • When a new tournament opens for registration (enrollment) – sent to previous tournament participants

  • When a new tournament opens for play (competition) – sent to previous and currently registered participants

  • When a tournament’s competition phase is close to ending – sent to current participants

  • When another player beats their tournament score, bumping them down a rank – sent to current participants within ten ranks of the player who posted the score

  • When a tournament completes, and their awards are ready to be claimed – sent to current participants. The system also sends an Event to the player’s event queue.

Note that you shouldn’t blindly configure all notifications – especially the email-based notifications. Some recommendations:

  • Do not configure both Tournament Registration start and Tournament Play start if your tournament doesn’t have an exclusive registration period, or your players will get two back-to-back notifications, and be annoyed.

  • Be careful about configuring Email-based notifications – we’ve included the trigger points, but for most cases, we suggest that you only consider using them to announce that a tournament is complete and that the player should come to collect their prize. If you do choose to use email notifications, to improve the value of that mail, we encourage including info such as current product news, social media goings-on, other game offers from your studio, seasonal greetings, etc.

  • Be aware that brainCloud does not yet support automated unsubscribes (coming soon)

 

Special: Scoring notifications

There are two types of designers. Designers who think that scoring notifications are cool, and those that think they could get annoying very quickly. And they are both right.

To add the engagement of scoring notifications, without overwhelming the player, we’ve added the following rules:

  • We’ll only send a player one scoring notification per 24-hour period

Two additional rules affect this:

  • If you post a new score, we reset the notification clock. This means that engaged players will receive more than one notification in a 24 hour period because they’re actually responding to them.

  • We won’t send the player a score update until at least 30 minutes after their last posted score (i.e. you don’t want to receive a push notification immediately after exiting the game)

 

Auto Join and Auto Reward

Global Tournaments offer an incredible way to increase engagement and monetization with your players – but what if you are just looking for a quick way to automatically add rewards to your weekly leaderboards – without code changes?

brainCloud allows you to automate key portions of the tournament processing:

  • Auto Join – Enables players to automatically join the tournament associated with a leaderboard, simply by posting a score to it (via the standard leaderboard PostScore method). Note that this only works for leaderboards that have one-and-only-one tournament associated with them – and that tournament must be free.

  • Auto Claim – Causes tournament rewards to be automatically claimed by players during login. Note that the [x] Enable Tournament Auto Claim check at login compatibility flag must also be enabled on the Design | Core App Info | Advanced page of the portal

Caveat – although we provide the Auto Join and Auto Claim features for convenience, in most cases we would definitely recommend that you implement the full tournament API. A key benefit to tournaments is engaging with your players – getting them excited about what they can win and adding that extra flourish as they claim their prizes. Auto Join and Auto Claim hide all that – minimizing the opportunity for extra player engagement. 

 

Features Availability and Billing Notes

Global Tournaments are available across all brainCloud subscription plans.

The basic API billing rules are in effect – 1 API count per API call, 1 API count per Push Notification, 1 API count per Email Sent

In addition, the following counts are added to offset the overheads of automated tournaments:

  • Awards Calculation – At the end of the tournament, 1 Bulk API Count per participant is charged to cover the CPU load of processing results and sending events to the players

  • PostTournamentScoreWithResults() – adds 1 Bulk API count to cover the overhead of comparing the players previous and current tournament results, and determining whether to send notifications to displaced players. As compensation, however, returns the updated tournament results (essentially GetGlobalLeaderboardView()), hopefully saving the app an API call in return.

  • Auto Claim – if the Auto-Claim feature is enabled, 0.5 Bulk API Counts are added to each Authentication()

Did this answer your question?