How To Build

Everything between your game and the arcade floor: the SDK your game talks to, the integrity rules the server enforces, the curve that pays your players, and the split that pays you.

What A Cabinet Is

A cabinet is your game installed on the arcade floor. You own it — at the token layer it's an NFT in your wallet — and it works for you: 30% of every credit it swallows routes to its owner.

  • ·You set the play cost in $INSRT, within platform bounds.
  • ·You define the clear condition players chase for the 1CC.
  • ·You shape the reward curve — how tickets follow score percentile.
  • ·The platform runs the boards, the anti-cheat, and the payouts.

Getting A Pass

Live
  • ·Connect your wallet — same login as players, no separate account.
  • ·Open BUILDERS in the menu and accept the skill-game policy. Your menu slot becomes ● BUILDER BAY.
  • ·The bay is where your cabinets, plays and claimable revenue will live.

The One Rule

SKILL ONLY. TICKET PAYOUTS ARE DETERMINISTIC FUNCTIONS OF PLAYER PERFORMANCE. NO CHANCE-BASED PAYOUT ON PAID ENTRY — EVER.

You configure a reward curve, never odds. Randomness in your game design is fine — random enemy waves, random drops — as long as what a player is paid is a function of their measured performance, not a draw. Cabinets that break this rule don't ship; cabinets caught breaking it after shipping are unplugged.

The Cabinet SDK

Live

Your game runs in a sandboxed iframe and talks to the arcade shell over postMessage. It never sees a wallet, a session token or the API — it reports what happened; the server decides what it was worth.

Include the SDK and initialize:

<!-- index.html — your bundle's entry -->
<script src="../insrt-cabinet-sdk.js"></script>
<script src="game.js"></script>
// game.js
const sdk = InsrtCabinet.init();

// the arcade pressed INSERT COIN — begin a fresh run
sdk.onStart(() => beginRun());

// back to your idle / attract screen
sdk.onReset(() => showAttract());

// report score as it changes (throttle to meaningful changes)
sdk.scoreUpdate(score);

// exactly once per run, when the run ends
sdk.gameOver({
  score,          // final score
  wave,           // wave / level / stage reached
  cleared: true,  // did this run meet your clear condition?
});

// when assets are loaded and you can accept a start:
sdk.ready();

The full protocol, for reference:

  • ·ready (game → shell): your game is loaded. Enables the coin slot.
  • ·start (shell → game): a credit was inserted. Start a run from zero.
  • ·score (game → shell): score changed. Timestamped and streamed to the server.
  • ·gameOver (game → shell): the run ended, with final state. One per start.

Iframe sandbox: allow-scripts only. No network calls, no storage, no wallet access — bundles that try are rejected in review.

Scoring Integrity

Live

The server validates every run against your cabinet's anti-cheat envelope. Design your scoring so honest play never trips it:

  • ·Score is monotonic — it never goes down during a run.
  • ·Each reported jump must stay under your cabinet's MAX EVENT DELTA. Pace big bonuses across updates.
  • ·Timestamps only move forward. Max 900 events per run.
  • ·The final score must sit within one delta of the last streamed event, under your cabinet's MAX FINAL SCORE.
  • ·The shell hashes the full event stream; the server recomputes and compares. Mismatch voids the run.

A voided run pays zero tickets and never reaches a board. The raw event log is stored for audit either way.

The Reward Curve

Your curve maps score percentile to tickets. The server ranks each run against the cabinet's last seven days of play (padded with your baseline scores so a quiet week can't be farmed) and pays from the highest breakpoint the run reaches:

// INVADERS ships with:
rewardCurve: [
  { p: 0,  t: 0 },   // below median — no tickets
  { p: 25, t: 1 },
  { p: 50, t: 2 },
  { p: 75, t: 4 },
  { p: 90, t: 6 },
  { p: 99, t: 10 },  // top 1% of the floor
],
baselineScores: [200, 450, 800, 1500, 2600],
  • ·Curves are platform-bounded: max expected payout per play and a minimum skill spread are enforced at review.
  • ·The curve is published to players up front, and its hash is committed on-chain at the token layer for auditability.

An economy simulator ships with the portal — chart projected burn, your revenue and ticket outflow against expected traffic before you submit.

Economics

Every credit your cabinet swallows splits four ways:

  • ·40% BURN — removed from the fixed supply, forever.
  • ·30% OWNER — yours, claimable from the cabinet's splitter.
  • ·25% POOL — funds the cabinet's weekly prize board.
  • ·5% TREASURY — ops and counter buybacks.

Splits are per-cabinet configuration within admin bounds. Revenue claims (claimRevenue) go live with the token layer; plays and accruals are tracked from day one.

Shipping A Cabinet

Soon

The upload bay opens with the Builder Portal. The pipeline:

  • ·Upload your bundle — a zip of static HTML/JS, size-capped, with the SDK included.
  • ·Automated checks: SDK handshake test, bundle size, banned-API lint (no external fetch, no wallet access).
  • ·Configure the cabinet: name, slug, marquee art (pixel template), play cost, clear condition, reward curve.
  • ·Human review and playtest. Approval mints the Cabinet NFT to your wallet and lists you on the floor.
THE SDK IS LIVE TODAY. BUILD AGAINST IT NOW — BE FIRST THROUGH THE DOOR WHEN THE BAY OPENS.