Player rewards
Every credit a gamer plays in your cabinet feeds their arcade career: XP levels them up toward Arcade Legend, Prize Tickets buy cosmetics at the Prize Counter, and challenges put your game on the weekly tournament board. You don't call any reward API. The arcade pays rewards when your game does the three things it already does: take coins, submit scores and unlock achievements.
| Your game... | SDK call | Can earn the player |
|---|---|---|
| takes a coin | insertCoin() or the cabinet's INSERT COIN | XP, platform badges |
| saves a score | submitScore(score) or your server's score API | XP, tickets, challenge rank, platform badges |
| unlocks one of its achievements | unlockAchievement(key) | XP |
All of these are paid once per event (each has its own idempotency key), so a
retried request never pays twice. Nothing is paid in preview or mock mode:
testMode: true results store nothing.
XP and levels#
| WHEN THE PLAYER... | XP |
|---|---|
| Inserts a paid coin into your cabinet | +10 per coin |
| Beats their own best score on your game | +50 |
| Unlocks one of your game's achievements | +25 |
| Reviews your game | +30 |
Reaching level L + 1 from level L costs 100 × L XP, up to level 99. Levels come with rank titles and a full-screen LEVEL UP celebration. XP is pure bragging rights: it never turns into coins or tickets.
Prize Tickets#
Tickets are the arcade's prize-counter currency. Players can't buy them and they never convert to coins, so they're a fair reward for skill. A score your game saves pays out like this (both rows can apply to one score):
| A SAVED SCORE THAT... | TICKETS |
|---|---|
| Beats the player's own best | +5 |
| Lands #1 on the all-time board | +25 |
| Lands #2–#3 | +15 |
| Lands #4–#10 | +10 |
A player's first saved score on a game counts as a personal best, so every newcomer to your cabinet earns something on their first run.
Challenges#
The arcade runs daily, weekly and special challenges, often on a single game.
Any saved score on that game during the challenge window counts: the player's
best score (HIGH_SCORE challenges) or the sum of their scores
(TOTAL_SCORE). When the challenge ends, the top ranks win coins, tickets and
XP from the arcade (never from your revenue share). Featured games get extra
players, so a clear, honest score is your ticket onto the board.
Achievements#
Each of your game achievements is worth a fixed +25 XP, the same for every game, so no cabinet can farm rewards. Your game also helps players toward the arcade's own platform badges, which pay more:
| BADGE | HOW | XP | TICKETS |
|---|---|---|---|
| Insert Coin | Drop your very first coin into a cabinet. | +50 | +25 |
| Arcade Hopper | Play 5 different games. | +150 | +75 |
| Floor Explorer | Play 10 different games. You've seen every aisle, hero! | +300 | +150 |
| Week-Long Warrior | Claim your daily bonus 7 days in a row. | +200 | +100 |
| Arcade Critic | Leave your first review. | +40 | +20 |
| Beat Yourself | Top your own best score on any game. | +30 | +10 |
| Welcome, Player One | Finish the welcome tour and step onto the arcade floor. | +25 | +10 |
(There are secret ones too. We're not telling.)
Design tips#
- Make scores mean something. Rewards follow saved scores, so submit one
at the end of every run and set a realistic max score in the workshop:
anything above it is rejected as
SCORE_OUT_OF_RANGE. - One score per coin. Each coin insertion takes at most one score
(
INSERTION_ALREADY_SCOREDafter that). Submit at game over, not every level. - Use server scores for competitive games. Scores from the client SDK are untrusted. A score your server submits with an API key (see server verification) is tied to a real insertion, which is what challenge boards deserve.
- Spread achievements across a run. An early one in the first minute, a
few skill badges, and one or two secrets for the completionists. Hidden
achievements show as
???and make great talking points. - Let the arcade celebrate. Level-ups, tickets and badges get their own full-screen celebrations and sounds over your cabinet. Keep your own pop-ups small so they don't stack.