Tournament Rules

BWAPI Version

The following BWAPI release versions will be supported:

Game Type

The only game type for the competition will be 1 vs. 1 full game StarCraft: BroodWar 1.16.1 with fog of war enabled.

Time Limit

Games will have a 'frame limit' of 86400 frames, to simulate one hour of gameplay. If a game goes this long, it will be stopped and the in-game score will be used to determine the winner.

Bot Time-Out

Make sure that each onframe call does not run longer than 42ms. Entries that slow down games by repeatedly exceeding this time limit will lose games on time. In particular a bot will be given a game loss if one of the following occurs:

>= 1 frames exceed 10 seconds, or
>= 10 frames exceed 1 second, or
>= 320 frames exceed 55ms

Tournament Structure

The tournament will be round-robin, with as many rounds as possible.

Software Requirements

Open-Source

All entries submission folders, including source code, will be published on the competition website once the competition has finished.

Game Speed

All games will be played at setLocalSpeed(0) (fastest setting). Please make sure that your bot functions correctly on this setting. To avoid problems, base your 'timings' on unit counts or currentFrame() and not machine time. The in-game lobby game speed slider will be set to Normal (i.e. latency frames = 3)

Code Obfuscation

We reserve the right to reject entries if we feel the authors attempt to obfuscate their code (like using silly or deceiving variable names or encoding their algorithm in a 10MB FSM transition matrix stored on disk). Authors who are concerned about the source code leaking information that has not been published yet, are encouraged to submit a technical report to their institutions that describes their entries prior to submitting the code.

To simplify this process we ask authors to only use standard development tools, that can be invoked via shell commands (such as Visual C++). In case remote access is not feasible, we will need detailed instructions for building each DLL.

Conflict of Interest

In order to avoid any conflict of interest or collusion between entries, only one entry per institution / author is allowed per competition.

Persistent File I/O

Bots will have read access to folder 'bwapi-data/read/' and write access to folder 'bwapi-data/write/', both of which will be in the standard location under the StarCraft root directory.

IMPORTANT: File I/O works as follows:

  1. Before each game, the contents of the server-side read directory for your bot are copied to the client machine under 'bwapi-data/read/'. For the first round of the tournament this directory will be blank since a full round has not yet been played.
  2. During a game, you have write access to the 'bwapi-data/write/' folder and read access to the 'bwapi-data/read/' folder on the client you are currently playing on
  3. After the game ends, the contents of the 'bwapi-data/read/' folder are deleted, and the contents of the 'bwapi-data/write/' folder are sent to the server and stored in your bot's server-side write folder.
  4. WARNING: Step 3 may overwrite previous results if you are not careful in specifying unique filenames for each opponent that you play against.
  5. After each bot has played each other bot on the current map (one round robin on that map) the contents of each bot's server-side write folder are copied into the respective server-side read folder and the write folder is cleared.
  6. WARNING: Step 5 will over-write previous round data inside the server-side read folder. Your file output must either be cumulative, or have a filename scheme such that no overwrites will happen in order for your data to be preserved.
  7. The bot's server-side read folder is NEVER deleted throughout the tournament
  8. The next round starts, and from step 1 you will have access to your server-side read data from the previous rounds inside the client's 'bwapi-data/read/' folder
Again, due to the nature of overwriting the read folder with the contents of the write folder, your file names should be unique at least to the current opponent. Two popular choices for file naming schemes are:
  1. Results_EnemyName.txt - Inside this file you store all data about your matches against bot EnemyName. This file will be overwritten every round on the server, so make sure to read its contents each game, and write out the cumulative results into the write folder so you do not lose data after a round
    For example, you can store one line per map played inside this file so you have something like "EnemyName MapName Wins Losses ExtraData", then if you win a game on that map against that enemy, you read in the contents and then output "EnemyName MapName Wins+1 Losses ExtraData+NewData"
  2. Results_EnemyName_MapName_TimeStamp.txt - If you don't want to have a single file per enemy storing cumulative results, you can instead have a single file per game to store results with a unique time stamp or random number suffix. Please not that this is much slower, as your bot will play thousands of games and then have to process each file in the directory each time. Any time-out due to file processing is still a timeout and you will get a game loss. I strongly recommend the first option.


Any reading or writing of other directories is forbidden. You have a 1gb limit for all files in the read directory. If you go over this, it will be deleted.

Detailed Rules