Skip to main content
The Stack

Big Bad Bots: A Fighting Game Built for Bots

Big Bad Bots is in beta: two bots each build a robot, then fight ten ticks a second, both choosing at the same moment. What designing a game for bots rather than people forced us to decide, and how to get a bot into it.

Big Bad Bots (or B3 for short) is now live and in beta on Chipzen. It was developed by Dave London specifically for Chipzen with two main goals in mind:

  1. Creating a game that, like poker, has technical depth, an adversarial nature, partial information and game theory aspects, keeping it a challenging target for builders interested in that side of bot competitions.
  2. Creating a more visually appealing and entertaining spectator experience when seeing a match live or on replay. Beside making it more fun for builders, it may be a game style that can get new people excited about bot competitions in general.

Here's a replay from launch day, two of the platform bots going the full three rounds.

Building a game for bots rather than for people forced a few decisions that a game for humans never has to make. Here they are, with the reason for each, because they are also the things your bot has to handle.

A match in four stages

Gear-up comes first, and it is a small game of its own.

  1. Body shop. Each bot starts with a budget of 1,000 credits for the pre-fight gear-up. Each player is offered four random body types out of a known pool of 10 body types. Both bots choose at the same time. Each body type is slightly different in values for various properties such as price, speed, reach, number and type of upgrade slots, special move in the fight, etc.
  2. Upgrades Auction. Six rounds of a sealed bid auction over 6 random upgrade parts (again from a known pool of 24 upgrade parts). In each round both bots can use their remaining credits after paying for the body type to submit a sealed bid for the part, and the higher bid wins the part and pays that amount. Credits left at the end are lost. This phase can let clever bots get upgrades complementing the body types they chose, or deny the opponent a part that is particularly useful for its choices.
  3. Fitting. Acquired parts go into their slots: legs, arms, core or head, and you get a final picture of the combined stats your bot's fighter will go into the fight with.
  4. Fight. Best of three rounds on a one-dimensional arena. A round lasts at most 600 ticks, a minute of match time. In the fight, the bot can choose between ten actions: move in, move out, block, idle, five attack types, and the body's special move, which it can use once per round. Strikes have advantage over throws, throws have advantage over blocks, and blocks have advantage over strikes. All actions also include an element of stamina your bot needs to manage so it does not run out and get dazed for 15 ticks.

Nobody gets to react on sight

Both bots' decisions for a specific tick resolve together, so there is no seat order and nothing to balance by swapping seats. That alone doesn't stop a bot from reacting perfectly, though. A program can see a punch coming and block it, every time. So while the opponent winds up a move, your bot sees only that it is attacking, not which attack. Under the launch rule set, bigbadbots-1.3, the move is revealed only after its first hit has landed.

That mask makes the ability to learn and read the opponent's behaviour the key skill here: what it does when both fighters are free, how it answers a wind-up, which attack it starts from which distance. A bot has to learn that during the match, from what the other bot has already shown or bring a great set of heuristics from home.

250 milliseconds, and a bank

Each bot has a decision budget of 250 ms per tick, plus a 3 second bank for the whole match that is not refilled between rounds. Both numbers arrive in match_start, so the bot doesn't have to guess. An answer inside the window costs nothing. Time past the window comes out of the bank. An answer later than the window plus what is left of the bank is a miss: the tick plays a default action, and the bank is gone for the rest of the match.

Every number is public

The full rule set is published: every body, part and move, with its frame data, on the rules page and in the SDK. The same rule set travels to your bot at match start, so it can read the numbers instead of hard-coding them.

Rule sets are versioned and never changed once released. A balance change is a new rule set, with a matching SDK release. As things progress and new rule sets need to be published, that will happen in a fully transparent and public way, hopefully with the builder community's input: nerfing broken combinations, adding new body types or upgrade parts, and whatever changes are needed down the line.

What the beta has

  • Bots are Docker images built on the SDK, in Python or JavaScript, and uploaded like any other Chipzen bot.
  • 8 platform bots for users to practise against, in varying styles and difficulty levels. Matches against them are unrated, and so are games between two bots with the same owner.
  • Matches against other builders' bots are rated from day one. In the beta the rating is simply the share of rated games a bot wins, and a bot needs five rated games to appear on the Big Bad Bots leaderboard.
  • A daily tournament at 14:00 UTC, an eight-bot single-elimination bracket, with platform bots filling the seats not taken by user bots.
  • Live broadcast isn't available in the beta yet, but every match has a full replay, including each bot's action log.

A special offer from Chipzen during the launch: If you can get a bot on the Big Bad Bots leaderboard with at least one rated win, you'll win one Analysis Report for use on one of your poker bots. The report is part of a new service, also entering beta testing, with a deep analysis of the bot's past matches on Chipzen, plus a simulation of 2000 matches (sim currently available for uploaded bots only) providing a report that lays out a bot's performance and behaviour via numerous metrics and points out identified leaks that can be fixed and areas that need watching.

Start from a starter

The SDK ships three starters, each a platform bot rewritten as a short, commented bot: Rusher (fast bodies, constant pressure), Zoner (long reach, punishes whiffs) and Turtle (armour and patience, punishes mistakes). All three are in Python, and Rusher is in JavaScript too. The quickstart takes you from nothing to a basic uploaded bot that can be fighting on the platform in about 20 minutes.

Can't wait to see what the capable and creative builders on Chipzen will build. If you think you can build a champion nothing can beat, tell us on the forum. So... let's see who can build the biggest, baddest bot :)