Sample. These runs are local games from the development machine (build v0.111.0), shown because this copy of the page can't reach the stream's run store. On chatplaysgames.com this list shows the stream's own runs.
—
Timeline
Look up
Every card, relic, potion, power and mechanic in Slay the Spire 2, with the text the bot answers with when chat types !what and a name.
What this is
Twitch chat plays Slay the Spire 2, one run at a time. Every choice between fights is a chat vote: which character climbs, the route on the map, events and Ancients, card rewards, shops, rest sites, and which cards to upgrade, remove or transform.
The fights themselves are played by an autopilot: a search engine that simulates each fight thousands of times before every move (see The player). Chat sets the strategy, the autopilot carries it out.
When nobody votes, a simple agent picks instead and says why in chat, so the run keeps moving when chat is quiet. When a run ends, the game returns to the menu and chat votes on the next character. By default a run uses the highest ascension unlocked for that character.
How to vote
When a choice comes up, the bot posts one line in chat and a panel appears on stream, with a number next to each option, and the same number drawn on the thing itself in the game (the card, the map room, the event button). Type the number. Any of these count, as a message on its own:
2!vote 2!v 2#2- One vote each. Vote again to change it; your last vote counts.
- 0 is the way out when there is one: skip, leave, or back. It is always listed last.
- Greyed options are offered but out of reach, like a shop item you can't afford.
- Most votes wins. A tie is broken at random among the tied options, and the result line says so.
- No votes: the agent picks. Its reason is in the result line.
- The streamer can click an option on the panel to decide it, and can pause the controller with F7.
- Look things up any time with
!whatand a name: a card (add + for its upgrade), relic, potion, power or mechanic, like!what Bash+or!what Exhaust. The bot answers with the game's own text.!card,!relic,!potion,!powerand!mechanicsearch just one kind.!decklists the run's current deck.
A vote line looks like this (format shown with example values):
bot 🗺 MAP — floor 8, 62/80 HP. 1 left: Enemy, then Elite or ? · 2 right: Rest, then Merchant | Type a number, 20 seconds. bot Result: Rest, right (4 votes)
Every chat screen
What each screen offers, how long the vote lasts, what 0 does, and what the agent picks when nobody votes. Chat lines are shown in their real format with example values.
🧙New run: pick a character30 s
Opens at the main menu after a run ends. One option per unlocked character; the game's character preview follows whoever is leading. No way out.
- No votes
- A random character.
- Then
- The run starts at that character's highest unlocked ascension (unless the streamer set one), with a fresh random seed.
bot 🧙 NEW RUN — pick a character. 1 The Ironclad · 2 The Silent · 3 The Defect · 4 The Regent · 5 The Necrobinder | Type a number, 30 seconds.
🗺Map: which way?20 s
One option per room you can walk to, named by type (Enemy, Elite, ?, Rest, Merchant, Treasure) and side (left, middle, right), with what comes after it. When there is only one path, the bot just takes it.
Winged Boots: while they have charges, rooms off your paths are offered too, marked ✈. Picking one spends a charge.
- No votes
- Scores each path a few rooms ahead: fights and treasure are good, elites only when healthy (above 75% HP), rest sites when hurt, a merchant with 150+ gold; a flight costs a little. Some randomness keeps routes varied.
bot 🗺 MAP — floor 8, 62/80 HP. 1 left: Enemy, then Elite or ? · 2 middle: ?, then Rest · 3 right: Elite, then Treasure | Type a number, 20 seconds.
❓Events20 s
One option per button the event offers, with the game's own wording and its effect. Options the game has locked (like the Endless Conveyor's "Broke" once the gold runs out) aren't offered. An event with only one option left (Proceed, Leave) is taken without a vote.
- No votes
- Reads the options: relics, upgrades and removals score well; curses and max-HP loss score badly; losing HP is avoided when below half health.
- Repeats
- While a chosen option's outcome plays out (The Architect's hits at the end of a run), the vote waits instead of choosing it again.
bot ❓ SELF-HELP BOOK — 52/54 HP. 1 Read the Back (…) · 2 … | Type a number, 20 seconds.
🗿Ancients (Neow, Darv, …)25 s
An Ancient talks before it offers its gifts. The bot clicks through the dialogue one line every 3 seconds so viewers can read it, then opens the vote once the gifts are offered. Options are the Ancient's relics or boons with their descriptions.
- No votes
- The same option reading as events, with random tie-breaks so starting relics vary.
🃏Card reward20 s
After a fight: one option per card, left to right as on screen, with rarity and type. 0 skips. Some rewards also offer Sacrifice.
- No votes
- Rares first, then uncommons; attacks get a bonus in act 1, powers and upgraded cards a small one, and a second copy is worth less. It skips when nothing is worth it, and is pickier once the deck has 25 cards.
bot 🃏 CARD REWARD — The Ironclad, 14 cards in the deck. 1 Inflame (uncommon power) · 2 Pommel Strike (common attack) · 3 Shrug It Off (common skill) · 0 skip | Type a number, 20 seconds.
🎴Thieving Hopper: get your card back15 s
Killing a Thieving Hopper returns the card it stole as a special reward. The vote names the card, upgrades included: take it back (1) or leave it (0). A card-removal reward works the same way.
- No votes
- Takes it.
bot 🎴 STOLEN CARD — take Bash+ back? 1 take Bash+ · 0 leave it | Type a number, 15 seconds.
🔥Rest site15 s
The site's options as the game lists them (Rest, Smith, and any a relic adds). If only one is possible, it is taken without a vote. Smith leads to a card vote (below).
- No votes
- Rests below 50% HP, or below 80% when the boss is next; otherwise smiths.
🛒Shop20 s, repeats
Everything on sale, with card removal first (always number 1 while it's offered), then Cards, Relics and Potions, with the price in its own column. Unaffordable items are greyed. The vote runs again after every purchase, until 0 (leave) wins.
- No votes
- Buys one thing per vote, at most three per shop: a card removal while the deck still has starter cards or curses, then a relic, a strong card, or a potion for an empty slot; otherwise leaves.
bot 🛒 SHOP — 212 gold. Services: 1 Remove a card 75g · Cards: 2 Flechettes 74g · 3 … · Relics: 9 Anchor 201g · … · 0 leave | Type a number, 20 seconds.
🎭Fake merchant20 s, repeatsspecial
An event dressed as a shop that sells counterfeit relics. Chat votes like a shop: one option per relic still on the shelf with its price, repeating after each buy; 0 leaves and opens the map.
The Foul Potion. If a Foul Potion is on the belt, there is an extra option: throw it at the merchant. That starts a fight; win it and you get the Fake Merchant's Rug plus every relic still on the shelf.
- No votes
- Throws the potion when at 60% HP or more ("healthy: fight for its relics"); otherwise leaves ("counterfeit wares").
bot 🎭 FAKE MERCHANT — 180 gold. Relics: 1 … 95g · 2 … 120g · Fight: 3 throw the Foul Potion (a fight; winning takes the Rug and 3 relics) · 0 leave | Type a number, 20 seconds.
⚒Pick from the deck: upgrade, remove, transform, enchant20 s
Whenever the game asks for a card from your deck (Smith, a card removal, a transform, an enchant), the vote's title is the game's own prompt. One option per distinct card: copies share one number, drawn on the first copy. 0 goes back when the screen allows it.
Several cards at once (Tri-Boomerang enchants 3): one vote per card, "card 1 of 3", "card 2 of 3"… Cards already picked drop out. When the screen allows "up to N", a Done option appears once enough are picked. The bot confirms the game's preview afterwards.
- No votes
- Removing or transforming: curses first, then basic Strikes, basic Defends, then the weakest card. Upgrading or enchanting: the best non-starter card.
bot ⚒ CHOOSE A CARD TO UPGRADE. 1 Strike · 2 Defend · 3 Bash · … · 0 back | Type a number, 20 seconds.
🃏Choose a card20 s
Screens that show a few cards to pick one from (outside fights). One option per card with rarity and type; 0 skips when skipping is allowed.
- No votes
- The same card rating as card rewards.
🔮Crystal Sphere (the divining event)15 s per lookspecial
An 11×11 fogged grid with rewards hidden under the fog (gold, potions, a relic, a card reward, possibly a curse), and a few divinations, each clearing a 3×3 patch. A reward is collected once all of its cells are clear.
The game has no click commands for this grid, so the bot plays it: one vote per divination on an area of the grid, laid out like a keypad.
Each option says how many fogged cells it would clear and whether it "finishes a find". The bot then clicks the cell in the chosen area that clears the most fog, counting fog over a partly uncovered reward double. Numbering skips areas that are already clear, so check the panel. When the divinations run out, the loot is collected and the run moves on.
- No votes
- The area that uncovers the most.
bot 🔮 CRYSTAL SPHERE — 3 divinations left, where to look? 1 top-left · 2 top · 3 top-right · 4 left · 5 middle · … | Type a number, 15 seconds.
⚙No vote: what the bot does by itself
- Fights: the autopilot plays every turn, including choices inside a fight (pick a card to exhaust or discard).
- Loot after a fight: gold, relics and the card reward screen are taken; a potion only when there is a free slot.
- Treasure chests: opened and the relic taken.
- Single options: one path on the map, one event button, a rest site where only resting is possible.
- Confirmations and Proceed buttons.
⚠When something goes wrong
- Stuck for 60 seconds: the bot says so in chat and tries to move the run on, trying in turn: proceed from a finished event, close a screen left over the map, open the map.
- 15 seconds on a screen with nothing to vote on: it takes the obvious way on (proceed, or a map move).
- The same vote comes back three times (the winning choice didn't take): the agent's pick is used to move on.
- The screen changed during the vote: the winner is only played if it is still offered; otherwise a new vote opens.
Fights
Chat does not vote inside fights. A fight has dozens of small decisions, and a 20-second vote on each one would make a single fight last an hour. The autopilot plays them instead, at about a third of a second per decision. The player explains how.
Vote windows
| Screen | Window |
|---|---|
| Character | 30 s |
| Ancient | 25 s |
| Map, event, card reward, deck pick, choose a card, shop, fake merchant | 20 s |
| Rest site, stolen card, Crystal Sphere | 15 s |
Who plays the fights
Fights are played by sts-sim, a fast reimplementation of Slay the Spire 2's combat rules in C++. It is tested by fuzzing against the game's own code running headless, and the autopilot checks every step against the real game while it plays. Each move takes three steps:
Read the fight
The game mod snapshots the live fight: hand, piles, energy, every enemy's HP, powers and next move, and the random number generators.
Imagine 3,000 futures
A Monte Carlo tree search plays the fight forward about 3,000 times from here, shuffling the unseen draw pile differently each time, and tries the promising moves most.
Play the best move
The move whose futures win most, keeping the most HP and potions for the rest of the run, is played in the game. Then it starts again.
Autopilot record every fight finished on the development machine
Search settings
- Simulations
- 3,000 per decision (boss fights too)
- Rollouts
- Guided by a hand-written play policy on 40% of moves
- Horizon
- Up to 100 turns, so most futures play to the end of the fight
- Soft lethal
- Prefers lines that kill within 2 turns
- Block first
- Before ending a turn with energy left, checks whether a play keeps HP through the enemy's turn
- Value
- The chance to win the fight, weighted by the HP and potions left at the end: a win at full HP beats a win at 5 HP
How changes are tested
A change to the search must beat the current version on the same positions with the same random draws. The test set is 37 recorded fight positions, replayed thousands of times on two machines.
The last adopted change, block first, won the same number of fights (1,569 of 1,744), kept 0.20 more HP per fight on average (95% interval +0.12 to +0.28), and helped on 11 positions while hurting on 2.
Runs by character local runs, build v0.111.0
At least 4 floors, not abandoned. In these runs the autopilot played the fights and a person made the other choices.