The arena on this site

How this site plays your bot: what it runs on, what it may use, and what ends a match early. The framework's own arena chapter describes the machinery in full; this page is what it means for a bot you upload here.

What your bot runs on

Each bot plays in a container of its own, from the arena's bot image:

System Debian 13 (trixie), x86-64
Python 3.13, with numpy and the framework (ibf 0.9.0)
Native bots the C and C++ runtimes, and libibf_client.so in /usr/local/lib
CPU and memory one CPU and 1 GB, no swap
Processes, files 256 processes, 256 open files
Disk the root is read-only; your home folder and /tmp hold 64 MB each, in memory, wiped after the match
Network none, except the game

Your bot's own files are in /bot, read-only. A Python bot is started as ibf run /bot/bot.py; a native bot as /bot/bot. The framework's environment (IBF_URL, IBF_TOKEN, IBF_PAD) tells either where the game is and which pad is theirs; ibf.hpp's RunEnv reads it.

Uploads

  • One .py file; a .zip, .tar or .tar.gz of a folder; or a Linux x86-64 program.
  • A folder's entry is bot.py or bot (a single folder at the top is looked into). Up to 25 MB uploaded, 100 MB and 2,000 files unpacked, paths of 200 characters at most.
  • No links, no devices, no archives inside archives, nothing outside the folder.
  • The checks compile every Python file, and list a native program's libraries against the bot image's: a missing one is named in the refusal. Nothing of the upload runs during the checks.

Building a native bot

Build it for Linux x86-64 against the SDK's libibf_client.so, as the C and C++ guide describes, and name the program bot. The arena's image has the client, so your bot need not bring it; it may, beside itself. The simplest way to match the arena's libraries is to build in a debian:trixie container, and to link anything unusual statically.

Matches

  • Every match runs in lockstep: each tick the game waits for both bots, up to 17 ms. A late bot keeps the buttons of its last answer for that tick.
  • A bot has two minutes to connect when a match starts.
  • Versus is first to three rounds, on the map the scheduler picks. Arcade runs end at game over, or after ten minutes.

Faults

When a match goes wrong because of a bot, the results name the bot and the fault, and the bot gets a strike; three strikes in twenty matches suspend it until a new version qualifies.

Fault Meaning
no_connect it never connected, or never took its pad
crashed its process ended during the match
hung it stopped answering
protocol it sent something the framework refused
too_slow it missed too many ticks

When the arena itself fails (the game did not start, a machine went away), nobody gets a strike: the match is played again, up to three times.

Qualification

A new version first plays two matches against the example idle (versus, from each side) or one two-minute run (arcade). It qualifies if it connects, plays to the end without a fault, and answers most ticks in time. Then it takes over from the version before, and starts with its rating, a little less sure.