archive by month
Skip to content

Steamhammer-adias long game

Steamhammer’s average game is kind of so-so, but its best games are good. Today it played an exciting macro game Steamhammer-adias on Jade. The game showed the strengths of Steamhammer’s queen play and burrowed zerglings, though adias shut the defilers down hard.

For background, Steamhammer’s 30 day record versus adias on BASIL is 17-10, so it wins more than it loses. But nearly all of its wins are with its cheesy hydra rush opening, in games like this one on Benzene: adias survives the rush, but it doesn’t know how to react and its build order breaks down so that it gets outmacroed and run over. Steamhammer is exploiting a bug.

The Jade game is different. Steamhammer opened with one of its anti-factory openings, the one that follows up with hydralisks. Adias set up to do its usual early game 2-vulture runby, but for some reason one of the vultures stayed behind and only 1 made it into the zerg main. It killed 2 drones before hydralisks nabbed it, not enough to set Steamhammer back severely.

vulture is about to die

A little later, after neatly clearing the spider mines in front of its base, Steamhammer went to attack with the hydras. Adias was in no danger, but it did lose a few goliaths unnecessarily due to clumsy maneuvering. That may have been why terran chose to take a third base, rather than build up and attack on 2 bases.

The picture shows terran trying to take its third base. The blood on the ground is from Steamhammer’s burrowed zergling. The zergling successfully delayed the expansion, but not for long because adias knew what to do: It brought tanks and scanned. Steamhammer also reacted correctly. In the minimap, the small orange splotch near the terran natural is a hydralisk attack which drew the goliaths out of position. Mutalisks went to the terran third and delayed it further. There are only 6 mutas, but they killed those 3 tanks and a number of followup terran units and delayed the third for longer than they should have. I think this was the key battle that set adias back far enough that Steamhammer could play a long game.

mutalisks begin to wreak havoc

Adias did finally bring enough units to take its third safely. Terran with 3 bases is very strong, but Steamhammer now has 6 bases and is ahead in workers. By keeping terran busy with a handful of units, zerg was able to drone heavily.

The picture shows Steamhammer’s queen parasiting the first science vessel. The little orange dot halfway between them is the parasite projectile. Terran did not have irradiate yet. The queen kept busy parasiting vessels for the rest of the game. Adias did not react to the parasites, which handed Steamhammer another crucial advantage: Zerg maintained vision of the terran main army via the parasites, and almost always knew its location, size, and composition.

parasite!

Adias is no pushover and it has its own strengths. Here a vulture raid has cleared the drones from one of Steamhammer’s bases. Steamhammer went from well ahead to about even in workers. Adias pulled these raids repeatedly. But unlike terran, a zerg with a strong economy can replace lost drones in short order. The raids did ensure that terran could firmly secure its third.

vulture raid with spider mines

OK, now terran has irradiate. Steamhammer has code to separate an irradiated mutalisk, and it worked when I wrote it, but bits decayed and now it does not work. It’s a devastating weakness. 6 mutalisks and a few scourge died to this one irradiate, and the surviving muta had a sliver of health.

But irradiate a hydra and it burrows to spare its comrades. This came up later in the game.

deadly irradiate

Here is terran’s big attack, the intended killing blow. The armies of both sides are disorganized. Steamhammer has just cleaned up another vulture raid at lower right (by the time the vultures were dead it had already restored its drone count) and is rushing back, while adias (perhaps hurrying to take advantage while zerg is out of position) has allowed its units to stretch into a narrow column. The line of tanks and goliaths continues north of this wide picture.

deadly irradiate

Well, zerg is more mobile. Steamhammer got its forces together before adias could sort its units into a ball, and rolled up the terran column with hydra-ultra. The picture shows adias dropping Steamhammer’s natural while this happens. Shortly after this, vultures raided the 4 o’clock base too. The terran army has been forced back, but the worker count went into terran’s favor, and adias still has 2 bases mining.

The scourge on the tail of the dropship did finally catch it after it reached the terran main. Almost safe! I think Steamhammer’s scourge control has a bug that causes it to chase some enemies too slowly.

deadly vulture drop

Oops, the terran army retreated to the natural, not to the third base. A small flight of 7 mutalisks, after erasing the dropped units, arrowed to the undefended third base and started to erase it too. Well, after defending adias still had enough SCVs, partly because its natural was running low, but Steamhammer had replaced its drone losses and was pulling ahead. Steamhammer suddenly switched to mutalisks as its primary unit, and was able to produce them faster than adias could produce goliaths to defend. In the picture terran and zerg are equal in supply, but adias could not hold against the mutas. Terran had the wrong unit mix.

too many mutalisks

The mutalisks depopulated the terran third, and then there was nothing adias could do. Another devastating irradiate finally forced the mutalisks back (most of the survivors were barely alive), but by then adias had only 14 SCVs and a smaller army size. Steamhammer soon maxed and ultraling finished it. For the cherry on top, the queen infested the main command center.

From Steamhammer’s point of view, the game was all about information. Even though adias knew how to counter it, the burrowed zergling saw what was happening before it died and made it possible for Steamhammer to delay the terran third. Then the queen’s parasites ensured that Steamhammer always knew the terran unit mix. Steamhammer used the information to make sudden switches in its own unit mix to take advantage of temporary opportunities.

This was a great game to show off the weaknesses of both sides. Adias repeatedly ran into trouble because it could not keep its units in good formation. Steamhammer needed to frequently replace dead drones, and suffered in the air from irradiate.

In the next game, on Circuit Breaker, Steamhammer repeated the opening, but the game went differently. Adias did its 2-vulture runby before Steamhammer was ready, killed a bunch of drones, and pulled far ahead to win easily. I made a version of an anti-factory opening timed to stop the 2 vultures, but this was not it.

new bot adias

Adias is a new terran bot, and starting off strongly. The first thing I noticed about it is that its name is SAIDA spelled backward. Does that mean it is like SAIDA, or the opposite of SAIDA? The second thing I noticed, after unpacking the binary from SSCAIT, is a machine learning folder with files caffe2.dll, torch.dll, and a couple of learned models with the .pt suffix. It is the signature of a project using PyTorch for deep learning. It’s not TorchCraft, so not directly related to CherryPi. It also does not seem to be based on SAIDA_RL; strings I checked from SAIDA_RL do not appear in adias.

The third thing I noticed, peering into the .exe, is that it looks to be derived from SAIDA. It’s clear that the two share a lot of code, at least. That’s surprising; based on SAIDA and using RL but not based on SAIDA_RL? Close similarities to SAIDA are visible in the game play. For example, adias shares SAIDA’s way of grouping supply depots and tech buildings together, and SAIDA’s predilection for walls composed of barracks plus engineering bay. Both habits appear in the game adias-Tomas Cere on Benzene. There are a lot more similarities; the building placement and opening build orders look identical to me, and adias shares the skill to set up tank lines where the opponent will be compelled to engage at a disadvantage.

The combination of traits reminds me of something else: Stormbreaker, the bot which was disqualified from AIIDE 2019 for being SAIDA with cosmetic changes and a neural network whose result was not used. Is adias only Stormbreaker under a different name?

Well, I don’t know, but I’m guessing not. Though SAIDA and adias look more similar than not, I went back and watched old SAIDA games and I think I see differences too. The difference most salient to me is that adias likes to send an SCV to scout around inside and near its base early in the game, seeming to check for proxies. The only other bot I’ve seen with that style of anti-proxy scouting is tscmoo. Did tscmoo have a hand in adias?

I expect we’ll learn more as we get to see more games. Krasi0 was eventually updated to defeat SAIDA. Will Krasi0 quickly learn to beat adias too, or will Krasi0 have to be updated again to keep up?

SAIDA updated?

Oh look, SAIDA is updated! And the update is... that it is disabled on SSCAIT. It has an update on BASIL too, but it is still active there.

A confusing development. Will the disabling propagate to BASIL later? Will SAIDA now play on BASIL exclusively? Is it so they can keep their binary to themselves while they prepare for tournaments? I can only speculate. I found no new information on the github page. There is a March issue Expect the next SAIDA update to bring something more interesting, though I imagine it’s just some random user expressing a wish.

I'm a random user with a wish, too. I hope we get a new and improved SAIDA version in AIIDE. If so, with their resources and skill they may overwhelm all opponents again. So far, the updated version on BASIL does have a loss against Krasi0, but wins against 12 other opponents.

beating SAIDA

As I write, SAIDA has fallen to #4 on SSCAIT; more and more opponents are finding the limits of SAIDA’s build adaptation. It seems that the secret to defeating SAIDA is to find a timing that SAIDA is not ready for. Apparently it matters less what units you make, and more whether SAIDA knows how to adapt its build to counter the timing you intend to hit—whether early or late.

Krasi0 in December was the first terran to find a reliable plan, a tank push timed before SAIDA was ready. Another idea to try would be the scary fast 8-8-10 vulture rush with a proxy factory, which I think ought to get a vulture into SAIDA’s base at around the same time that SAIDA’s own factory finishes. So far I haven’t seen any terran bot build a proxy factory.

Top protoss bots found holes in time to beat SAIDA in the SSCAIT annual tournament. Locutus denied scouting and sent dark templar from proxy gates, while PurpleWave alternated between arbiter rush and carrier rush, both successful. The variety of plans makes me wonder how many other plans would work!

Now zergs have started to catch up. Tscmoo zerg and Velicorandom zerg have beaten SAIDA with different early hydralisk rushes, and today Microwave beat SAIDA with 3 hatches before pool into hydralisks, a late timing. SAIDA did its vulture runby and killed a bunch of drones because Microwave had only drones to defend, but did not recognize its golden opportunity for a bunker rush—I guess it only does that against protoss nexus first. So Microwave overran it with too many hydras. Has anybody repurposed a ZvZ 1-base mutalisk build? I haven’t, but I suspect it might work too.

The SAIDA team’s stated goal is “to develop the first starcraft AI which can defeat a professional human starcraft player so as to improve our AI technology.” They haven’t succeeded yet, so I have to assume that they are still working. (Here is a game Best offracing as zerg versus SAIDA that shows they have far to go.) I am guessing that SAIDA’s next appearance will be in AIIDE 2019, and that they will have a deep learning plan recognizer or plan adapter whose holes will be smaller and much harder to exploit. I’m sure they will be collecting the opponents that beat them as test victims. Hmm, defeat SAIDA now or save up your secret weapons in hope that they will still work in AIIDE?

SAIDA again under threat

Another brief note: On SSCAIT, SAIDA is again threatening to topple from its #1 position. I expect it would hold #1 easily if there were no voting, but voters distort the pairings, and its top opposition has been chipping away at its dominance. SAIDA’s win rate has fallen to about 3/4, from a high over 9/10. Will SAIDA get another update soon and recover?

Killerbot-SAIDA games

I see that Killerbot by Marian Devecka has figured out its own way to beat SAIDA with its persistent mutalisk pressure: win 1 and win 2. I’m not sure how consistent it is, but as soon as SAIDA starts taking serious economic damage, terran only goes downhill. The update is a few days old now, and the most visible change is that Killerbot makes a few unupgraded hydralisks early, presumably only when the enemy has or is expected to get vultures. The hydras counter any early vulture or wraith tricks that terran might try. The idea is well known among human players, and Steamhammer uses it too.

I was looking at Steamhammer’s 2 hatch muta loss to SAIDA today, and thinking “With good muta micro and good decisions, zerg should win this.” I’ve been promising good muta micro for 2 years and haven’t delivered....

Update: Apparently SAIDA reacted by becoming more aggressive. It seems to have found an attack timing that works against Killerbot. Is this the same mechanism that solves rushes by adjusting timings, or a different kind of reaction? If it’s the same, the mechanism is quite general.

various short items

SAIDA

SAIDA has been updated and is again defeating Krasi0 and Locutus. The arms race continues!

CIG 2018

I started poking at the detailed results file to figure out how to reproduce the official results exactly... then I discovered that the build order problem was wider than it first seemed. I canceled my plans. We don’t need per-map crosstables and race balance analysis of a tournament with such badly distorted results.

Steamhammer 2.1

I haven’t been working that hard on it, but I have made progress. I fixed some of the bugs introduced along with squad clustering, and found the causes of others. 2.1 should have smoother play in many cases. To say the same thing differently, Steamhammer 2.1 is suffering from feature creep, or at least bug fix creep. Hang on, it shouldn’t take too much longer.

SAIDA’s learning and SAIDA’s weaknesses

SAIDA is holding its position as #1 on SSCAIT, but it is under constant attack from other bots and loses some games. On the one hand, SAIDA has weaknesses against early harassment and timing attacks, especially if the opponent denies scouting. On the other hand, SAIDA appears to have a learning mechanism that recognizes rush timing and figures out a defense. The SAIDA page describes it as “He also catches perfect rush timing by using information he collected.” That’s a vague description, but the behavior does appear to involve learning from experience. MicroDK noted that SAIDA writes data only after it loses; this must be why. For example, BananaBrain tried a dark templar rush and won a series of games, but finally the learning kicked in and SAIDA figured out how to get turrets in time to stop it (SAIDA’s code was not updated). Since then, BananaBrain has mostly lost games, defeating SAIDA only once, in this game where the turret was seconds late.

Other examples include PurpleSpirit winning one game with BBS then being unable to win with it again, and Krasi0 winning with its fast barracks marine cheese with similar results.

In the latest attacks, Locutus won with center gates, making only 2 zealots before switching into dragoons, and Krasi0 added a bunker to its marine cheese to overcome SAIDA’s vulture counter to the marines (SAIDA crashed this game). Will SAIDA learn to defeat these tricks too? I don’t know, let’s find out!

How powerful is this learning mechanism? Surely there must be attacks that it cannot figure out how to forestall—or can’t figure out in reasonable time. If you find 2 winning tricks and switch between them, can it learn to defend against both? If you DT rush once so that it learns to get early turrets, does it get early turrets for the rest of time after you switch back to regular play? The unnecessary turrets give you a small advantage, and at a high level of play, small advantages are big.

Here are some of the weaknesses I see in SAIDA’s play.

  • Poor defense against unscouted early attacks, mitigated by the learning mechanism. SAIDA loses more SCVs than it should.
  • SAIDA recovers poorly from economic setbacks. It does not replenish lost SCVs as well as it should, and stops expanding after a while. If you gain an early lead, you can win by holding on and waiting for SAIDA to mine out.
  • SAIDA is vulnerable to mine drags. It sees no danger in having its spider mines and its forces next to each other. It will even place mines in its mineral line, begging you to blow up its SCVs.
  • SAIDA does not know how to build in safe locations. On some maps, like Moon Glaive, parts of the main base are easily sieged from outside. Krasi0 has won games by blasting down factories that are in range, and SAIDA keeps trying to rebuild in places that are also in range.
  • SAIDA is consistent and predictable. It varies to counter the opponent, but at heart always plays the same strategy and the same tactics. The dropships always fly along the edge.

SAIDA also has great strengths. The greatest may be the big red animated arrow that points out the main attack position. As long as SAIDA has a monopoly on big animated arrows, I think it will remain #1.

many ways to defend against SAIDA’s drops in TvT

SAIDA introduces new drop skills in TvT. Bots have not faced drops like this before, and are not adept at defending. SAIDA likes to drop tanks and goliaths with several ships, at the edge of the map, using your mineral line or your buildings for cover. The drops are able to destroy a base if the defender is weak or disorganized.

There are a lot of defensive possibilities; I’ll list some. Make SAIDA pay for those drops!

active defense

• Drop prediction. If you spot moving dropships, you may be able to guess where they are going. You can try to divert wraiths or goliaths to intercept the path, or send defenders to the predicted drop zone.

• Wraiths. Seek out those dropships and make them hurt. If they’re loaded, you can force them to unload prematurely. If the drop already happened, shoot down as many as you can. Even if the dropships escape to friendly territory, you have caused delays and gained time.

• Counter drops. Drop your own units directly on top of the enemy units. SAIDA’s tanks will have to unsiege, and (if you have coordination skills) you can take the opportunity to move in with other units. A good counter drop can turn the enemy drop from a benefit into a cost.

• If all else fails, maneuver tanks to pin down and destroy the dropped units. Don’t let them stay alive and kill more of your stuff. So far, Tscmoo has done the best job of this.

exploit predictability

Bots tend to have stereotyped play. SAIDA likes to fly along the edge of the map and drop on the edge where its units cannot be surrounded. An opponent could record the events, notice the obvious pattern, and prepare special defenses. Or at least: Once you’ve seen dropships, set up some turrets to see them coming and restrict their movement. By the time big drops can happen, terran commonly has excess minerals and can afford to throw up a bunch of turrets even if they aren’t efficiently placed.

• Place turrets along the edge where SAIDA may approach. (This is more common in TvP as defense against arbiter recall.) If you have high confidence, you could even detail goliaths to lie in ambush. If SAIDA doesn’t know about the turrets, it will have to fly into range and take damage before it can evade. At worst, you will have seen the drop and can try to predict where it will go next.

• Lay spider mines in potential drop zones, such as behind your mineral line. I don’t know whether SAIDA will drop on the mines and blow up, or scan the mines and drop elsewhere, but it’s to your advantage either way. Laying mines near your mineral line is not as clever against protoss or zerg drops, because protoss and zerg can more easily drag the mines into your workers. Terran doesn’t have a good unit to drag mines with.

stay alive

• Lift the command center and run SCVs. There’s a good chance you can keep the CC alive and quickly restore the base to operation once the drop is cleared. Lifting the command center is a basic terran skill; I find it surprising that Krasi0 doesn’t have it yet.

new bot SAIDA

I think we have a new champion.

New terran SAIDA has been playing extremely impressive games on SSCAIT, scoring 10-0 as I write. In games so far, it breaks down both Krasi0 and Locutus with a strategy like this: Stay home on 2 bases and build up a strong tank force, move out and establish a contain as close to the enemy natural as possible, use the space this gives to reduce other enemy bases around the map with vulture raids, small tank attacks, and drops with multiple dropships (a unique skill for terran bots). Based on its debug drawing, it seems to have a sophisticated understanding of what its enemy is doing, and from the way it varies its play against different opponents, it makes use of that understanding. It scouts carefully. It can place tanks on high ground appropriately. Its drop positioning is strong. When rushed, it places a bunker in a strong rear position and pops marines in and out at the right times. When PurpleWave tried forward 2 gates, SAIDA scouted it and correctly focussed down the pylon first, then took its vultures away from the gates to hit the protoss main, perfectly done. The bot has a lot of powerful and rare skills.

SAIDA appears to play with primarily factory units against all races. If so, it may be vulnerable against the strongest zergs. Or maybe not, we haven’t seen the games yet! Looking into the binary, I see that SAIDA knows names for a wide variety of strategies by all races. If it also knows counters for those strategies–which I think we can expect—then it is prepared for anything it is likely to see. For example, here are the names it knows for zerg:

opening“main” (current) strategy
Zerg_4_DroneZerg_main_zergling
Zerg_5_DroneZerg_main_maybe_mutal
Zerg_9_DroneZerg_main_hydra
Zerg_9_HatZerg_main_lurker
Zerg_9_OverPoolZerg_main_mutal
Zerg_9_BalupZerg_main_fast_mutal
Zerg_12_PoolZerg_main_hydra_mutal
Zerg_12_HatZerg_main_queen_hydra
Zerg_12_Ap
Zerg_sunken_rush
Zerg_4_Drone_Real

I’m not sure what all of the names mean, but most are obvious. Steamhammer, with its huge opening repertoire, knows openings which are technically not on this list. But for practical purposes, I expect this should cover everything before hive tech.

I can see flaws in SAIDA’s play: It makes too many turrets, its tank positioning versus protoss is too compact and vulnerable, it makes micro errors. But the flaws are not easy for other bots to exploit.

This bot must be the product of long development. The rest of us have work to do!