archive by month
Skip to content

Steamhammer (Z)

ZerGreenBot was re-uploaded today. I hope it’s much improved! And I uploaded my bot for the first time today, not because it plays an interesting game (because it doesn’t) but to start getting my hand in and see what’s up.

My bot is named Steamhammer, a reference to the legend of John Henry. Steamhammer plays zerg.

Steamhammer’s play is crude, at the level of figuring-out-how-this-stuff-works. I hope to squeeze in one more update before the SSCAIT deadline and put the fear of zerg into at least a few opponents. Steamhammer won’t begin to resemble my intentions for it until some time next year. While SSCAIT is running I should be able to get the first fun ideas in place.

UAlbertaBot

I chose UAlbertaBot as my base, because UAlbertaBot seems neatly organized, comes with some documentation though never enough, and is designed to be flexible and extensible. It’s basically designed to be a research platform for trying new ideas, and that’s what I want. It can play any race, though it seems best tested for protoss. I find its code more readable than other bots I’ve looked at; only Skynet comes close, and Skynet is specialized for protoss and has a more rigid design.

UAlbertaBot has more bugs than I expected. Well, it was developed by one person and never widely tested, so maybe I should have expected them! A number have me baffled. The most devastating bugs have to do with build order. UAlbertaBot usually automatically schedules overlords when needed, but sometimes makes 2 instead of 1 (often a serious mistake) or doesn’t realize it has hit a supply block, makes no overlord, and freezes the build in its tracks (rare but usually fatal). The build order search BOSS usually behaves sensibly, but sometimes schedules extra buildings which are not implied by the build order goal, such as an extractor or a lair or a hydralisk den. These bugs can be seen occasionally in SSCAIT games. One you won’t see on SSCAIT is that if UAlbertaBot has a lurker on the field, then BOSS falls into a fit of terror and is unable to solve any goal, no matter how simple [the bug is real, but I misidentified the cause; see comments].

UAlbertaBot also has limitations. It can theoretically make any unit (I haven’t tried them all yet, and I had to fix a bug before I could make sunkens or spores), but it can’t use all of them. When I tried making lurkers I found that UAlbertaBot was unable to micro them; they sat around. Well, it’s designed to be easy to extend, and it only took me 20 minutes to code up a simple lurker controller. Not that it helped, with the lurker bug in BOSS! I also suspect that SparCraft does not know how to burrow lurkers, because a squad with lurkers runs away more often than it should.

UAlbertaBot behaviors high on my to-do list to fix: Improve base defense, improve scouting, add building placement code for static defenses and macro hatcheries.

UAlbertaBot as a test opponent

I find that UAlbertaBot makes an excellent test opponent for trying out opening build orders, because it is easy to configure it to play whatever opening you like. Edit the configuration file, add a build order as a list of units and buildings to build and tech to research, and set UAlbertaBot to follow it. No need to recompile.

UAlbertaBot may play the opening poorly, but it will follow the build order efficiently and you can catch the timings.

status

Steamhammer has different builds versus terran, protoss, zerg, or random. All the matchups are poor. ZvRandom is particularly awful—I couldn’t find a sensible build within the existing limitations. One step at a time!

In the next week or so I’ll make a dedicated web page for Steamhammer and put its code up.

Next: Outline development plan.

SSCAIT 2017 final rush

The SSCAIT tournament deadline this year is 18 December. Like the 2015 edition last year, it will start in December and I expect final results in January. Curiously, they seem to have decided to skip a year in the numbering scheme, so this is the 2017 edition.

The final rush is on. The Usual Suspects are updating their bots. Marian Devecka, I’ve already noted, is back in the game. Tyr has been reuploaded for the first time since the middle of the year. Possibly a few bot authors are waiting until the last moment, hoping to gain an advantage with surprise updates.

The admins have been at work too. Some previously disabled bots are alive again: Awesomebot, DAIDOES, Ian Nicholas DaCosta’s bot, JompaBot, the 2013 bot by Oleg Ostroumov, PeregrineBot. The number of games used to track the current winning rate has been bumped from 20 to 50, so that the ranking changes more slowly but ends up more accurate.

I will be jumping in too. I got work underway a week ago and I’m rushing to finish a first primitive version. Stand by for the announcement.

one medic rule

I notice that Iron sometimes trains 1 medic to heal its SCVs. It beats having them repair each other.

Here’s a rule of thumb to try: When you face off against a group of healable units with 1 medic, target the medic first. The rest of the fight will be easier. The rule of thumb is most useful when units are few: In a big battle, one medic hardly makes a difference, but when 1 zergling is trying to kill SCVs it’s another story.

When there are 2 or more medics, they can heal each other and it’s often better to save the medics for last. They have armor.

It’s only a heuristic. If you want to get it exactly right, do the calculation! But I notice that a lot of bots could benefit from a simple heuristic.

Killerbot beats Bereaver

If you’ve been following SSCAIT games between the top bots, you’ll have noticed one striking change: 2015 Killerbot lost most games to recent versions of Bereaver, but the new 2016 Killerbot has just won 4 in a row.

The 4 games followed similar paths.

• Bereaver optimistically puts on some early pressure that Killerbot is more than ready for. Here is Killerbot’s simcity at its natural—it’s nothing you can attack with a few zealots.

Killerbot’s simcity

• Bereaver sends out 1 initial corsair. Killerbot defends with hydras. Throughout the game, Bereaver usually keeps 1 or 2 corsairs in the air and gets some overlord kills but repeatedly loses corsairs to hydras.

the corsair’s success ends

• Killerbot gets aggressive with its hydralisk force, mixing in some lings. Bereaver gets reavers, defends, then chips away at the zerg army.

Bereaver defends with a reaver

• Bereaver builds up power and pushes the zerg ground army back, aiming for a heavy attack. The wolf is at the door:

reavers fire into the zerg natural

• Killerbot presumably notices the shortage of anti-air and goes mutalisks, the classic zerg counter to reavers. The wolfsbane is also at the door.

mutalisks defeat the protoss army

Bereaver can’t recover after the sudden zerg tech switch.

Both bots show risky over-aggression at times. Killerbot has improved its overlord protection and Bereaver’s corsair control—which used to be effective—is no longer alert enough to keep its corsairs alive. But that’s small beans; Bereaver’s strategic mistake is to rely on reavers without enough air defense to protect them. Corsairs are standard nowadays, but dragoon-reaver is also a classic unit mix.

As Igor Dimitrijevic said, Killerbot’s adaptation skills have become dangerous.

Killerbot versus Iron

I have a feeling that some of the new behavior of Killerbot is designed specifically to counter Iron. Well, I could be wrong. It seemed interesting so I played some games between the two locally, with the 1 December version of Iron and the 27 November version of Killerbot. It was also a chance to see how the two cope with maps outside the SSCAIT pool.

This version of Iron scouts immediately, with one of its first SCVs. That’s a hit to its economy. I guess author Igor Dimitrijevic decided it was important to start adapting to the enemy’s build as soon as possible.

On many maps Iron tried its signature 3-vulture runby. When the runby succeeded, Killerbot could eventually clear the intruding vultures with mutalisks, but was far behind and lost every time. On the map Gladiator, which has an up-ramp out of the low-ground main, Iron felt the need to bunker its ramp and tried the runby later than usual. Killerbot had placed sunkens well and Iron aborted the runby in mid-flight (a skill in itself!). But then Killerbot was ahead and could even expand to the precariously-placed mineral only, with a winning advantage.

In some games, like on Match Point, Killerbot added a sunken in its main. I’m not sure what triggered the extra defense. That blunted the runby, even when the sunken was poorly placed, because Iron was not clever enough at working around it. On Match Point, Iron still gained some advantage and ended up winning a tense game.

I notice that Iron favors citadel defense: It builds heavy static defenses that cover a small area. With repair, the static defenses (bunker or turrets) are expected to hold without reinforcement. Pros usually favor the lightest possible static defense and reinforce with mobile units when needed—that’s more demanding, obviously.

Iron builds its first factory in a distant corner of its base. That way when it gets rushed early, the factory is likely to be overlooked and can get vultures out, which is usually enough to hold off the rush. It’s a clever trick that works well against bots. But later when Iron comes under mutalisk attack, the factory is outside the citadel of turrets and becomes hard to defend.

Killerbot’s mutalisks are attracted to turrets and do not fight them efficiently. In this picture most mutas are attacking the rightmost turret. They surrounded it and are taking fire from all sides, when they should have attacked from an angle where not all turrets were in range. Meanwhile, a couple mutas do not play well with others and attack different turrets on their own.

Killerbot fights turrets badly

On Arcadia II, Killerbot surprised me with a strategy I hadn’t seen it play before. It opened with its usual 3 hatcheries and then, I can’t guess why, took drones off gas after 100 and went all-in speedlings. Iron saw it coming and bunkered its ramp, but it was not enough. The mass zerglings surged over everything. The red lines on the minimap are more zerglings on the way, far more than Iron can hope to save itself from after the bunker falls. I won’t be surprised if this strategy features more prominently in the next tournament version of Killerbot!

Killerbot surges over everything with zerglings

Killerbot depends on an easily-defensible natural expansion. On Outsider, a rather weird map, it didn’t even try to defend its wide natural and soon lost all drones. Fantasy and Jaedong played a famous game on this map in 2009. I think it is a difficult map for bots; you need to understand mineral jumping and drop play.

I even laid in a game on Jungle Story, an old-school map from before modern macro play was invented. The map was cool at the time but today is very non-standard. It has no close natural; the closest next base is an open mineral-only. The game was hilarious: Killerbot took the center gas expansion and defended it with 1 sunken. That base has 2 openings and Iron could have harassed through the opening not covered by the sunken. Or Iron could have bypassed the expansion and headed for the main. Instead Iron ran by the sunken, through the expansion, and toward the main, losing 2 vultures of the 3 for nothing! Apparently its decision-making is tuned for standard maps. Killerbot’s mutalisks erased the terran main.

Iron unnecessarily runs by a sunken

Usually when Iron worked up to wraiths, Killerbot found itself unable to defend both its overlords and its mineral lines: Pick one, give up the other. Killerbot would benefit from scourge for air defense, or maybe a spore colony in the mineral line at some bases (it already makes an evo chamber).

Overall conclusion: It was fun because both bots are super-aggressive. Iron has better micro and a deadly runby tactic, and usually wins. But when Iron blunders, Killerbot takes over. Both bots could benefit from more geometry smarts in figuring paths and placements. I was surprised that Killerbot does some basic research very late. It fights more than I expected with slow zerglings and slow hydralisks.

Last year, Killerbot was clearly the best around. If it hasn’t kept up, that is a sign of how much progress we’ve seen this year. Here’s to another year of progress!