The battle engine is a pure, deterministic function: the same setup plus the same
actions plays out identically on every device. So the Arena doesn't send state, unit
lists or damage — it sends actions. About ten bytes per move, about five
kilobytes for a whole match. Both sides run the full battle locally and compare a hash
of the state after every turn.
Match setup uses commit-reveal: both sides hash their teams and the board seed
before either sees the other's, so nobody can snipe your party. The protocol
version, a content hash and an engine fingerprint must match or the hello politely
refuses — different builds simply can't join each other's matches.
Team validation happens before the fight: your four heroes, their levels, weapons,
Charms and Crests are checked against the content rules on both machines. Ownership
isn't provable without a server — Arena honesty is part of being invited to the
tavern.
~10 bytesper move
~5 kBper match
Commit → revealanti-scam setup
State hashesafter every turn
No serverrequired
Mirrored boardsbiome by biome
Versus rulesown Bond, own Downed rule, tie-break alternates
A desync is technically impossible; if the hashes ever
disagreed, the match is declared no contest and each side writes both states to a
log on its own device.
— Arena design notes