archive by month
Skip to content

next Steamhammer version coming soon

I planned the next Steamhammer version (1.2.3) for the end of this month, but it is going to be late. I have added a bunch of features, and there are still a few more features that I want to cram in. Then I’ll need at least another day for testing, because a lot of new stuff is poorly tested and I would rather avoid a meltdown.

There will be new config options, more stuff for each race, more flexible tactics and targeting, and surrendering when hope is lost. “Farewell, cruel world!”

The version after (1.2.4) will be a bug fix version. I already have a mighty list of bugs and flaws to fix, and 1.2.3 will probably add more.

most skills are hard

I think most Brood War skills are hard to implement well. Every skill I add seems to give me some difficulty or other.

stim

Krasi0 noted that most bots which use stim tend to overstim so that the medics are constantly low on energy. That didn’t seem all so hard to avoid, I thought when I first considered it. Add up the total medic energy, and stim more freely when you have more medics or they have more total energy. Well, it can make sense to stim when you have no medics at all. And how many marines do you want to stim when one zergling runs in as a scout? Hmm, it’s tricky....

The right way to make the decision is to weigh the cost and benefit. The cost is 10 hit points per unit stimmed over the time period until the damage is healed, plus the medic energy to heal it—something like that. The benefit is faster movement and faster shooting until the stim ends, whose value depends on the whole situation. Both cost and benefit should take into account what you expect to happen next (“better save some energy for the next fight”). Tricky is not the word, it’s infeasible to do it optimally! Tradeoffs must be made.

For now, I followed a simple plan not far from my first thought. Steamhammer adds up the medic energy, counts down the amount used by each unit stimmed, and stims more conservatively when it is gone. It overstims, like most bots, but at least not to the point that it runs down its hit points.

Even with poor decisions, stim makes Steamhammer’s infantry stronger. It’s a net gain.

merging an archon

Stim is hard for gameplay reasons. Merging an archon is hard simply because it’s unreliable. Sometimes the two high templar you’ve ordered to merge end up circling around each other and never get together. Sometimes they start to approach each other, run into obstacles, and give up. If you try again, they are likely to run into the same obstacles and give up again, so you have to move them somewhere else first—but where?

Steamhammer doesn’t support psionic storm yet, so I don’t have to worry about the tradeoff between keeping high templar and making archons. I added a micro manager for high templar, with the sole job of merging archons. After high templar learn how to storm, maybe the strategy manager should decide when to merge high templar.

It took me hours to get archons to merge reliably. At least, I hope, mostly reliably. I check templar->getLastCommand(), templar->getLastCommandFrame(), and templar->getOrder() in different combinations to recognize different cases. I picked a point next to a corner of the main nexus as a gathering place for high templar that get stuck and need to be told to move first. Of the high templar ready to merge, I find the closest pair and merge only them, then call it a day for that frame. The combination of measures seemed to be enough.

In one test game, an archon merged at the gathering point and between two other high templar. The archon could not escape because it was trapped among buildings and high templar, and the high templar could not merge because an archon was between them. I didn’t fix this case, I arranged for it to be rare enough that I hope it doesn’t hurt much. Meanwhile, there are failure modes that I didn’t run into in tests....

stuff I have not seen bots do

In one of the recent SSCAIT casts, Nepeta said that he had seen every Brood War spell used by one bot or another. He’s ahead of me. I still haven’t seen one building, one unit, and several spells from bots. Of course, I do have a bad memory (if I recall correctly). What have you seen that I have missed or forgotten?

Optical flare, aka blind. Krasi0 can use medic restoration. Have I missed optical flare because it is hard to notice?

Nydus canal. Pablo Garcia Sanchez used to make nydus canal starting points, but never connected them to end points.

Infested terrans. Garmbot infests command centers, but doesn’t use them.

Ensnare. Garmbot and Tsmoo zerg can use parasite, and I think all bots that make queens know broodling. I don’t recall having seen ensnare, useful against wraiths or marines that clump up. I would dearly love to attract a clump of marines to one spot with mutalisk attacks, ensnare them, and then move to attack somewhere else.

Maelstrom. I’ve seen dark archons feedback and mind control, but never maelstrom.

Hallucination. It could a difficult skill for bots to use well, because it’s about fooling the opponent. On the other hand, bots may be easy to fool. A good first use might be hallucinated zealots to clear mines without detection. Another good use would be to hallucinate carriers to soak up scourge—zerg bots will not catch on but will keep drawing down their gas.

Disruption web. Surely some bot uses this? Roman Danielis? I don’t remember having seen it.

SSCAIT elo depends on reputation

I thought of another theory to explain why Steamhammer’s elo might have changed after the last mini-tournament.

Your rating depends on the mix of your opponents. Elo measures average strength. You will generally do better than your average against some opponents, and worse against others. And because of the voting system on SSCAIT, your mix of opponents depends on what people think of your bot. If they think it’s more fun to watch you lose to enemies that have your number, your elo goes down, or vice versa. Because of voting, elo depends on reputation.

Before the tournament, Steamhammer was getting more matches against Bereaver. Maybe it still had novelty value; maybe voters liked seeing the powerful Bereaver get crushed by zerg exploiting a narrow window of weakness. Anyway, that tended to drive up Steamhammer’s elo. Since the tournament, in which Steamhammer did less well than people may have expected, it gets fewer matches overall and more of them are against opponents that give it trouble, like Wuli. Its elo ought to have fallen some because of that.

Somebody who was interested might dig through the game history and try to figure out the bias that reputation lends to each bot’s elo. How much would the elo change if the mix of opponents were exactly even? I think that elo is a pretty good system, and despite reputation effects, elo depends mostly on strength. Am I right?

Randomhammer, on an unrelated note, had a good day today. It scored a win as protoss against Iron with a zealot rush; Igor Dimitrijevic is apparently trying to reduce Iron’s overreaction to early aggression from the opponent, and it underreacted instead. Then it won as zerg against Krasi0 when terran played an 8 rax into vulture build against fast mutalisks. Neither game was interesting, but it was satisfying to beat the leaders.

many ways to beat Steamhammer

Steamhammer’s elo stabilized over 2300 before the last mini-tournament. It is clearly the strongest version yet. Randomhammer’s elo rose to around 2100, as I forecast. All races are stronger than before.

Then Steamhammer’s elo crashed during the tournament. 5 Pool had just learned how to beat it, and Tscmoo protoss finally settled on its winning opening too. Also of course it was playing a larger proportion of games against Iron and Krasi0, and against Killerbot by Marian Devecka, which this Steamhammer scores about 50% against.

After the tournament, with 5 Pool disabled, Steamhammer’s elo still hasn’t recovered. It hovers around 2200. Tscmoo protoss hasn’t forgotten its winning opening. Also the zergs Ailien and Microwave have improved to beat it more often, getting better air defense and reducing their strategy mistakes. Even lower-ranked protoss Lukas Moravec has been winning games with its zealot rush, stealing gas in some games. Steamhammer doesn’t work around the BWAPI geyser bug and its game plan is derailed by a gas steal. I think Steamhammer’s #3 rank (since lost) and its status as the handle of a fork with many tines made it a target, and since it has plain weaknesses, people have figured out how to exploit them. Or maybe they’re trying to reprioritize my to-do list, “This is the important weakness, please help.” :-)

Meanwhile, I’ve been spending most of my effort on skills for protoss and terran. The next Steamhammer will come with protoss DT drop and terran vulture drop, but no zerg drops. Overlords are more complicated, and I decided to save it for later. (Getting drop to work at all needed a mess of code changes across classes: CombatCommander, Squad, SquadOrder, MicroManager, other micro classes, StrategyManager—and that is accepting the limitation of dropping a fixed set of units, once, from one dropship or shuttle, and then transitioning out.) Terran will track its use of scan and have more infantry skills and smarter tanks, protoss will support more unit types and use them, both will have more transitions and other improvements. Also I’m making micro changes for all races which add flexibility but require tuning, so there may be new micro weaknesses until I figure out what works.

I hope to get in zerg specific improvements to overcome the biggest weaknesses. I know what to do, but the list is long and I’m not sure how far I’ll get. Anyway, the bottom line: I can’t promise that the next version will be stronger. What I know for sure is that it will be more interesting.

And I can’t wait to get back to zerg.

many ways to beat XIMP

I enjoyed this game of m-khan’s KaonBot versus XIMP by Tomas Vajda, showing another way to beat the carriers.

As I write, KaonBot is rated about 1900, so it is a slightly worse than average bot. I would say that it is at the high end of the low-ranking terran bots. KaonBot goes mass marines every game (with medics and upgrades), which is a severe limitation, but it has above-average smarts in adapting its economy to the situation. Against XIMP, KaonBot quickly took the entire map, except the island bases. XIMP could not get a third base because they were all taken!

Marines are deadly efficient at shooting down interceptors, because they do normal damage rather than explosive damage like goliaths, dragoons, or hydralisks. The picture shows marines fighting interceptors and cannons. The carriers could not keep interceptors in the air. This first infantry force was not enough to clear the cannons, but a later one was.

marines versus carriers and cannons

KaonBot seems to score around 50% against XIMP, which is pretty good.

Ways to beat XIMP, with example bots:

  • cloaked wraiths - WOPR by Soeren Klett (with goliath-tank followup)
  • goliaths - Krasi0
  • marines - KaonBot
  • tanks - Tyr by Simon Prins (wipe out the cannons before the carriers are out)
  • ghosts - nobody yet?
  • hydralisks - Killerbot by Marian Devecka
  • hydra-scourge - UAlbertaBot by Dave Churchill (special build order for XIMP)
  • ultralisks - Ailien (ignore the carriers, kill the bases)
  • dragoons - Steamhammer playing protoss (with a 13 nexus build)

Protoss has the most trouble against the carriers, but when Randomhammer rolls protoss, it goes with a straightforward nexus-first build that produces enough units to break the cannons. AIUR does the same thing sometimes, though not as consistently. If you get far enough ahead in macro, it should be easy to win with almost any strategy.

It should be, but it isn’t always. Steamhammer zerg still struggles against XIMP, losing games due to several bugs and limitations. On 2-player maps Steamhammer doesn’t finish its opening build order, and depending on how it scouts, it may not make a spire (which makes the win easier). In the most recent game, Steamhammer took many bases and crushed XIMP’s natural and main with ultralisks, leaving only the protoss third, then lost by streaming ultra-ling into the empty protoss main to be slaughtered by carriers until zerg finally mined out. It’s a combination of a scouting limitation, a tactical limitation, and an expansion bug. Too much to fix!

patch 1.18 questions

I have questions about patch 1.18. There must be discussion, but I haven’t seen it, so—can somebody pass along the state of affairs?

BWAPI of course supports only 1.16.1, and we’re stuck with that version for a time. Instructions on setting up a bot to play include a step “connect to battle.net and update to version 1.16.1”. It’s a necessary step; certainly my CD came with an older patch. And that ain’t gonna work no more. So... this doesn’t affect me directly or immediately, I’m already set up. But it seems critical for the community.

1. What is the best practical solution?

2. Is 1.16 legally available? Is it free too, or was only patch 1.18 made free-as-in-beer? Are people going to end up passing around bootleg 1.16.1 versions for the newbies?

Pinfel and all-in attacks

Protoss Pinfel is reactivated. It is scoring few wins, but I enjoyed watching its games. It defeated Microwave and had narrow losses versus Johan Kayser and versus McRave. It’s a good result for a new bot made from scratch.

Pinfel makes the most extreme form of all-in attack. It brings every single unit, including all probes; the attack wins or loses, and that is that. Good micro counts but other skills do not come into play, so it is a fine choice for a new bot which doesn’t have many skills yet. It will encourage the bot author to work on micro, which will pay off even if the bot switches to a different strategy later.

An all-in attack can be less extreme. “All-in” means that the attacker is deliberately setting itself far back in order to make a stronger attack, and will be losing if the attack is not successful. The attack is successful if it harms the enemy enough to make up for the setback. It’s a threshold: Do this much damage or probably lose.

The goal of going all-in is do fatal damage, so if you’re bringing workers it rarely makes sense to bring only a few workers. (Exception: A zerg versus zerg sunken rush.) Bring many workers. If you bring all workers, your damage threshold is: Wipe out the enemy entirely. Pinfel’s narrow losses against Johan Kayser and McRave came when it almost but didn’t quite meet the threshold; the enemy’s last two or three surviving units were enough to turn it around.

If you leave some workers behind, your damage threshold is lower. You’ll have fresh production, though it will be slow, and you can still win if a few enemies survive. Pinfel would likely be stronger if it left a few of its probes at home. Using the few workers to best effect requires more skills, but simply making extra units as the cash comes in is easy and gives you a chance if the enemy narrowly survives.

If an all-in attack catches an enemy with its army out of position to defend, the enemy may decide to go after your defenseless base instead, triggering a base race. If you’re planning to all-in, it makes sense to prepare: Build a pylon, or supply depot, or zerg extractor, in some hard-to-scout spot on the map. You can lose your entire base and still win if the enemy doesn’t find your hidden building.

Krasi0 and other updates

I count 10 bots updated since the mini-tournament. That’s a lot. 5 Pool started losing some games and was disabled, with a message “Want to create a bot which doesn’t only 5 pool.” I think the strategy is showing its limits. Once you’ve seen the range of followups, it seems to me not all so hard to counter all of them.

I miss Pinfel, disabled before the mini-tournament with a losing score of 3-10. It played a zealot-probe all-in bringing every single unit, unlike any other bot. I recommend occasional all-ins for strong bots, even if they’re risky. If you have opponent modeling, recognize greedy opponents and bust them; if you have good judgment, recognize opportunities and seize them; if you’re not that bright, like Steamhammer, then randomly all-in (say) 5% of the time to keep ’em on their toes, to challenge their opponent models and judgment.

A few observations on Krasi0’s new play:

• I thought Krasi0 was more cautious about detaching groups and sending them forward without enough support. That’s an improvement. It also seemed even more hesitant than before to expand, at least while under pressure. I suspect that a bot which could keep up constant pressure while simultaneously defending its expansions from vulture raids and harassment drops might starve out Krasi0 and win.

• Against Iron, Krasi0 backed up its bunker with a vulture, which appeared to forestall Iron’s runby—and then went 2 port wraith! Is that a new build, or is only the vulture new? An early vulture seems normal in a 2 port wraith build. Anyway, it worked well enough; Krasi0 beat Iron, which it has rarely done lately.

2 port wraith could be deadly against macro zergs, or against any bot which doesn’t grasp air defense. For terran against Iron, for the middle game I suggest a tank-heavy army with some goliaths mixed in. I think that meets all of Iron’s preferred unit mixes.

2 starport build

• In the most recent games, I noticed that against Steamhammer’s mutalisk play, Krasi0 made turrets only near the bunker where Steamhammer persistently maneuvers. Against 5 Pool’s mutalisks, Krasi0 made turrets all over its base before any attack, which was helpful given how that zerg plays. What’s the difference? Is it a hard-coded behavior, or is it the result of opponent modeling? Or did I watch the wrong games?

a new UAlbertaBot bug fix

The bot bftjoe by Joseph Huang fixes a bug in UAlbertaBot that I did not catch.

bool UnitUtil::CanAttack(BWAPI::Unit attacker, BWAPI::Unit target)
{
    return GetWeapon(attacker, target) != BWAPI::UnitTypes::None;
}

Easy to type, easy to read past... and totally wrong. Unit type None is 228, which does not match the value of any weapon type, so it will always return true. “All ints are the same type, right?” Bjarne Stroustrup: “Uh, sure.”

bool UnitUtil::CanAttack(BWAPI::Unit attacker, BWAPI::Unit target)
{
    return GetWeapon(attacker, target) != BWAPI::WeaponTypes::None;
}

In UAlbertaBot, CanAttack() is used only in the tank manager, so the damage, er, fallout, er... severity is limited. Steamhammer additionally uses the function in controlling lurkers, which it does not build by default because its control is so poor. So the next Steamhammer version should be a little less clumsy with tanks and lurkers. Still pretty clumsy, though; the clumsiness runs deep.

Tomorrow: The newly uploaded Krasi0 seems to be playing new builds.

Steamhammer will drop

It’s decided. The next Steamhammer version will support drop. Dave Churchill had already implemented most of the skill: Choosing a transport for the job, sending it on a sneaky path around the edge of the map, and unloading it near the enemy’s mineral line. The remaining bits are proving surprisingly tricky: Choosing units to load, keeping them together until everything is ready, loading them up (seems like a key step), and not doing anything too ridiculous after they land (“oh no it’s scary here, let’s skip this job and go home”). Even so, I expect to get it working reasonably well by tomorrow, the day after at worst.

It’s limited. It only supports 1 transport, and after dropping it does not know how to reset itself for a second drop. Better make the one try count! I wrote a dark templar drop build for protoss. I’ll try to add a terran drop build, though it won’t be as dangerous. If I feel ambitious I’ll do the bit of extra work for a lurker drop too.

It’s a good start. Fancier versions can come along later.

Update: The first time I got a dark templar drop to land in a terran base, the dark templar said “Uh oh, our own base is under attack. We must ignore the enemy in front of us and walk across the whole map to defend!” Not doing anything too ridiculous after they land is a vital skill....

Steamhammer-Microwave razor close game

SSCAIT’s mini-tournament is not quite finished as I write.

The irritating news of the tournament: Steamhammer played 2 tournament games versus XIMP by Tomas Vajda, plus one game shortly before the tourney, on the same map (Benzene) with the same starting positions (protoss on the left, zerg on the right). Just how random is it? The 3 games were nearly identical, down to individual army movements, and Steamhammer lost, as it should have, because it doesn’t understand map blocks and couldn’t finish its opening build. Sometimes luck hits like a truck.

The interesting news of the tournament: Tscmoo protoss is doing surprisingly well, including against opponents that it has a mixed record against. Did its opening learning, which was reset in December, finally gather enough data to make good decisions? We’ve seen before that Tscmoo brings its best against strong opponents. What’s behind that?

A razor close game between Steamhammer and Microwave on Python: Steamhammer opened with overpool into fast spire, while Microwave went overpool with zergling speed and mass lings, leading to a later spire. Steamhammer made 2 sunkens with its spire. When Microwave’s zergling numbers grew large enough, it defeated Steamhammer’s lings and pushed in; the sunkens and 2 fresh zerglings were barely enough to hold them off. When its faster second hatchery came online, Microwave attacked again; the second wave killed the sunkens and a couple of drones, but the first mutas cleaned up. The third wave left 2 Steamhammer drones alive, and by then Microwave’s spire was up too, and soon Microwave destroyed Steamhammer’s spire. Steamhammer scourged an overlord, which delayed Microwave just enough. Here Microwave is adding drones when it should be replenishing its army.

Steamhammer’s spire is destroyed

If you make too many drones in ZvZ, you die. Microwave was behind in air power and did not keep the pressure on. Steamhammer killed another overlord, outmicroed the scourge...

Steamhammer outmicroes scourge

... and brought down the excessive number of drones while defeating mutalisks that spawned one at a time. Microwave helped by transferring drones from its natural to the main where the mutas were. Microwave might have held if it had gotten up a spore colony in time, but it was too late.

Steamhammer clears drones and mutas

attack of the clone bots

Krasi0 wonders what should be done about the flood of related zerg bots. As Californians know, it may relieve the drought, but it is still a flood. Some bots play very similarly and could be boring to watch. Anyway, the ideal SSCAIT should have a good balance of races and play styles and not grow too lopsided, at least not for long.

It’s the kind of decision that should be made pluralistically. Stream watchers have a legitimate interest in seeing a variety of styles of play. It’s more fun. Bot developers have a legitimate interest in trying out adjustments to other bots: I think this change is a good idea, am I right? That’s fun too. But the interests can come into conflict, especially with a new bot like Steamhammer: It is accessible, it is successful, it is easy and fun to modify, and it has obvious flaws in its play that call out for correction. We might get too many near-identical Steamhammer clones.

Doing nothing for now is a choice. There is no serious problem yet (if you ask me), only a threat of one. When you first get into bot development, it’s natural to start with small tweaks to a starter bot; I did it too. Historically, most bots are developed for a while and then left to age and slowly turn into vinegar. Nobody will object if a near-clone bot is turned off after its active development ends. Some bots get ongoing development, and those won’t be clones for long. They will diverge. If that’s how things go, then we don’t need a new policy, we only need to continue the current policy of disabling bots which are boring and not under active development.

Here are some ideas if we want to make a change. They are not mutually exclusive; we could do all of them.

1. Make rules. Admins could decree that clone-like bots will be summarily disabled unless and until they do something interesting. It might be a good idea if stream viewers get tired.

2. Implement a server-side incentive for more varied behavior. For example, let people vote bots up and/or down, maybe with a long-term effect on how many games to bot gets to play. Or maybe adjusting a public “interestingness” ranking value that bot authors may be happy or unhappy with. (I would like to have that measure, if somebody can think of a good way to implement it distinctly from a measure of strength: Roman Danielis is interesting but not strong; Marian Devecka is strong but has predictable play). Or have admins flag near-clone bots in their opinion, which (say) counts for -1 vote for that bot in the existing match voting system. Many designs are possible. The goal would be that boring bots are allowed, but get less stream time or are otherwise discouraged. A related idea is to somehow mark bots for similarity, so that when one bot plays, others that are similar to it get less time depending on how similar they are seen as being.

3. Promote bots other than Steamhammer on the SSCAIT site. I think Skynet by Andrew Smith would be a good protoss starter bot. It is Gnu licensed. It is old code and still on BWAPI 3.7.4, which may be a drawback, but it comes with a cool strategy programming system that lets you specify behavior at a high level. It should be relatively easy to give it fun new behaviors, plus it already has a large number of skills that could be improved one by one. I’m not sure what a good terran starter would be.

4. Make Steamhammer better at terran and protoss. Not me; I’m itching to get back to zerg after the upcoming batch of terran and protoss features. Once my collaboration site is set up (hopefully by early May), it will be easier to propose improvements to Steamhammer. I’ll incorporate any that make sense to me, even if race-specific. In general, the different strains will more easily cross-fertilize. Alternately, maybe some developer is interested in starting a terran or protoss fork that will get ongoing development.

5. Supporting more units and skills will also help Steamhammer forks be more diverse. Does anyone want to implement spider mine placement, or psionic storm, or arbiter recall? If you do a good job, I’ll be glad to put it into Steamhammer with credit. I will eventually get to these skills myself, but it is not a priority so it will be a long wait.

6. UAlbertaBot and Steamhammer carry out simpleminded tactics that obstruct alternate styles of play, as PurpleWaveJadien pointed out in comments to the previous post. So one mitigation is to put a smarter tactical boss into Steamhammer, one that supports more varied tactics. It’s not a matter of using SparCraft or not, it’s the tactical framework. “Main force here, sandwiching force there, go!” A new tactics boss is a priority for me, and I’ll be working on it over the year. I may start with mutalisk tactics only, but in the end I want an easy-to-adjust framework that represents its goals explicitly, works for all races, works with all kinds of unit mixes, carries out a wide variety of tactical plans, and has hooks to apply machine learning. I expect it will come piece by piece over months, so no quick fix.

7. Keep Steamhammer temporarily closed-source after a new feature release. Publish the source only after some suitable period, or when the following feature release is ready. Maybe it would help? I’m not sure. At least Steamhammer itself would be more distinct from its recent clones.

8. Seek a super-configurable starter bot whose behavior can be radically changed by changing data files, or which provides a Starcraft-specific higher-level language that makes it easier to code strategies and tactics. If we had that, clones might diverge more rapidly. Well, it’s a long-term aspiration more than a plan. Somebody would have to be convinced to do it, and then figure out how.

The world is full of more ideas than one person can think of. What do you think?

SSCAIT Ladder Tournament series

For anyone who hasn’t noticed, the second weekly SSCAIT Ladder Tournament is underway. Here’s the tournament series main page so you can follow along as more of these little competitions come up.

Now, if you’ll excuse me, I need to go do something to prevent the zerg column in the tournament participant tables from growing even longer. 6 of the 13 bots this week are zerg and share common heritage in their family trees. Tonight I’m implementing stim for terrans. Steamhammer’s terran infantry skills are almost good enough to pose a serious threat to zergs—just a couple more skills....

the bot 5 Pool revisited

The bot 5 Pool is being updated often, and changing its play very noticeably. I took another look.

The author’s plan, as I see it, is to beat lower-ranked opponents with an opening that is difficult for them to cope with, and higher-ranked opponents with hand-chosen counterbuilds. And, of course, to show off by striking a pose with a disco ball, or that is, by doing it all with variants of 5 pool. It’s kind of a cheesy way to use a cheesy opening, but if it promotes progress then I don’t mind.

The method is to make minimal changes to a Steamhammer fork and code up several variants of 5 pool. Earlier versions of 5 Pool stuck with zerglings, but found themselves too easily hard-countered. Newer versions code in mutalisk openings for some opponents. The play is closely similar to Steamhammer’s, strengths and weaknesses alike, but I am able to spot a few improvements in 5 Pool over its parent.

This version of 5 Pool uses Steamhammer’s random opening choice in ZvT and ZvP, playing 3 different 5 pool variants against each. It plays only one variant versus zerg or random (the first one listed below). So terran and protoss can’t simply survive the opening and call it a win, they have to be able to cope with the variants:

  • 30% - straight zerglings with 4 drones
  • 30% - zerglings with 6 drones (a slightly weaker first hit but a much stronger followup)
  • 40% - zerglings with 6 drones and an early second hatchery (the most natural approach)

Bereaver, Iron, Krasi0, Steamhammer, and Stone get hand-chosen counterbuilds. Bereaver and Stone will suffer, since they have weaknesses and aren’t being updated. Iron faces exploitation of its predictability: Terran overcommits to defense against the fast zerglings and has lost games where zerg instead macros up and goes mutalisks. But Iron improves at an incredible rate and, I expect, will soon tighten up its defense decisions. 5 Pool is set to play the same build against Krasi0 as against Iron, and Krasi0 did lose a game to it, but Krasi0 has opening learning so it has a chance to adapt. This version of Steamhammer plays a fixed build against 5 Pool and, like Iron, can be exploited because of the predictability of the strategy boss. Steamhammer hasn’t lost a game to 5 Pool yet (as I write), but I think 5 Pool is getting close to a successful exploit and this version or the next is likely to score wins. Therefore the next Steamhammer version will play random openings against 5 Pool and become difficult to exploit.

5 Pool has set itself a hard task. Its opening is easy for strong bots to counter, so to win it must play better in the followup. Even so, it is scoring some wins against the top bots, forcing them to improve. And that is good.

Update: As I forecast, today’s version of 5 Pool can finally beat Steamhammer. 5 Pool exploits a weakness in the strategy boss, which does not adapt to the enemy’s static defense. It ought to make fewer of the units that the static defense counters and spend more on drones and tech to stay ahead. There is no sustainable plan behind 5 Pool; the author put out new versions for days before success, around 3 times as long as it will take me to improve it. I don’t even need to improve it, because I can prevent any fixed counterbuild from succeeding with random opening choices, since opening with 5 pool puts 5 Pool far behind. Anyway, 5 Pool can take its wins and brag for a while. Stand by for the next Steamhammer version around the end of April. Protoss now supports reavers and carriers, and today I need to test the carrier play some more.

Steamhammer is #1

Oops, Steamhammer became the #1 bot on the SSCAIT ranking.

detail of SSCAIT rating list

It pulled ahead of Krasi0 by a hair. I don’t expect it to stay #1 for long. It still can’t beat Iron or Krasi0 more than occasionally. Iron has lost rating points lately because Igor Dimitrijevic is putting it through a strategy change, and it will take time to tune up Iron’s new play. As that proceeds, Iron will work to claw back its first place. In the meantime, apparently Steamhammer has been defeating lower-ranked bots about as reliably as Krasi0 does.

I have to give in and admit that Steamhammer is no longer merely a threat to the top bots, it is a top bot itself, even if it struggles head-to-head against the very best. Well, I predicted all along that bug fix release 1.2.2 would restore the strength of 1.2 and then some, after the dip caused by bugs in version 1.2.1.

Meanwhile, Randomhammer has been getting fewer games and its rating has not stabilized yet. I’m expecting it to reach about 2100, maybe a little more. The bug fixes should make all races stronger.

Moral: Experience shows that feature releases are sometimes stronger and sometimes weaker, but bug fix releases are always stronger. Fix more bugs!