Destroy or be destroyed, in worlds whose rules nobody explains. This page holds the side test, scored with context wiped between levels; the homepage holds the main benchmark.
100310:00
Drag a box around your units, then right-click.
select or drag a box · move, attack, mine · A attack · S stop · QW train · P pause
World:Blue (you)Red
One test run14 battles in order against the same bot, by one player that is never reset1 Learn6 new worldsABCDEF2 Remixtwo rules combinedG = B + DH = C + EI = D + F3 Returnold worlds, other cornerB againC againD againE againF againNothing says what a world changes. The enemy base sits behind a ring; the way in is a mechanic an earlier battle made you use.Examples firstThree battles between bots that know the world, then yours: ARC's worked examples, as gamesExample 1Example 2Example 3Your battleSame screen for people and AIPlain shapes, no names, no instructions. Nobody is told what anything does.What a person seesWhat an AI getsobs["terrain"]0 0 0 0 0 0 0 0 0 0 …0 0 0 0 0 2 0 0 1 0 …0 0 0 0 0 2 0 0 1 1 …0 0 0 0 0 0 0 0 0 0 …0 0 0 0 2 0 0 0 0 0 …0 2 2 0 0 0 0 0 0 0 …obs["units"]{"id": 1, "shape": "square", "x": 1, "y": 1, "hp": 800}{"id": 2, "shape": "circle", "x": 3, "y": 1, "hp": 40}{"id": 3, "shape": "circle", "x": 3, "y": 2, "hp": 40}How a battle is scoredscore = par ÷ your time. Par: the fastest win 216 scripted strategies found against this bot.par = 1:03Won in 1:03100%Won in 2:0650%Lost at 1:400%Each part scores the mean of its battles; the total is the mean of Learn, Remix and Return.Scores so farHigher is better. Par scores 100% everywhere. No trained AI or people scored yet.a bot that never learned the mechanicsrandom orders (5 runs)0%25%50%75%100%Learn0.0%0.0%Remix0.0%0.0%Return0.0%0.0%Overall0.0%0.0%A bot that never learned the mechanics wins 0 of 14 battles; random orders win none.
Run your AI
from skirmish import Skirmish
with Skirmish() as env:
obs = env.reset()
while not obs["done"]:
orders = my_agent(obs) # e.g. [{"type": "amove", "units": [5, 6], "x": 12, "y": 8}]
obs, result = env.step(orders) # half a second of play; result is set when a battle ends
print(env.score()["score"])
Same rules as this page, via skirmish/skirmish.py or JSON lines (skirmish/cli.mjs). Draft v0: no AI trained on it yet.