Every Basement round is played from a random seed A random number drawn before the round opens. The match plays out from it. , and that seed is locked in a hash before anyone can pick. When the round ends, the seed is revealed, so you can check the hash and replay the round in your browser. This page covers what that proves and what it doesn't.

Every side starts even

Who plays in a round is public. The lineup comes from the game and the round number alone. Everything that could favor one side, like a grid position, spawn point, role or fighting style, is dealt by a shuffle drawn from the seed.

So before GO, each side has exactly the same chance: 1 in 2, 1 in 4 or 1 in 6, depending on the game. The lineup screen doesn't reveal the shuffle, and the win-chance bars during a match read only what's on the stage.

Locked before picks, revealed after

When a round is announced, the server draws its seed and a salt, a random 32-character code. It publishes a lock right away, before the round takes a single pick. The lock is the SHA-256 hash of this text:

text
arena:round:version:seed:salt
  • arena is the game's id: rush-hour, clash, knockout for Neon Knockout, broadside, skyball or turf-war. It's the same id as in the game's link, like /a/knockout.
  • round is the round number.
  • version is the version of the game that played it, like skyball-4. It changes when a game's rules change, so older rounds keep the version they ran on.

Picks close just before GO, and the round is locked in before its first frame plays. When it ends, the seed and salt are published. If anyone had changed the seed after picks came in, the hash would no longer match the lock. The salt is there so nobody can work out the seed from the lock by trying every possible number.

Here's a real one, Skyball round 100, from when Skyball was one on one and ran on skyball-3:

text
skyball:100:skyball-3:1426668468:ff6ae4bd664563b967c173074f57f5a2

Its SHA-256 is 640c01c179e8b0a14105f05a27d757e163b267507eb1434e86309070282f612f, which is the lock that round published before it opened.

Check a round in the app

1

Open Game info

Tap the game's name near the bottom of its card in the feed, next to the small info icon. On a computer, click the ⓘ next to the title under the stage, and the panel opens on the left.

2

Find Provably fair

Scroll to Provably fair. Lock (now) is the current round's lock. Below it is the last finished round with its number, a Replay link, and its Version, Seed, Salt and Lock.

3

Copy the values

Tap any value to copy it. Long ones are shortened on screen but copy in full.

4

Hash it

Join arena, round, version, seed and salt with colons and run SHA-256 on the result with any tool you trust. It should equal the round's Lock.

5

Replay the round

Tap Replay to run the round again in your browser.

Turf War Game info sheet showing Lock (now), Round 7770 with a Replay button, and that round's Version, Seed, Salt and Lock, each with a copy icon
Game info, scrolled to Provably fair

On a computer the same panel also shows the arena's last 10 winners, newest first, and a replay lists the round's values under Fairness.

Broadside info panel on the left with the tagline Four ships. Last afloat., a short rules note, ten winner faces under Last 10 winners, and Provably fair with Lock (now), Round 10860 with Replay, and its Version broadside-3, Seed, Salt and Lock, beside a live Broadside match calling the last two ships
Game info on a computer, with the last 10 winners and Provably fair

To run the check with your own code, see verify a round.

What a replay proves

A replay is a fresh simulation. The replay page loads the same game code the live round ran, feeds it the revealed seed and the round's Drops, and plays the whole match in your browser. If the winner or the finish time comes out different from what the round reported, it refuses to play and says "This round can't be replayed on this version".

The two checks cover different halves. The hash shows the seed was fixed before picks opened. The replay shows that this seed, plus the Drops, gives the result you saw. More on watching and sharing replays is in replays.

What this doesn't cover

  • Drops aren't in the lock. When someone drops, the server picks the Drop's kind and target at random right then. Every Drop is published with the round, with its kind, target and when it landed, and the replay uses them, but none of that is locked in ahead of time.
  • The game code isn't public. Outside the app you can check the hash, but you can't re-run the match on your own. The in-app replay runs the shipped game code in your browser.
  • Replays stop working after a game update. Once a game's version changes, its older rounds show "This round ran on an earlier version of the game" instead. The hash check still works for them.

Next steps

Verify a round

Check a round with your own code.

Learn More
Replays

Watch a finished round again.

Learn More
Ask a question... ⌘I