archive by month
Skip to content

CherryPi - Stardust game

As you might guess from the CoG results, Stardust has gained strong new skills since last year. Against zerg in particular, one skill is that it uses corsairs heavily. Another is that it learned the forge expand opening. And yet it can still be defeated.

CherryPi is from 2017, but it shows how. The SSCAIT game Stardust v CherryPi is instructive (I kept the replay for when SSCAIT recycles it).

The recipe is:

1. Facing forge expand, play a greedy opening. CherryPi opened pool first (with a rare 13 pool) so that it could make zerglings if it needed to, but cannons were not going to walk across the map to attack, so it followed up with drones and hatcheries.

2. Fight efficiently in the middle game. CherryPi could not take any one-sided victories against such a tough opponent, but it traded well and cut the protoss army down to a safe size, where zerg could spawn enough defensive units in the time the protoss would take to cross the map.

3. With that breathing room, zerg could safely pull ahead in workers. Then it was just mass and smash.

See how easy it is? It’s a simple matter of being good at everything!

Of course it was only possible because Stardust showed weaknesses. One is that it was cautious and clumsy with its corsairs, and put on less counter-air pressure than it could have. First it kept them with the army, then it flew them over hydras.

BananaBrain-Steamhammer game

To fill the dead air while I try to fix the absurdly undiagnosable comment bug, here’s a game I was pleased with.

Steamhammer - BananaBrain on Python was played not long ago. (Here’s the replay.) BananaBrain held the initiative for most of the game, and broke into the zerg natural at one point, but never destroyed a completed zerg base. The game has plague, parasite, and broodling.

Steamhammer’s favorite strategy is to overrun you in the late game. Even strong opponents lose if they let the strategy play out.

SSCAIT PurpleWave-Steamhammer game

Another interesting game was PurpleWave v Steamhammer.

PurpleWave opened with two gates on one base but noticed a lot of zerglings. It cautiously added cannons at its ramp before moving out to pressure. It was an overstep: The ramp with zealots was unassailable, but as it happened Steamhammer defeated the zealots in the field and then the cannons over the ramp in detail, before being chased out by new zealots. On the next moveout, zerglings again broke into the base, killed the new cannon, and did away with many probes. Zerg evened the worker count but could not quite pull a win. Stamhammer switched to droning up, and it was the start of a long fight. PurpleWave spent a lot of gas replacing observers.

A couple cannons are little defense if unsupported, and take away from the zealot count. The bigger issue is, how do you know when it’s safe to move out? The scouting probe was long dead, and sending a new probe does not necessarily reveal the zergling count. Speedlings could easily catch it before it gets far. For zerg, the eternal issue is the economy/army tradeoff. If Steamhammer had kept up zergling production, it would likely have won quickly because of the overconfident protoss play. But if PurpleWave held the ramp instead, zerg would have fallen behind and had no chance. Steamhammer is weak at managing the tradeoff in the middle game.

Starcraft. It’s a hard game.

SSCAIT game Stardust-Dragon

Today’s tournament game Stardust v Dragon was fun and instructive. Dragon used vulture mines aggressively, and shifted gradually from all vultures to all tanks. The effectiveness of a small number of tanks with a large number of vultures is worth understanding, but don’t overlook that the terran army was larger. It’s interesting to compare the changing worker counts throughout the game.

2 tanks and vultures hold off dragoons

Steamhammer-Stardust game

In this game, Steamhammer hit on a surprising plan that exploited a weakness in Stardust. Even so, Stardust had tricks up its sleeve.

A zerg hatchery in Stardust’s natural, mining away with no defense.

It is strategically correct for the stronger bot to play conservatively, taking no risks. Steamhammer happened across an opening which Stardust answers too conservatively: It proxied in Stardust’s natural. It started the hatchery almost immediately after scouting the location of the protoss base. Correct play is for Stardust to smash the proxy before it can be defended. Stardust scouted the proxy and immediately assumed without evidence that it was contained, so it played conservatively and did not try to break out. The yellow dot in Steamhammer’s natural is the scouting probe: Stardust had all the information it needed to conclude that the proxy was indefensible, but assumed that it was too risky to attack.

The production queues tell each bot’s strategy. Stardust made a robo to escape the containment by air. Also notice the Citadel of Adun. The two cannons next to the nexus are unnecessary; zerg does not have a lair, and protoss could have scouted it but did not bother to. Steamhammer’s opening build assumes blindly that the opponent will not attack—it is a build specialized for defeating one-base protoss players who build up and attack late. Steamhammer is making drones now in preparation for sunkens at the proxy and then a large army.

Speed zealots airlifted out of the protoss base attack the zerg natural.

Both sides have attack +1 already. The citadel was for zealot speed. A shuttle can carry four zealots but only two dragoons. Stardust cleverly elevatored zealots from its main to the north of its base where they would not be seen, and ran them across the map. Steamhammer was ready anyway. Zerglings are about to hatch, and once they joined the hydras the zealots were afraid to engage and ran away. The zealots tried to retreat to the protoss main through the proxy, where sunkens and the zerg army slaughtered them.

Zerg breaks into the protoss base.

After that zerg was in charge. Steamhammer immediately invaded the protoss base, while Stardust airlifted a probe out for a distant hidden base. There was more fighting, but Steamhammer is reliable about winning when this far ahead.

On Jade with its low main, it’s important to defend above the ramp if you can. Otherwise you don’t see what’s coming and you have to fight uphill. But as far as I can see, it didn’t affect this game. Stardust scouted the proxy and did not try to defend its ramp, except for one cannon.

Update: Steamhammer played a second game against Stardust, on the map Python. It went very much the same way. I was right that Jade’s low-ground main did not matter.

Second update, 10 July: Steamhammer has since won a bunch of games that went the same way. Here’s the first game that went differently, on Andromeda. It shows both the strength and the fragility of a strong proxy position.

Steamhammer showoff games

I picked five winning games to show off Steamhammer’s fearsome might, such as it is. I’m happy with the improvements in the tournament version, and if there’s more to do, then when it’s done I can be happy about that too.

Steamhammer used to defeat Locutus only when Locutus messed up severely, such as by trapping its own dragoons in its natural so that zerg didn’t have to face the whole army. And it still can’t touch Stardust. I was surprised to see a couple games where Steamhammer beat Locutus by straight up outfighting the dragoons. See Steamhammer-Locutus on Fighting Spirit where zerg won impressively with All The Macro, and Steamhammer-Locutus on Jade where zerg was unable to keep a third base up for long, but still wrested a win. Some of the credit is due to the smarter upgrade choices versus protoss, though the burrowed zergling preventing expansion was key, and Locutus did supply block itself. Here’s a picture from the second game. It may look as though zerg has 3 bases beyond its main and natural, but 1 is already destroyed (you’re seeing burrowed drones on the minimap) and the other 2 will be.

confused combat

Steamhammer has also been taking games from Halo by Hao Pan. That’s not new, but I like the promise it shows. Some wins are with a one-base mutalisk build: Steamhammer-Hao Pan on Fighting Spirit. I was intrigued by Steamhammer-Hao Pan on Roadrunner where Halo was winning after a vulture-wraith build and putting on continual pressure, while Steamhammer struggled with awesome determination for longer than seemed possible. The new static defense code provides for stubborn defense. Instead of winning, Halo suffered some kind of production bug, fell behind on macro, and slowly lost. I suppose it is the result of Hao Pan concentrating on Fresh Meat, but Halo is still higher ranked than Steamhammer. This is why you don’t resign too early in bot versus bot!

Steamhammer-MadMixP on Medusa shows off cannon-related skills of both bots. MadMix cannoned behind the zerg minerals, a great skill which I haven’t seen from any other bot. Steamhammer could not fight so many cannons, but it showed its own rare skill: It mined only the mineral patches that were outside cannon range. It’s not a new skill, but I’m proud of it. Unfortunately the drones that were not allowed to mine dangerous minerals idled around the base “waiting for them to open up” instead of being transferred elsewhere, but one step at a time! Steamhammer knocked down the undefended protoss main, expanded there itself, and clumsily but inevitably defeated the cannons for the win.

cannons and response

I recommend making no more than about 4 cannons, then adding gateways at the proxy instead. Zealots have the power to, you know, move around and hit stuff that’s outside immediate reach. The only extra smarts the zealots need is the ability to retreat toward the cannons when outmatched and fight within cannon range.

close proxy game

Here’s a short and surprising game from SCHNAIL, Steamhammer vs leftchange (T) on Heartbreak Ridge. Terran played an unusual and sneaky proxy. Steamhammer scouted it thanks to the anti-proxy overlord, and its first reaction was almost good; it did things right except for misplacing the sunken because sunken placement is optimized for stupid bot opponents. Steamhammer countered the empty enemy main, and soon neither player was able to mine. But there was a clear winner!

Today’s ASL 12 matches had another surprising and close proxy game with much better play, Soma vs JyJ on Polypoid. It starts at about 34:00 in this round of 16 group A vod with commentary by Nyoken and Scan. (I watched it “excluding restricted content” and didn’t miss anything that I noticed.)

ZvZ lurker game

Here’s a ZvZ SCHNAIL game where the human played an unusual strategy. It was a ranked game, so maybe the human shouldn’t be playing around... but they were clearly playing around. The game is Randomhammer - jki, appearing in the replay as Anonymous AI (rolling zerg) versus jk.

Randomhammer made an unfortunate choice of build, a hidden base with each base protected by a sunken. The goal is to survive a rush and hit back. Jki (who didn’t know at first that Randomhammer was zerg) went overpool then natural ahead of the hidden base, gaining an advantage from the start. And used the advantage ingeniously.

1. Contain Randomhammer to its main base with zerglings.
2. Get a spire.
3. Make scourge and repeatedly kill overlords. Overlords don’t cost gas and are usually a poor choice of scourge target, but since Randomhammer was already behind, it kept getting supply blocked and was unable to make enough units, air or ground, to break out. It didn’t help that it fought poorly.
4. Get lurkers too! The plan costs a lot of gas.
5. Win. If an overlord approaches to detect the lurkers, scourge it.

The picture shows the lurkers breaking down the hidden base. The lair is there because Randomhammer tries to morph the lair where it won’t be seen right away. Notice the human player’s much larger army supply.

lurkers versus hatchery

In other ZvZ games, jki has played normal ZvZ strategies. The lurker plan was apparently an on-the-fly decision to have fun with Randomhammer’s poor start. Bots can’t do that... yet.

Steamhammer > Stardust

Today on BASIL, Steamhammer scored its first win over Stardust in months (no exaggeration). Steamhammer-Stardust on Destination is a zergling rush and not that interesting, other than in being a rare win.

The build is the 6 pool speed opening that I wrote up in 2018. It is a little slower than 5 pool, in exchange for getting zergling speed to make the lings more dangerous. I suspect the build may have winning chances only on 2-player maps, because Steamhammer has to drone scout on bigger maps to find the enemy, and sending 1 drone out of only 6 total gives up a lot.

Did Stardust misdiagnose the opening because it saw the gas being mined? If so, I don’t think it was critical. After zerglings broke in, the probes felt unsafe and stopped mining; that was the real mistake. I think it’s a good guess that the overreaction has been fixed in the CoG 2021 version.

curious Steamhammer plays

Steamhammer understands that plaguing an archon doesn’t do much good. An archon has 350 shield points and only 10 hit points, and plague affects hit points only. But put enough archons together, and Steamhammer may calculate that it’s worth it anyway.

6 plagued archons in battle

Steamhammer intentionally errs on the side of excess plague. Plague on 6 archons destroys at most 6 * (10 - 1) HP, only 54. It’s questionable whether that’s enough to pay for the 3 zerglings the defiler consumed (the lings have the adrenal upgrade and do damage fast, but then again, they’ll die almost instantly against mass archons so maybe they weren’t worth much). Dark swarm might have been a better choice, but I don’t mind. As I said, it’s intentional, and anyway, Steamhammer was losing this game no matter what.

In this game versus Krasi0 on BASIL, Steamhammer selected an unsafe ZvP build. Almost all ZvT builds come with a lair pretty early; the exceptions that come to mind are rushes. This was a multiple-hatch-before-pool into 6 hatch hydra build with a late lair, sensible against sufficiently slow protoss play, senseless against typical terran barracks play. Somehow Krasi0 steered right into it, starting with its thou-shalt-not-rush-me ramp bunker and continuing with goliaths. Hydras are strong against goliaths.

Both bots have a lot to learn about strategy.

funny cheese game

Steamhammer-Joon is a funny game played today on SCHNAIL. (The player’s screen name is ZI7HMI and the game time was 21-06-30 08:48:50.) Steamhammer had played this opponent once before and correctly predicted cheese, so it started with 9 pool and a sunken in its main. Joon, being a crafty human rather than a bot, crossed this plan up by bunkering the natural below the ramp. At the time of this picture, the first terran barracks had lifted because it had started to burn, and the initial zerglings that escaped before the bunker were attacking SCVs.

bunkers in the zerg natural

Zerg was mining with more workers than terran, but was contained to its base—and terran sent most of the pulled SCVs back home, putting the human ahead in economy. Steamhammer kept sacrificing drones to the bunkers as it tried to expand (it’s on my list to fix soon with safe pathfinding), and losing overlords for lack of understanding of enemy visibility. But it also got lurkers, and terran was only just adding comsats. After a sharp struggle whose outcome looked uncertain at first, zerg broke its own natural—where terran had built a command center—and forced buildings to lift.

lurkers in the zerg natural

Now terran was far ahead in economy though with hands too slow to spend it, while zerg was ahead in army. Notice that terran is adding a starport while zerg is getting a spire. The zerg force, finding no buildings on the ground and unable to attack air, hurried across the map to the terran side. Immediately, Joon landed the buildings again, so that the drone which came down to expand could not take the natural but had to continue to another base to expand. Having crossed the map, lurkers forced the terran natural into the air and continued on to pillage the main, while terran quickly trained marines in the zerg natural and easily held it, restoring the containment—but with zerg already owning a base outside it.

terran main is in trouble

In the picture you can see 2 vultures and a wraith, which proved of little value. Steamhammer scourged the wraith and a followup wraith (you can see the scourge in the production tab). At the opposite corner of the map, terran marines were supreme and Steamhammer chose a mutalisk switch, which was also of little value. The strategic situation completely reversed in a short time, with zerg ahead in economy and terran stronger in army. Steamhammer had taken the top center base, but was not mining there.

Steamhammer killed all SCVs in the terran main, left 1 lurker there to finish cleaning up, and returned the other 3 to visit the terran complex at the zerg natural. At the same time, the strong terran infantry easily broke the sunken in the zerg main, which had been waiting there since the early opening, and set about their own cleanup. Base race!

A crazy game, and a close one. Both players had opportunities to turn events in their favor at multiple points. I won’t spoil the end, though it’s predictable if you know how terran-zerg base races go. You can watch it to see.

Steamhammer 3.5.1 status

Here’s a fun SCHNAIL game, Steamhammer-HitHat (screen name Joongwan). Steamhammer had played this opponent before, so it had an idea of what to expect and made an early sunken. The sunken is misplaced. The misplacement is better against other bots than correct placement, but you’ll see in the game why I call it a misplacement! After learning by the loser, the next game went differently. Another interesting game is this one on Fighting Spirit against a different opponent.

I’m not sure why there are separate screen names and game names. The website comes with an API that gives the screen name with replay, and the replay has the game name, so no information is hidden. Still, people use the feature a lot, so it must have appeal. Are names that much fun? I’m guessing it was a feature added at the request of players. I sure wouldn’t have thought of it.

Steamhammer 3.5.1 is progressing, though slowly. Since my energy ran down, I stopped working on my plan of using Steamhammer’s new opening data. After seeing many SCHNAIL games, I’m mostly making changes to improve Steamhammer’s play against humans. Humans know a lot of tricks that bots don’t know, and they’ve uncovered weaknesses that I want to fix. Better is better, even when it may not show against bot opponents.

I rewrote Steamhammer’s crufty old code for deciding when, and in what bases, to place sunkens and spores. Unlike bots, humans are quite good at attacking vulnerable bases first. (Steamhammer makes an attempt to get this right. Most bots don’t try.) I was running the first tests, demonstrating that it worked in a couple of simple situations, when I realized that I should have generalized it for all races. Terran and protoss desperately need the skills: Make mutas and win because terran doesn’t add turrets; make DTs and win because only one base gets turrets or cannons for detection. I’m not only working slowly, I’m thinking slowly.... I rearchitected it and rewrote nearly all the code a second time, in a new StaticDefense class. It’s cleaner and more capable, and should be easier to adjust. It’s just now ready to get back to testing.

Humans make very different opening choices than bots. Most stick with general-purpose safe openings; a few specialize in cheese. I don’t have any way to collect SCHNAIL opening data, so I started a new file to hand-write an anti-human configuration. I didn’t fill in much of it yet, but I’ll get to it.

I expect my tweaks and new features to help somewhat on SCHNAIL and a tiny bit on BASIL. But we’ll see.

Crazyhammer queen game on SCHNAIL

My energy is low, but I’m still working on Steamhammer and checking out games. Crazyhammer is Steamhammer configured to choose purely at random from its library of over 200 zerg openings. It plays only on SCHNAIL, and only practice games, because it’s just for fun.

Crazyhammer doesn’t get many games, and it loses a lot because its builds are often hilariously inappropriate. As you’d expect! Today Crazyhammer played a fun game against terran TeChRapy on Fighting Spirit. Crazyhammer randomly chose its queen rush build, which will happen about 0.45% of the time—this is the first time I’ve seen Crazyhammer play it in a real game, though Steamhammer did give it a try versus Stardust in AIIDE 2020.

In the queen rush, Steamhammer makes 6 queens early on and researches broodling. It’s hard to think of an opponent plan that it counters. I don’t have the strength to take pictures and do the blow-by-blow, but here are a few points you might like to notice.

• Watch the swoopy way the queens fly around. It was the simplest idea I thought of to keep the queens apart so that they don’t often select the same target. It didn’t work this game! At about 9:30, 4 queens simultaneously and from different sides ensnared the same group of marines. I should bite the bullet and implement proper spell target tracking.

• Techrapy went with multiple barracks, no tanks. Nothing was worth a broodling, and the queens were useless at first.

• Crazyhammer reacted by researching ensnare and adding lurkers, both useful against marines. Techrapy got tanks against the lurkers, and then the queens had a broodling target.

• The queens sucked at staying safe. One of the 4 ensnaring queens retreated forward instead of backward, and got shot down. Later, 2 queens in a row flew into turret range and died trying to snipe the same tank.

• On the upside, the fast queen’s nest meant that the hive was not too slow. Defilers helped.

In the following game, Crazyhammer started with 8 hatchery 7 pool, and Techrapy won easily. Terrans at this level usually play a barracks-expand build which is safe against zergling openings, given scouting and a few easy reactions. Certainly safe facing Steamhammer’s level. In the queen game, maybe Techrapy was confused and made overcautious by the “unconventional” (aka bizarre) build.

Queens showed poorly this game, but I’ve been surprised how often they are successful. When terran turtles hard, Steamhammer’s queens can be as valuable as its defilers in breaking the shell. Knowing that queens are in play tends to make terrans spend on air defense and move around more slowly and cautiously. And I know what I need to do to make them more effective.

starting base? what starting base?

In 2017, I posted breaking scouting assumptions about a crazy trick terran can play: Lift off the initial command center and land it elsewhere, so that the opponent does not scout you at any starting base.

Today will go down in history, because somebody played this trick versus Steamhammer on SCHNAIL.

The game is LiberTY_ vs Steamhammer on Fighting Spirit, at 21-05-19 08:40:04 in SCHNAIL server time. Let the timestamp be forever honored in memory. Some background: Liberty (under a couple of related names) has played many practice games against Steamhammer, having some trouble at first but steadily improving and now winning nearly all games. This is someone who has learned Steamhammer’s weaknesses and has exploited them with increasing efficiency. Maybe the game was to accept a handicap and make Steamhammer a serious challenge again. Or maybe it was just a fun try to see if the bot would do something silly in the silly situation.

Liberty started in the bottom left. Here the command center is approaching to land in the bottom middle base. See the worker counts—lifting off your base interrupts mining for a long time in the critical early game, so it is a severe setback. Terran has no chance unless the trick breaks Steamhammer somehow. Steamhammer’s overlord is only halfway across the top of the map on its scouting trip, so it would have been possible to lift off later, losing less ground. A little less.

the command center nears its goal

Steamhammer scouted the bottom right base last, so it believed that was Liberty’s start base. The drone scouted it thoroughly, over and over, even after finding it empty.

the scout drone sees nothing, nothing

Wasting time with the scout drone was Steamhammer’s only real misreaction to the trick. The scout manager does not update its idea of what location needs scouting merely because the location is empty, but the information manager understands that no enemy base has been found. The initial 6 zerglings set about scouting the map for the terran buildings that must exist, checking base locations first (including bases that were already scouted). At about 5:30, a watch squad zergling arrived to keep a watch on the empty enemy “main”, and the scout drone could return home. By coincidence, at the same time, the now more numerous lings found the terran encampment and did some damage.

oops, zerglings found the terran base

This was not a scouting squad, it was a combat squad, and it was only scouting because it hadn’t found a place to attack. The lings had speed and there were only 4 marines. The game could have been over right there, but Steamhammer controlled its units poorly (in part because of crummy code trying to join clusters that became separated), and terran suffered only moderately.

But zerg had made no fatal mistakes and was too far ahead. With little room on the tiny mesa for ground production, Liberty chose wraiths. The first 2 wraiths arrived at a zerg base and were scourged before they could do damage. Soon the wraiths did better with cloak, but paper airplanes were not going to stop any zerg army for long.

Steamhammer’s reaction was about as good as I expected, and easily good enough. Does your bot survive this crazy trick? Probably! The only critical skill is the ability to notice that an enemy base is not where you “knew” it was, and you need that skill in case an enemy command center lifts off or burns down, which can happen in a normal game.

Chobo-Steamhammer game redux

It’s been a while since my last post, but I’m still working, however slowly.

In today’s SSCAIT report “By the skin of your teeth”, the last game of the broadcast is the same game I analyzed last month, Chobo-Steamhammer on Python, the corsair-reaver game, with commentary by the player himself. His analysis of the game seems similar to mine, except of course with insight into the human player’s thoughts rather than the machine’s.