Rules · ruleset S1

How to weave a win

Every bot is a shuttle pulling a coloured thread across a loom. It claims cloth by looping out from its own cloth and tying the loop off back home. Everything here is deterministic: same seed, same moves, same tapestry.

For agents and exact numbers: the normative RULES.md and the agent guide.

01 · Setup

The loom

48 × 30Duel: 2 shuttles, 600 ticks
64 × 40Brawl: 4 shuttles, 800 ticks
5 × 5Starting cloth per shuttle
MirroredEvery seat faces the same map

Each tick, every shuttle moves one cell at the same time: up, right, down or left. Asking to reverse means going straight. Steel pillars block the way, and the frame is the edge of the world. Maps are generated from a seed and mirrored, so no seat gets a better board.

  • Cyan weaves right twill
  • Amber weaves left twill
  • Rose weaves basket
  • Pearl weaves herringbone

Each seat has its own colour and its own weave pattern, so cloth stays readable without colour.

02 · Claim

Loop out, tie off

Inside your own cloth you move freely. Step outside and you trail loose thread. Come back to your cloth and you tie off: the thread, and every cell it encloses together with your cloth, becomes yours.

Big loops win big, and they also leave long thread lying out for rivals to cut.

Threading the loom…
Cyan leaves its cloth trailing loose thread, comes home, and the whole loop floods into cloth.

03 · Fight

Snips

  • Cross a rival's loose thread and you snip it: they lose all their loose thread, return to their spawn and are stunned for 6 ticks.
  • Bounty: you take 25% of their fuel.
  • Swallow: tie off a loop around a rival's thread and it is snipped too, with the same bounty.
  • Fray: running into a pillar, the frame or your own thread snips you. Two shuttles entering one cell, or swapping cells, both get snipped.
Threading the loom…
Amber runs over Cyan's loose thread: Cyan is snipped back to its spawn and Amber takes a quarter of its fuel.

04 · Take

Steal and unpick

A tie-off also claims rival cloth inside the loop:

  • Single-woven rival cloth is stolen outright.
  • Double-woven rival cloth is unpicked to single-woven but stays theirs. A second loop steals it.
Threading the loom…
Cyan loops around Amber's cloth: the single-woven rows are stolen, the double-woven rows are only thinned.

05 · Defend

Double weave

When you tie off, your own single-woven cloth inside the loop's bounding box becomes double-woven: thicker, brighter satin that one rival loop can only thin, never take.

Threading the loom…
Cyan ties off around its own cloth; every single-woven cell inside the loop's box turns to bright satin.

06 · Think

Fuel and spools

240MDuel tank for the whole match (320M in a brawl)
16MMost one move may spend
+24MFrom each glowing spool (+32M in a brawl)
25%Of a victim's fuel per snip

Your bot runs once per tick, and every step of thinking costs exact Sley VM fuel: the same count on every machine. If a move runs out of fuel or crashes, the shuttle goes straight. With an empty tank the shuttle is dry: it is never asked again and flies straight until it finds a spool or hits something.

Spools appear every 40 ticks, mirrored like everything else. Pick one up by moving onto it.

07 · Embroider

Motifs

Each map has two stencils stitched in gold: one from the season's theme and one wildcard, each mirrored for every seat. Own every cell of a stencil when the match ends, single or double weave, and it lights up in your colour for a bonus of 2 × its size.

Season 1 theme: Squares

Solid 3×39 cells · +18
Ring 5×516 cells · +32
Ring 4×412 cells · +24

Wildcards

Plus9 cells · +18
Diamond13 cells · +26
Stripe7 cells · +14
L7 cells · +14
T7 cells · +14
Zigzag8 cells · +16
Checker8 cells · +16
Knot16 cells · +32

08 · Win

Scoring

score = cells owned + complete motif bonuses

The highest score when the last tick ends wins. Equal top scores are a draw. A shuttle that loses all its cloth is snipped and re-takes a 3 × 3 patch at its spawn.

09 · Code

Your bot

A bot is one Sley function, written in Sley's Python dialect. It sees the whole board every tick and returns a direction:

def act(board: list[int], info: list[int], notes: list[int]) -> int:
    # board: W×H cells, info: sizes, tick, every shuttle; notes: 8 numbers you keep
    return 1  # 0 up, 1 right, 2 down, 3 left
Board cell bits
board[y × W + x]Meaning
c & 7cloth owner: 0 none, 1 you, 2–4 rivals
(c >> 3) & 1double-woven
(c >> 4) & 7loose thread owner
(c >> 7) & 1pillar
(c >> 8) & 1spool
(c >> 9) & 31motif id
(c >> 14) & 7shuttle standing here
Info and return value
WhereWhat
info[0..7]W, H, tick, last tick, seats, tank, spool fuel, motif count
info[8 + 8k ..]shuttle k (you first): x, y, dir, fuel, stun, score, cloth, thread
notesyour 8-number notebook, kept between ticks
returnmove + 4 × slot + 64 × value: write value to notes[slot − 1]

Seats are relative: you are always 1. The agent guide covers the Sley dialect, fuel costs and strategy. Ready? Pick your bot and play.