pluto README

The project's README from github.com/tscmoo/pluto. As one markdown file: README.md.

Pluto

Pluto is a StarCraft: Brood War AI. A single neural network, trained by self-play reinforcement learning, plays the whole game — macro and micro, all three races; there is no scripted play. It plays 1v1 melee through BWAPI (https://bwapi.github.io/).

Status: binary releases. This repo hosts binary releases of Pluto. The current one is the model that played the CoG 2026 StarCraft AI Competition (md07x02_cog2026_2578600_int8mv), with CPU inference — no GPU needed. Grab it from the Releases page.

Requirements

Install

Unpack the release zip into your StarCraft folder's bwapi-data/AI/ (the usual place for bots), so the files land like this:

bwapi-data/AI/pluto.dll                 32-bit BWAPI module
bwapi-data/AI/pluto/pluto_infer.exe     64-bit CPU inference engine
bwapi-data/AI/pluto/pluto_weights.bin   network weights (int8)

Point bwapi.ini at the DLL as usual: ai = bwapi-data/AI/pluto.dll

Register the bot as Zerg, Terran, Protoss, or Random — it plays all of them. It announces itself in chat on game start: "Pluto online (md07x02_cog2026_2578600_int8mv). gl hf!"

The binaries are unsigned, so Windows SmartScreen or antivirus software may warn on first run.

How it runs

On game start, pluto.dll launches pluto_infer.exe (found next to the DLL) and talks to it over shared memory. No network connections are made and no files outside the StarCraft folder are touched. The engine process exits with the game.

The model takes one step every 6 game frames. The DLL gives the engine up to 40 ms in the frame it observed and, if the answer isn't in by then, waits for it at the next frame — so every decision is acted on exactly when the model was trained to expect it. On a slow CPU the game runs slower; the bot does not play worse. A step takes ~20 ms on a current desktop CPU and ~60 ms on a 2021 6-core (i5-12500T) with 200 units on the map, up to ~3x that in big late-game fights. When the stalls stay long for a sustained stretch, Pluto says so once in chat ("Pluto: this machine can't keep up ... sorry about the pace") and notes it in its game record.

If the engine cannot start (missing files, unsupported CPU) or dies mid-game, the bot reports the reason in game chat and in the logs ("Pluto: quitting in 10 seconds"), then exits the StarCraft process. This looks like a crash, and is meant to: it is an error, not a game. Check pluto.log and pluto_infer.log in the StarCraft folder.

Files written

pluto.log          DLL log     (StarCraft folder)
pluto_infer.log    engine log  (StarCraft folder)
bwapi-data/write/pluto_bandit_<opponent>.txt
                   per-opponent build-order stats and the running
                   record against that opponent

The bot picks its opening with a bandit over the per-opponent win/loss counts; every build is listed with its mask and name, so you can edit the numbers to steer it. The file is re-read every game (from write/ or read/, whichever is newer, so the usual write/ -> read/ copy between games works too); if you edit it, bump the seq line so your copy wins and keep the closing end line. Below the stats, the file keeps one JSON line per game: a start record (opponent, map, chosen build), an end record (result, frame timing, the model's win-probability trajectory) and any error or resign events.

Notes

pluto (tscmoo/pluto)

Searching Database…

265 ·GitHub
What is this?Pluto is an AI bot for StarCraft: Brood War — a single neural network trained end-to-end by self-play reinforcement learning that plays macro and micro for all three races, with no scripted logic.
Is this a trainable framework or a ready-to-play bot?This repo only ships binary releases of the already-trained model (the one used in the CoG 2026 competition); it's a ready-to-run bot, not training code.
How do I install and run it?Unpack the release zip into your StarCraft folder's bwapi-data/AI/ so pluto.dll, pluto/plutoinfer.exe and pluto/plutoweights.bin land in place, then point bwapi.ini's ai= line at pluto.dll and register the bot as Zerg, Terran, Protoss or Random.
What do I need besides the bot itself?You need StarCraft: Brood War 1.16.1 with BWAPI 4.4.0, 64-bit Windows or Wine, and an x86-64 CPU with AVX2 (AVX-VNNI roughly doubles speed); no GPU is required since inference runs on CPU.
What can go wrong when running it?The binaries are unsigned so SmartScreen or antivirus may flag them on first run, and if the inference engine can't start or dies mid-game the bot deliberately crashes the StarCraft process rather than losing gracefully — check pluto.log and plutoinfer.log.
Does it need Windows specifically?It runs natively on 64-bit Windows or via Wine on Linux; the 32-bit game process and the 64-bit inference engine run as separate processes.
Does it phone home or touch other files?No — the inference engine only talks to the DLL over shared memory, makes no network connections, and doesn't touch files outside the StarCraft folder.
How does Pluto decide which build order to open with?It uses a bandit algorithm over per-opponent win/loss stats stored in a text file (plutobandit), picking builds by their recorded record against that specific opponent; you can hand-edit the stats to steer it.
What happens if Pluto thinks it's losing?When its own win-probability estimate stays pinned at a loss for about 10 seconds, it says 'gg' in chat and leaves the game, distinct from a mid-game engine crash which it treats as an error, not a loss.
Can I speed up inference on my specific machine?Yes — running plutoinfer.exe --bench once (about 2-4 minutes) benchmarks thread counts on your hardware and saves the best setting to plutoconfig.json.
Can I watch the model's confidence live during a match?Yes — setting the environment variable BWRLDRAW=1 draws the model's win-probability graph on screen during games.
Creator
tscmoo
Size
<0.1 MB
Stars
265
Age
3mo
Commits · 90 Days