Live contest rulesAuction-first economyLaunch defaults shown

Arena field manual

Rules that change how you play.

Rock-Paper-Code is a deterministic RPS arena with a wallet, auctions, scheduled perks, and stage resets. The match is still won one move at a time, but the contest is often decided by when you spend and when you wait.

Live constants

Launch profile

Profile-driven

Rounds

2000

Mid auction

600

Max declare gap

150

Win clamp

+1.20

01 / Match protocol

The engine resolves every round before the economy gets fancy.

Base scoring

Rock beats scissors, scissors beats paper, and paper beats rock. A base win is +1, a base loss is -1, and a draw is 0.

Draw-neutral streaks

Draws do not reset streaks. They are neutral for scoring and preserve the current consecutive win or loss state.

Invalid move forfeit

A move outside rock, paper, or scissors forfeits that round. If both sides return invalid moves, the round is a draw.

02 / Wallet economy

Capital management is part of the game.

Starting capital

120 cr

Contestant wallet at season entry.

Default stipend

0 cr

The engine can read S from config, but launch seasons use no stipend.

Luxury fee

2% over 2000

Fee applies only to the excess after post-match settlement.

Recovery

50 -> 150

Once per stage when the contestant wallet falls below 50 cr.

Rule lens

Win rounds, but protect optionality.

The launch economy rewards clean match edges, good timing, and auction discipline. Your first hard choice is whether a visible perk is worth tying up capital before you know the opponent's shape.

2000 roundsRound 600 mid auctionInvalid move forfeits

03 / Auction market

The shop is closed. The market is an auction board.

How acquisition works

No ctx.buy()

Perks are acquired with ctx.bid(stock_id, amount). The public SDK and sandbox no longer support a live posted-price shop.

Launch supply uses k_units = 1 for each listed perk, which means a win denies the opponent that same stock. The engine itself remains supply-configurable.

Pre stocks can receive context bids during round 0 and clear at round 1. Mid stocks open and clear around the configured trigger round, which is 600 in the launch profile.

Create timing pressure with a measured premium.

Best when your strategy adapts during the match. You can contest the mid auction, then activate from the next round onward once ownership is confirmed.

Reserve + 3 to 10 cr is a common sample range.

Auction pressure

A quick bankroll read for the current board.

Contested
Quiet board6/10Expensive denial

Bid with a planned activation window and enough remaining wallet to survive variance.

04 / Perk reference

Know which powers are live, optional, or retired.

Launch perkCategoryAuctionReserveEffect
PowerPlay_120multiplierPre, sealed Vickrey12 crWinning rounds inside the active window pay x1.20, then respect the +1.20 clamp.
LossCaploss_protectionPre, sealed Vickrey12 crLosing rounds inside the active window are floored at -0.80 cr.
MomentumBoostsituationalMid, uniform price15 crOn a win streak >= 2, a win receives x1.80 before the +1.20 clamp.

PowerPlay_110

Config-dependent

Supported by catalog-era data, but not in the launch admin default supply.

WindowWager

Config-dependent

Window math is implemented; availability depends on season supply.

WindowHedge

Config-dependent

Settles on the exclusive window boundary: [t_start, t_end) pays at t == t_end.

Perk planner

Multiplier pressure

PowerPlay_120

Chase when

Your strategy can turn prediction edges into frequent wins.

Avoid when

Your win rate is noisy or your opponent is likely to counter-adapt quickly.

Activation timing

Schedule for a future stretch where your model expects a stable edge.

Bid note

Reserve 12 cr. The sample SDK often starts at reserve + 3 cr.

Overlay order and stacking

01

Base delta

02

Draw effects

03

Situational

04

Multipliers + clamp

05

LossCap

Launch profile caps are one multiplier, one situational perk, one information perk, and max_dg of one. Activation must start at least one future round after declaration:t_start >= current_round + 1.

05 / Settlement math

The wallet ledger is formula-first and auditable.

Performance bonus

alpha * clipped(net_yield / rounds)

Launch alpha is 250, so one net standard win across 2000 rounds is worth 0.125 cr. Alpha remains profile-driven.

Luxury fee

max(0, wallet - 2000) * 0.02

Charged after match credits are applied. Wallets below 2000 cr pay no luxury fee.

Window settlement

[t_start, t_end) settles when t == t_end

The active rounds exclude t_end. Settlement occurs on the first round index after the window closes.

Upset bonus

Planned wallet credit

TrueSkill updates are active for ranked standings, but upset wallet credits are not currently paid in settlement.

Main ranked standings use TrueSkill conservative rating. The economy leaderboard tracks wallet capital separately, which is the best place to inspect bankroll performance.

06 / Season lifecycle

Stages give the economy a pulse.

Season entry

A contestant wallet starts at C0, which is 120 cr in the launch config.

Match kickoff

Auction stocks are created from season supply. Pre stocks can collect round-0 context bids and clear at round 1.

Mid match

Uniform-price stocks open around the configured trigger round, 600 by launch default.

Settlement

Round logs, performance bonus, luxury fee, recovery checks, and rating updates are recorded after the match.

Stage boundary

Wallets below the reset floor are softened upward, and bankruptcy recovery availability resets for contestant wallets.

07 / SDK and upload

A valid strategy is small, deterministic, and context-aware only when needed.

Static scan

Validates imports, blocked calls, subclass shape, and write-mode file access before the sandbox runs.

Smoke test

Runs 100 rounds against AlwaysRock. Each next_move() call must complete within 1,000 ms (SIGALRM on Linux). The 5-second transport timeout applies per command as a secondary guard.

Context test

Runs 50 rounds with a mock context and records bid() plus activate() diagnostics.

Live match

A returned value outside rock, paper, or scissors forfeits that round. If both moves are invalid, the round is a draw.

Economy-aware skeleton

from decimal import Decimal
from rpsa_sdk.strategy import Strategy

class AuctionAware(Strategy):
    uses_context = True

    def __init__(self):
        self._ctx = None
        self._bid_placed = False
        self._round = 0

    def set_context(self, ctx):
        self._ctx = ctx

    def next_move(self):
        if self._ctx and not self._bid_placed:
            state = self._ctx.market_state()
            for stock in state.get("active_auctions", []):
                reserve = Decimal(str(stock.get("reserve_price", "0")))
                bid = reserve + Decimal("3.00")
                if self._ctx.credits() >= bid:
                    self._ctx.bid(stock["stock_id"], bid)
                    self._bid_placed = True
                    break
        self._round += 1
        return "rock"

08 / Compliance

The sandbox rewards simple, inspectable code.

No hidden side effects

File writes, unsafe imports, and blocked runtime calls are rejected by validation or sandbox policy.

Latency matters

Live execution measures turn timing. Upload checks include command-level timeouts and memory reporting.

Two leaderboards

TrueSkill ranks match strength. Economy views show wallet capital and credit flow.
Exact activation and window boundaries

Activation declarations are not same-round effects. If your strategy declares at roundt, the earliest legal start is t + 1.

Duration windows are exclusive at the end. A perk active from 10 to20 applies on rounds 10 through 19, then closes at round 20.