archive by month
Skip to content

another Randomhammer upset

Randomhammer earned another upset, this time with protoss against Iron. The game is not too interesting, just a dark templar rush that Iron wasn’t ready for. Iron could have held by landing its barracks to close the wall until mines and turrets were done, but didn’t. Even so, it shows that Steamhammer can defeat any opponent with any race—at least occasionally when it gets lucky.

two upsets

Two surprise upsets today caught my interest.

new from MadMix

The game MadMix by Oyvind Johannessen vs McRave surprised me.

McRave fell out of the top ranks a while back, but has lately been climbing back up. I’m guessing that some new subsystem was switched in a while back, and it has taken this long to work the bugs out. After a long drought and a bunch of tries, the new version of McRave notched its first recent win versus Steamhammer today (and another shortly after). I expect McRave will keep rising and return to the top 5 before long.

MadMix is brand new, but already has a big update. The initial version made most units for all races, but never researched upgrades or tech. Today’s version researches most upgrades and at least some tech, so the mix is even madder!

In MadMix versus McRave, random MadMix rolled zerg and started off with fast lurkers. McRave is much higher ranked and has a better build order, better tactics, and better micro. McRave had a vastly superior force in the early game, but for some reason chose not to engage—mistake #1. When the lurkers came out, McRave had no detection and was contained despite MadMix’s poor combat skills.

MadMix slowly expanded to many bases while McRave was contained. McRave made a robo facility but never added an observatory, so it had no detection—mistake #2. I’m sure it’s an oversight or bug and will be fixed before long. McRave still could have made a nexus at its natural, added cannons for detection, and maintained a chance to win, but instead when the protoss main mined out, McRave resorted to long distance mining—mistake #3. Even so, McRave’s macro was stronger and the protoss army remained dominant. In smaller attacks, MadMix retreated support units and unburrowed lurkers each time targets moved out of range, so the forward lurkers tended not to live long. For a lurker, staying underground and restricting your enemy’s mobility can be more important than having a target.

McRave was strangely passive this game, moving its army mostly in response to immediate threats. With zerg on many bases and protoss long distance mining, the writing was on the wall. Eventually MadMix started mass attacks and broke through to win. The picture is from shortly after MadMix’s army first became the larger one (notice the worker counts). In the upper left you can see lurkers holding an isolated protoss force at bay; for some reason, MadMix made better use of its lurkers during the breakthrough attack.

MadMix upgrades tab

The upgrades tab shows that MadMix did a ton of upgrades this game, even overlord sight range. You can see scourge, and offscreen is a devourer, even though McRave never made an air unit. The zerg unit mix is genuinely mad. It did not make queens, which may mean that it realizes it needs to know how to use the spells first.

Maybe another update soon will see MadMix using most tech, too. In any case, MadMix is already ranked higher than Travis Shelton, the other random bot with a wide choice of units.

Randomhammer gets a win over Krasi0

Randomhammer scored an upset win over Krasi0 with a vulture drop. I knew the drops would pull some good wins.

Randomhammer (this time) sent its dropship the short way around the edge of the map to Krasi0’s base. Randomhammer’s vulture micro was disappointingly poor, but even so the drop was moderately successful; it killed few SCVs, but stopped mining for a surprisingly long time as Krasi0 cautiously backed away.You can see in the production tab that Randomhammer is expanding and adding units while Krasi0 is producing nothing.

Randomhammer’s drop

Krasi0 may have seen the building starport just before its scout was chased away by marines. In any case, it made goliaths with a few tanks mixed in, a good counter to the air units and vultures which were the only units it had seen indications of. But Randomhammer immediately switched to tanks (it’s a hardcoded tech switch—Steamhammer’s terran and protoss strategy is ultra-simple), and expanded not once, but twice.

Krasi0 delayed its expansion and did not have enough gas to make many tanks alongside the other tech it wanted. With 3 geysers, Randomhammer had greater tank numbers and was able to push through and win despite Krasi0’s superior tactics and unit control. Knowing how to position tanks on high ground is great, but if you have 2 tanks versus 6, it’s not great enough.

Randomhammer’s push

Steamhammer configuration parsing bug

Why doesn’t this version of Steamhammer ever play its 5 pool on SSCAIT? I found a bug in parsing the configuration file.

There’s a bug in parsing a strategy combo which is nested inside another strategy mix. The syntax as I intended to implement it is inconsistent, and the parsing code only partially takes that into account.

In Steamhammer as configured, the effect of the bug is that whenever it should play 4 pool or 5 pool, it plays its default 9 pool speed instead. In other words, there’s not much difference, but it does reduce the bot’s unpredictability a little. In a bot with a different configuration, the effect might be worse.

the fix

If you are using the code, the fix is to make the syntax consistent.

1. In ParseUtils::ParseConfigFile(), make this snippet of code look like this. All you have to do is change "StrategyMix" to ourRaceStr in 2 places.

			// If we have set a strategy for the current matchup, set it.
			if (strategy.HasMember(matchup) && _ParseStrategy(strategy[matchup], strategyName, mapWeightString, ourRaceStr, strategyCombos))
			{
				Config::Strategy::StrategyName = strategyName;
			}
			// Failing that, look for a strategy for the current race.
			else if (strategy.HasMember(ourRace) && _ParseStrategy(strategy[ourRace], strategyName, mapWeightString, ourRaceStr, strategyCombos))
			{
				Config::Strategy::StrategyName = strategyName;
			}

2. Make the matching change in the configuration file. Everywhere it says "StrategyMix", change it to the race of the bot at that point, like "Zerg". It’s redundant, but it’s the same syntax for strategy mixes no matter the context.

strange games

Two strange events.

let’s put the expansion right there

In a game versus Krasi0, Steamhammer decided to go three hatcheries before spawning pool. It’s a greedy opening, a sensible choice against Krasi0’s slightly less greedy opening. Of course, when you’re trying to win by greed you tend to scout late, so when it was time to place the 3rd hatchery, Steamhammer did not know where Krasi0 was. The expansion drone walked past a bunker under construction and started the hatchery in the terran natural.

misplaced hatchery

Steamhammer had the good sense to cancel the morphing hatchery before it died, but still.... Opening build: Failed.

When the enemy base location is unknown, MapTools::getNextExpansion() is supposed to choose the free expansion closest to home by ground distance. It should have chosen the 6 o’clock base, not the enemy natural. It’s a bug.

wait, is this the same game again?

Steamhammer played against Microwave 2 times in the last 2 days: Yesterday’s game and today’s game. Both games were on the map La Mancha, which is a little surprising since there are 15 maps. Both games had the same positions, Steamhammer in the upper left and Microwave in the lower left. OK, it could happen sometimes. And in both games, Steamhammer played its overgas 11 pool opening, a risky opening that it is set to play just under 1% of the time.

That does not happen! This is a coincidence that should come up 1 time in 18,000, more games than Steamhammer has played. Did somebody take control of the random number generator?

Microwave was blue in both games, but Steamhammer got different colors. Whew. The games were similar, as you might expect. Microwave played overpool and was almost but not quite able to capitalize on its earlier zerglings...

zergling advantage

... then lost to the fast mutalisks that Steamhammer got by going gas first.

mutalisk advantage

A third game today between the two bots was completely different. That’s how it’s supposed to work.

MadMix

Did you see the new bot MadMix by Oyvind Johannessen?

As a brand-new bot made from scratch, it has little combat skill. But it is exceptional in that it plays random and makes nearly every unit for every race. I got the impression that it didn’t make protoss archons or dark archons. It doesn’t research anything, so it can’t get units which require research: Broodlings and lurkers. It probably doesn’t know how to make infested terrans, which are complicated to get.

Those might be the only exceptions. It makes high templar, and because it never does research and doesn’t merge them into archons, they are useless. It makes tanks and doesn’t research siege mode. It makes science vessels and battlecruisers. It makes guardians. It makes carriers and 4 interceptors for each, it makes reavers. I didn’t see devourers or arbiters, likely because they didn’t happen to come up. Maybe it leaves out valkyries? It gets all the tech but I haven’t seen it make them.

a mad mix of units

It already deserves the name MadMix!

motivation

Motivation comes from having goals. It’s a long road, and you won’t get far without strong motivation.

Winning is a good goal, but a slow one to reach if you are starting from scratch. People who want early progress often start with a rushbot, which can easily stall an author from improving. Another try for early progress is mass static defense (with some kind of followup), like Johan Kayser. Personally, I expect that authors who can accept slow early progress are more likely to stick with it over the long haul.

Being unique in some way, like MadMix, is a good goal. The bot’s description says “The goal is to find an entertaining mix of units, strategies and madness.”

Providing an inspiring example of a strategy or style of play is a goal that doesn’t demand a long-term commitment. ZerGreenBot raised the level of play of top protoss bots by pioneering potential field-controlled reaver drops, overlord hunting with corsairs, and forge expand build orders, inspiring imitation. Other bots have still not caught up with ZerGreenBot’s zealot bombs, which made IceBot look like a beginner.

All kinds of goals exist. Your goals provide your motivation whether or not you know what they are, but it may help to know.

Arrakhammer

I rather like Arrakhammer. It quickly differentiated itself from its parent Steamhammer and now plays quite differently. And its strategies are logical.

Look how Arrakhammer defeats Wuli: It holds off the raging zealots with mass sunkens and no units, objectively poor but perfect against Wuli. Then it techs up to hydra-lurker. Wuli is unable to cope with the lurkers and falls over.

mass sunkens, no units

XIMP by Tomas Vajda follows the same abstract plan of holding off the enemy with mass static defense and following up with tech units that the opponent cannot cope with. Some similar plan probably works against most non-adaptive bots (it might fail against bots which always make tanks or other siege units). The plan seems so general and effective that I’ve been thinking of coding it into Steamhammer as a use of opponent modeling. When Steamhammer realizes from experience that the enemy bot has a fixed unit mix, it may build mass static defense while it techs up to a countering unit mix.

overhatch versus overhatch

Arrakhammer is based on the previous, 1.2.2, version of Steamhammer, which did not have the overhatch opening yet. But the author has not been shy about looking into the newer 1.2.3 version. Here in Arrakhammer versus Steamhammer on Icarus, Arrakhammer borrows the overhatch opening and tries to tweak it for an advantage over Steamhammer’s variant of the opening.

The openings are identical up to supply 15. Steamhammer spent its first 100 gas on zergling speed, since it was playing a zergling opening. Arrakhammer instead started a lair and added a sunken to hold the zergling pressure. It’s not the natural way to play the opening, but it is a logical attempt to cross up an opponent that is committed to zerglings.

The plan commits Arrakhammer to defense until mutalisks come out, so it brought its zerglings home even before the sunken was started. Steamhammer had made 2 zerglings more (which didn’t matter because they were far away) and Arrakhammer lost 3 as they retreated up the ramp (which did matter). Unfortunately, Arrakhammer defended inaccurately and lost 2 drones, a severe loss. You can see the orange zerglings out of position in the picture. Good defense could have saved all drones.

a defensive mistake

Play was left, but in the next zergling attack Arrakhammer pulled drones too far from the mineral line (a classic Steamhammer blunder) and lost 5 more. After that it was irrecoverable. A picture of the drone blood:

5 drones lost

The opening try was logical and it could have won if Steamhammer had made the mistakes, or had chosen an inappropriate build. Its weakness was that it depended on correct defense. Bots are strong in attack and weak in defense; that is why Steamhammer is aggressive whenever possible. As defense grows stronger, a wider range of strategies will become practical.

Steamhammer repeatedly threw away zerglings trying to approach the sunken and made other mistakes, but its advantage was unbreakable and it finally won by getting mutalisks first.

the end