archive by month
Skip to content

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.

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!

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.

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....

corsair-dark templar

There are two ways to make headway: You can execute your plan better, or you can execute a better plan. In bot development, I think it’s right to spend most effort on polishing what is already done, or adjusting your plan detail by detail. No matter what plan you follow, you’ll meet a huge number of bugs and weaknesses, and they have to be taken one at a time. All the roads are long.

But tscmoo has fun trying out different plans altogether, and tscmoo is a frequent tournament winner. Isn’t there a connection? When you try something new, your opponents will not be ready for it. And we know of strong plans which no bot tries.

Corsair-dark templar is an example. Sair-DT is for protoss versus zerg: Corsairs chase away or kill overlords in an area, and then the dark templar have free rein. I wouldn’t say that sair-DT is a strategy; it is a class of tactical plans which can be fit into a strategy.

I sometimes see bots with corsair skills clear an area of overlords, but the bots do not seem to realize the opportunity. There is a reason they don’t, of course; sair-DT play requires coordination. The corsairs and the dark templar must be ready at the same time to attack the same location, and they have to work together.

But defending against sair-DT also requires coordination, and bots are liable to be poor at it. Think of what Steamhammer does: It makes hydras and individually chases after each corsair that enters its base, scattering its forces. 4 dark templar, even if detected, could kill the scattered hydras one at a time and slip away safely because the pressure on the corsairs is released. Each unit supports the others; it’s not easy to implement, but by the same token it is not easy to defend against.

Here is a common pattern in human games. Zerg owns the natural and main of some start location. Corsairs are flying about, so zerg makes hydras for defense and holds them in front of the natural and collects overlords there. The hydras defend both bases by ground and defend the overlords, while the overlords detect any DTs that try to sneak past. There is still one weak point. Protoss sends corsairs through the main while at the same time dropping DTs from a shuttle in a far corner. When the sairs see that the defenses are weak enough, the dark templar move in and snipe any drones that don’t escape fast enough, then go to work on buildings. Zerg rushes to defend and will try to scourge the shuttle; if the shuttle lives, the DTs will load back up and get away free, counting their loot. I find it hard to imagine any current zerg bot defending well against such a sophisticated attack.

It was tempting, but I decided not to implement sair-DT myself, because it is too far off my path. Anybody could fork Steamhammer and get coding. Or if you have a protoss bot that already knows corsair skills....

scourge

Why do so few zerg bots make scourge?

A pair of scourge costing 25/75 can kill a wraith or corsair costing 150/100, or even a valkyrie costing 250/125, such a favorable ratio that zerg can afford to lose some scourge along the way. If the enemy flees then the scourge may kill nothing, but to send the enemy running is a victory in itself. If you have a spire, then scourge is a cost-effective part of your air defense and reduces the need for hydralisks or spore colonies to protect overlords and mineral lines. Scourge moves fast, good for scouting, and scourge can intercept drops. Scourge is gas heavy, but zerg usually has more bases and therefore more gas. When facing air units, it is almost always a good idea to have some scourge.

Steamhammer is not skilled with scourge. It maneuvers poorly, failing to attack when it could or losing scourge unnecessarily. It attacks poorly, sending too many to one target and not enough to another. And it doesn’t know the first thing about coordinating scourge with other units. But its opponents are also weak at defending against scourge, and overall I believe that Steamhammer’s scourge is more than worth the cost. In tonight’s game versus Tyr by Simon Prins, Steamhammer scourged science vessels one after another, butting heads with the terran army and holding even—until finally one vessel lived long enough to get an irradiate off, creating an opening for terran to break out. Despite some losses, scourge more than earned its pay, and greater scourge skills might have saved the game.

When I play Steamhammer versions against each other, the fight often comes down to which side lands more scourge hits. Steamhammer does not know that in a muta-scourge versus muta-scourge battle, you commonly want to hit each enemy muta with 1 scourge to leave it too weak to fight on, rather than 2 scourge to kill it (wasting most of the explosive power of the second scourge). If I taught it that....

A zerg with razor-sharp scourge skills would be a terror of the air.

the end of the rushbots: rushes and how to defeat them

Today I have a guest post by none other than Martin Rooijackers, on fast rush strategies and how to beat them. The rest of this post is written by Martin Rooijackers, author of terran bot LetaBot.


This Saturday (28 January) will be the last time that my bot will go for a rush strategy. The reason for this is simple, rush strategies will stop working against almost all the top bots. Already most top bots can hold just about anything you can throw at them off 1 base. There are a few holes in their play that I managed to exploit this SSCAI, but after those are patched, any bot will be forced to expand in order to win a game versus a top bot. In the case of my own bot: even with the suboptimal building placement, it can already hold zergling rushes more than 50% of the time. With that improved, Zerg bots will (almost) always lose if they open spawning pool first.

The only use that rush strategies would have after that would be to defeat a bot that rushes to a resource depot (14 CC, 14 Nexus and 3 hatch before pool come to mind). But you can play slightly from behind and still win with better tactics. So I prefer to go that route.

Anyway, here are the rush builds that are still effective, along with some information as to how to stop them

Worker rush

Bots that used it: Stone (predecessor to Iron bot), LetaBot. Any bot that lets its scouting unit attack the enemy workers.

The earliest rush you can do. You take your worker units and let them attack the enemy base. In the early stages of Brood War AI competitions, it sometimes happened that the scouting worker would attack the workers at the mineral line. Since some bots didn’t have any worker defence code, the scouting worker unit would simply destroy the entire work force of the opponent.

After a while, most bots would pull a worker off the mineral line and send it to attack the scouting worker. The problem with that solution was that the opponent could send more than just the scouting worker to attack the opponent.

An example of this happening in a human vs human game is Idra vs AllAboutYou (in SC2).

The first bot to specialize in the worker rush was Stone by Igor Dimitrijevic. Besides the usual attack move and retreat to repair that LetaBot was capable of before in its worker rush, Stone also prioritized SCVs that were building buildings. It got 3rd place in the SSCAI 2015. However it did get defeated by LetaBot (who had a worker rush strategy in it since its very first tournament in CIG 2014).

In 2016, LetaBot used the same strategy to defeat several bots (BeeBot, XelnagaII, Iron Bot, Krasi0). Krasi0 has already improved its worker defence in its latest version.

There are many ways to stop it. The main key is to keep on building worker units no matter what. After all, with this your production of worker units will be at the same rate as your opponent, ensuring that you will always have numerical superiority with which you should be able to hold easily. Don’t rush for a tier 1 combat unit, that only plays into the hand of the one that worker rushes you.

Terran: Watch the LetaBot vs Stone video above. You simply pull back workers that are on low hp. Just follow the regular build order (9 supply, 11 barracks) and pump marines. You will hold it easily

Protoss: Just like terran, pull back worker units that are damaged. Build a pylon when you have 100 minerals, and a gateway when you have 150. You should have a zealot out before the opponent has a critical mass of worker units.

Zerg: Go for a spawning pool when you have 200 minerals, and build a zergling when you have 50 minerals. If you went for a 4 pool, cancel the pool and build 3 worker units immediately.

Bunker Rush:

Bots that used this strategy: LetaBot

The favorite strategy of Boxer.

LetaBot is known for doing this rush back in 2014. But in the case of LetaBot, it was the proxy 5 rax variant instead of the usual marine rush:

Proxy 5 Rax from Liquipedia

Krasi0 vs LetaBot (2014).

To stop it, you shouldn’t go for a fast expansion, since the bunker rush hard counters such a build order. Pull workers to destroy the enemy bunker. More specifically

Terran: Pull SCVs to destroy the enemy bunker and get a bunker of your own on your ramp.

Protoss: Photon cannons out-range bunkers, so get them up asap in case the opponent managed to finish its bunkers. See Bunker Rush (vs. Protoss) from Liquipedia.

Zerg: Zerg Counter to Bunker Rush from Liquipedia.

Barrack Barracks Supply (BBS)

Also known as a marine rush.

Bots that used this strategy: LetaBot, Tyr

Example, LetaBot vs IceBot in SSCAI 2014.

Liquipedia has more information on this one. See Barracks Barracks Supply.

How to counter it:

Terran: Pull SCVs to force the marines back and build a bunker on the ramp. Terran Counter to Barracks Barracks Supply on Liquipedia.

Protoss: Protoss Counter to Barracks Barracks Supply on Liquipedia.

Zerg: Zerg Counter to BBS on Liquipedia.

4 pool

Bots that use it: ZZZKbot, way too many other ones to list here.

A popular strategy where you try to get zerglings as fast as possible. Could be considered the “Hello World” of Brood War Bot programming.

Example, Iron bot vs ZZZKbot in the SSCAI 2016.

counters:

Terran: Terran Counter to 4 Pool from Liquipedia.

Protoss: either 2 gate zealot, or Forge Fast Expand with 2 cannons and probes to block the opening.

Zerg: open with 9 pool and build a sunken colony if needed.

Cannon rush

Bots that use this: Aiur, Jakub Trancik

Example game AIUR vs Bakuryu (human player).

How to stop:

Terran: Make sure to chase the scouting probe to catch any pylon building in the main base. If outside the main base, build a wall and repair it till tanks with siege mode are out.

Protoss: go for a zealot rush.

Zerg: Go for a spawning pool. Then sunken colony or mass zerglings.

Zealot rush

Bots that use it: WuliBot, Dave Churchill, several other protoss bots

Example game: LetaBot vs WuliBot (Ro8 game 2 SSCAI 2016).

counters:

Terran: Terran Counter to Early Protoss Pressure on Liquipedia.

Protoss: 3 Gate Speedzeal (vs. Protoss) on Liquipedia.

Zerg: An overpool is a safe zerg build vs protoss. See Overpool (vs. Protoss) on Liquipedia.

safe build orders

So, with proper scouting, a bot should be able to stop any rush build if it starts out with a safe build order. There are many choices, but my suggestions for each matchup:

TvT: 2 factory build
TvP: Siege expand with a wall
TvZ: 1 rax FE. Build barracks at 10 supply.

PvP: 2 gate. start out with a zealot before dragoon
PvT: 1 gate Core
PvZ: Forge Fast Expand with 2 cannons, or 2 gate zealot

ZvT: It is usually best to go 12 hatch, but if you expect a rush go for 9 pool and put on pressure to come back from behind if terran plays standard.
ZvP: Overpool.
ZvZ: 9 pool into 1 hatch spire.

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.

Bereaver’s curious weaknesses

Bereaver was reuploaded today, and apparently the new version introduces bugs because its play is worse in obvious ways. Until today Bereaver had been holding the #1 rank with seeming ease. I expect the problems will be ironed out before SSCAIT closes submissions for the tourney!

Even without bugs, Bereaver’s play is curious because it is a top bot, yet some of its weaknesses look simple to fix. Usually the weaknesses of top bots look difficult or time-consuming or at least troublesome to correct. I’ll give a couple examples.

1. Bereaver gets the reaver capacity upgrade, so that a reaver can hold 10 scarabs. Bereaver eventually makes a lot of reavers, so an upgrade makes sense—but the capacity upgrade? The way I see it, the main purpose of the capacity upgrade is to make reavers usable when your hands are too slow. Expert players don’t even use up the normal capacity of 5 scarabs, at least not until later in the game when micro becomes more demanding. It’s normal to send a reaver into the fight with 3 or even 2 scarabs in the magazine, because every scarab is a sunk cost and you never know when the reaver will die. Bereaver invests 200/200 for the upgrade and then builds 5 extra scarabs for 75 minerals more per reaver, and I don’t think it earns any return.

I imagine it would be a 1-line change to order the reaver damage upgrade instead. Instead of more expensive, the reavers would become more lethal.

2. Bereaver makes corsairs against terran, apparently to counter science vessels or dropships. There are times when it could make sense, but mainly on island maps. I have never seen Bereaver’s corsairs pay off in a game against a terran.

Again, it seems like a 1-line change to skip corsairs. It would be a different story if the corsairs used disruption web, but that’s for later in the game and it’s not half as simple.

walls

Walls have a lot of uses in Starcraft. In defense, walls can keep units out of your base, narrow a choke so that it is easier to defend, or create a maze so that units have to take long paths. In offence, walls can trap enemy units to keep them out of the fight or protect your offensive placements. Liquipedia has pretty good articles on walls (see the links at the bottom of the Liquipedia article)—they have almost enough information to design wall-building code.

Here’s how LetaBot walls on Ride of Valkyries. This wall blocks zealots, but the probe can pass between the barracks and the depot. LetaBot can lift or land the barracks to open or close the wall whenever it wants (though in practice it only lifts the barracks once).

LetaBot’s terran wall

Here is a standard protoss wall on Fighting Spirit, from a game between ever)P(Say and linearity. The zealot and probe are stopping up small gaps in the wall so that zerglings cannot get through; if zerglings did get past, they would run by the cannon and into the main. A potential disadvantage of the wall is that zerg can try to bust with hydralisks, killing the wall from outside cannon range before protoss gets storm, which would harm the zerg economy but force protoss to make many cannons.

protoss wall

Another common protoss wall is the pylon wall to hold off vulture harassment, or sometimes to block dragoons or lurkers. Zealots, hydralisks and zerglings can pass through. This one is placed at the outside ramp of a side expansion on Fighting Spirit to stop vultures. Partial pylon walls outside the natural to narrow the choke are standard versus terran. In some locations, pylon walls between a nexus and a cliff partially protect the mineral line against vulture harassment.

protoss pylon wall

Here is a zerg wall. Zealots or dark templar have to circle around the wall to reach the sunken, funneled through a narrow pass. Zerg has different wall designs, often using a hatchery plus an evo chamber or a hydralisk den. Protoss can try to bust with dragoons.

zerg wall

Next: LetaBot’s wall code.

Iron’s runby skill

Back in March, one of my early blog posts was about a game between Iron and Killerbot in which Iron successfully ran by Killerbot’s static defenses with vultures and SCVs and cleaned out the main. At the time Iron didn’t have the skills to seal the win, but it was a promising start.

Soon after, author Igor Dimitrijevic turned off the runby feature. I suppose his development strategy was to get the basics down before adding such a risky skill. But more recently the runby feature is back. I saw Iron do runbys in September already.

Here’s a game played today where Iron rolled Krasi0. Iron opened with two factories making vultures followed by a starport. Krasi0 made a barracks and then immediately expanded behind a bunker. With repair, the bunker can stop most early game harassment. It’s a good opening.

The moment that Iron gathered 3 vultures outside Krasio’s natural, it ran by the bunker and into the main, like so.

Iron runs by Krasio’s bunker

1 vulture was lost in the attempt. The other 2 stopped all mining in the main. Notice the kill count—that vulture got 8 SCVs and 1 newly-made Krasi0 vulture.

Iron’s vultures stop all mining in the main

Meanwhile, wraiths from the starport flew over as they were made and also stopped mining in Krasio’s natural. Krasi0 specializes in defense, but could make only feeble attempts to ward off the attack.

Runbys still rule, especially if you have aggressive micro skills like Iron. Lessons for the defender!

  1. If you see a runby coming at you, you may be able to pull workers to physically block the runby. Then your static defense will drive it off. It’s an advanced skill, though.
  2. You can place buildings to restrict the path for the runby. Krasi0 could have landed its barracks and/or built a depot near the bunker. Stopping runbys is one of the ideas behind IceBot’s building placement. Killerbot also has anti-runby building placement, though it’s not enough in itself to stop a runby.
  3. Krasi0 could have defended better after the runby. The SCVs were too fearful. Krasi0 needed to gather resources and produce defenders to defeat the few attacking units; it’s no use to retreat SCVs at the cost of resources needed to win. In recent years I notice that pros increasingly often leave workers at work when a base is under attack, instead of running them, and I assume that’s their reasoning.

the elimination race

That’s enough data analysis for now. Too much of the same is growing stale. I still want to dig deeper into the SSCAIT data set, but first let’s take a break for a few of my usual ill-founded suggestions. Today a rant: Bots are inefficient at destroying bases.

Here’s a hidden principle that is implicit in Starcraft strategy and only occasionally mentioned: Who wins the base race? If the two armies bypass each other and each races to finish off the enemy base, who wins the game?

I think human players over some low level can answer this question off the cuff in common situations, because it’s basic to decision making. If you can win the base race, then you are free to leave the path to your base open. You have freedom of maneuver and can engage or not as you choose. You can consider whether it’s smart to work your way behind the enemy army. If you are fated to lose the base race, then you have no choice but to engage the enemy to avoid losing. When you are under threat, all you can do is seek favorable ground to make your stand. You are on the strategic defensive, in a sense. You’re not necessarily on the tactical defensive—for example, active forward play like Iron’s blocks the path to Iron’s bases and prevents any base race as long as it stands, and tactically it is aggressive not defensive.

Whether you can win a pure elimination race is only one consideration, of course. Nothing is ever that simple! The more mobile army has more choices. Mutalisks may be fast enough to ravage the enemy workers and still return in time to help defend, especially if the air distance is less than the ground distance. Even in that case, estimating the base race is how you tell when it’s time to return.

For an experienced human it’s easy to know who has the advantage in the base race, but it seems tricky for bots. Zerg has fewer buildings but they’re likely to be split between more bases. Killing a base includes defeating reinforcements produced during the process. The stronger army doesn’t necessarily win the base race; it depends on the situation. A hydra army that loses to the terran infantry army might win the base race because of higher damage rate since medics don’t shoot, but a lurker-ling army that wallops the marines could lose the base race because terran will float buildings while trashing the zerg bases. If it’s close, both sides may try to live longer with hidden buildings, a distant extractor for zerg or a sneak pylon for protoss.

And, of course, bots are not too efficient at killing bases and not too clever with survival tricks.

MassCraft’s tactical search understands base races in principle. I’m not sure whether it’s accurate enough to understand them in practice.

A bot that—one way or another—understood base races and could instigate them at the right times would probably score occasional easy wins. But I expect that the main advantage would be as for humans, knowledge of when you are free to maneuver and when you are forced to engage.

Lesson: If you take away nothing else, take away the idea that rapidly finishing off an undefended base has value. A lot of bots are slow and lazy about it, I guess because it’s “not important.” In reality, even if you’re attacking an undefended expansion and not caught in an elimination race, it’s important to target the key buildings first and destroy everything efficiently. First, you don’t know when enemy reinforcements might show up to interrupt. And second, the sooner the better when it comes to freeing your forces for the rest of the fight.

when the map is mined out

When the map is mined out and the game is not over, the nature of play changes a lot. Bots rarely get that far, of course—almost never. I’ve been trying to think of a bot game I’ve seen where the map was mined out, and I can’t think of one. But I claim that the example is still interesting to bot authors, as least as a sign for the future. Bots will need more flexibility and reasoning ability when they improve and do reach the utter endgame.

Instead of “when the map is mined out,” I should say: When the players run out of resources. There may be plenty on the map, but resources in the ground don’t help when the players can’t mine due to lack of workers, or lack of a command center/nexus/hatchery to return resources to, or lack of air transport to move workers to and from the resources. Horang2 vs Jaehoon in 2012 is an example. I don’t know of any games where both players could mine except that the opponent prevents it, but it is theoretically possible. For example, both players could have dark templar (unable to fight each other without detection) at the last remaining minerals, so that if either player tries to mine, their probes will die. In a mixed example, if the last resources are on an island, one player may be unable to mine due to lack of transport, but could have defenders at the island to prevent the other player from mining too.

As resources wind down, pro players start to get rid of the workers that they no longer need, to free up supply for more military units. They may send SCVs charging into the enemy army to be annihilated. I’ve also seen probes gathered and stormed to death. By the time all minerals are mined, depending on how the game went there may be only a skeleton crew of workers to use up the last banked reserves in construction or repair.

Players will evaluate whether they have winning chances. A player who can’t win, or who is risk-averse, will strive for a fortress that the opponent cannot break. Whether aiming to win or to draw, players will switch toward low-resource unit mixes. A low-resource mix usually includes many spellcasters, especially vessels, queens, and dark archons, but also high templar with hallucination and storm. It also usually includes fighting units that are efficient for whatever reason, tanks (for range and power), lurkers or dark templar (especially if they can stay undetected), hit-and-run units like wraiths that can escape pursuit, and so on. Reavers may run out of scarabs when there are no minerals, but can be worth it if they’re left over from earlier in the game. The mix depends on the situation; if zerg has queens, protoss wants archons that are immune to broodling. Figuring out a good low-resource unit mix for a given endgame is a different skill than figuring out a midgame unit mix.

You need reasoning ability to do this 100% right. If you have only a few buildings left, you have to figure out how to avoid being eliminated, and that controls your whole game plan: The opponent has these possible attacks specifically (I know because I’ve seen their last few units), so I should array my forces like this to have the best chance to ward them off. It’s another case where you want explicit goals that you can reason about.

counters 3 - detection

About detection as a counter—I didn’t find much to say. Get it when you need it, or that is, when you expect to need it (react to the future).

I do have a few general observations. Each race has invisible stuff that’s valuable even when the opponent can detect it. Invisibility is a force multiplier, but wraiths, spider mines, dark templar, and lurkers can remain strong when seen.

Also, detecting invisible stuff is not the only way to cope with it. The area spells nuke, storm, maelstrom, stasis, ensnare, and plague do not care whether units in their area of effect are detected. Maelstrom, stasis, ensnare and plague make cloaked units visible. Only nuke and storm affect underground units. Walling or physically blocking with units can keep dark templar from crossing a choke—they’ll have to fight their way through, gaining time to get detection. Terran spider mines can defend against dark templar without needing to detect them.

how to detect

Every race gets a static early detector (that also provides air defense) plus a flying detector. I assume that the combination static detector + air defense design is intended to balance wraith cloaking.

terran
turretearly
comsatmidgame
science vessellate

Because terran’s mobile detector is late, terrans get comsat for midgame detection. It’s part of the terran “low tech but adaptable” theme. Good opponents know how to exploit terran’s limited comsat energy: For example, dark templar can provoke scans at different places and times and eventually become able to get free hits. The more scans terran spends on cloaked units, the fewer are left to examine your base and your army composition and location.

protoss
cannonearly
observermidgame

The protoss twist is that observers both provide detection and are cloaked.

zerg
overlordearly
spore colonyearly

Zerg gets detection for free with overlords, so the main detection issue is usually whether and when to get overlord speed. For detection purposes, it’s a matter of weighing the safety of overlords and the ability to pre-position them where they may be needed. Whether and when you want to get drop also matters.

what needs detecting

terran
spider minesmidgame
cloaked wraithsmidgame
cloaked ghostslate

Spider mines are so numerous that opponents often don’t try to detect them but force them or sacrifice units to clear them in a hurry.

protoss
dark templarmidgame
observersmidgame
stuff cloaked by arbiterslate

Permanent arbiter cloaking more or less forces terran to get vessels and protoss to bring observers. Zerg usually has overlords all over anyway and doesn’t have much trouble.

zerg
burrowed unitsearly
lurkersmidgame

Burrow traps are rare because they don’t often work, but we do see burrowed hydralisk traps sometimes versus corsair-reaver strategies. And burrowed zerglings for map vision and to delay expansions do appear in human play.

Apparently I have no deep insights into detection, but it was a request so I tried. Maybe it will be of use to bot authors who haven’t mastered the game yet.

counters 2: ground versus air

Today’s topic of ground versus air is more complicated than yesterday’s topic of air versus air, so I don’t go into as much detail. Not that anybody was overwhelmed with details yesterday. It’s all Quite Abstract, ahem, allow me to adjust my spectacles.

Two systems of counters are designed into the game for ground units as a group versus air units as a group.

you need anti-air

The first and most basic system of counters is:

  1. Not all ground units can shoot upward.
  2. Those ground units that can shoot upward are more efficient than air units.

#1 means that as soon as the opponent has wraiths, your tanks need to bring goliaths along with them everywhere, or to stick to places where you can build turrets, or something. In every matchup, you have to worry about air defense. In PvZ, corsairs and not ground units are the favorite air defense, but that doesn’t change the principle.

#2 means that bringing goliaths is all you need. A few goliaths can beat a lot of wraiths, so you don’t have to give up on tanks altogether. Even if the opponent has mass carriers, goliaths are efficient and you can keep tanks. #2 also means that ground units tend to be more important than air units. The more efficient unit can overwhelm the enemy with strength; the less efficient unit will need to win with skill if it can win at all.

You may be surprised how thoroughly and carefully the units are designed so that ground has an advantage over air. 8 unupgraded marines, the same mineral cost as a battlecruiser (and much less gas cost), are about equal with a battlecruiser. 8 marines with stim can easily shoot down a battlecruiser. 2 hydralisks, the same mineral cost as a guardian, can shoot down a guardian. And so on.

air units have countervailing advantages

The second system of counters has to do with properties of air and ground units that hand air units an advantage sometimes, even though air loses head-to-head.

  1. Air units can go anywhere.
  2. Air units stack.

#1 means that air units can outmaneuver ground units to gain a local preponderance of force. They can make hit-and-run attacks, trying to stay a step ahead of the defenders, or to spread them thin so they can be defeated piecemeal, or to convince the enemy to spend on static defense. Ground beats air in a head-to-head fight, so air will avoid that and go for guerilla action until it gets far enough ahead to win straight up.

#2 means that air units can use mass more effectively than ground units. A group of mutalisks can stack up so that they all attack at the same time. If they are picking off marines, then rear marines may be unable to return fire—mutas will try to hit when marines are in poor formation. The same for other air units. This advantage of mass air is why each race has an air splash unit, as I talked about yesterday—the air splash unit means that the defender’s advantage remains even against mass air. Air splash at least forces mass air to scatter and lose its stacking advantage.

Also, every race has an air siege unit that can win the game if unopposed. If the map is mined out and nothing is left but a couple battlecruisers for one side, the cruisers can slowly yamato away static defense and blast down everything else. Protoss has carriers and zerg has guardians. Even when opposed, the long range attacks make cliff positions valuable.

Tomorrow: Detection. Though I haven’t thought of much to say about it yet.

counters 1: air combat units

I got a suggestion by e-mail to theorize about ground, air, and detection. It’s a vague request, but I take it to be about the systems of counters designed into the game, many of which are arranged rock-scissors-paper style: valkyries counter wraiths, battlecruisers counter valkyries, wraiths counter battlecruisers. So, in hope that this will be of use to some people....

Instead of facing the question head on, I’ll start with air as an example. The design of the air combat units in Brood War is more straightforward than the design of the ground units. The terran and protoss designs are closely similar in outline:

terran unitground attackair attack
wraithweakstrongest
valkyrie-splash
battlecruiserstrongstrong

I’m leaving out spell units like science vessels and spells like wraith cloaking. Not to mention all the details that I’m not mentioning.

protoss unitground attackair attack
corsair-splash
scoutweakstrongest
carrierstrongstrong

Each has a ground harass unit with a strong anti-air attack, a splash anti-air unit to counter mass air, and a capital ship that is strong all-around and resistant to direct splash attacks. The difference is that for terrans, the ground harass wraith is cheap and the splash valkyrie is expensive, while protoss has it the other way around, a cheap corsair and an expensive scout. Corsairs counter scouts, scouts counter carriers, carriers counter corsairs—at least notionally. A carrier has base armor 4, so a corsair with attack 5 can barely scratch its hull, but corsairs counter interceptors, which can be as good. Head to head, 1 carrier can easily defeat 4 corsairs which cost more than the carrier and its interceptors. With enough corsairs and a situation that allows them to stand off and attack interceptors, the costs go the other way. The moral is, the outline is only an outline and details count.

“Corsairs counter scouts” is another simplification. Air units stack to attack together (and there’s a limit to how widely they can scatter and still act as a fleet), and air splash damage also stacks. So the anti-air splash units become more cost effective in relation to the enemy as the enemy fleet gets larger. The larger the fleet the harder it can be countered, so the net effect on strategy in terran and protoss matchups is to make ground combat more important, at least until late game when capital ships come out.

The zerg design is different—

zerg unitground attackair attack
scourge-strongest
mutaliskweakweak
devourer-splash
guardianstrong-

—because the strengths and weaknesses are split up differently and have some twists. As suicide units with low hit points, scourge are risky and difficult to use in large numbers, but they’re efficient when they hit. Devourers don’t do splash damage directly but by splashing acid spores, so that devourers become support units—that’s good game design, it means players have to coordinate units. Mutalisks are the only air unit of any race that is both cheap and versatile, and they’re faster than battlecruisers or carriers, but they are countered by scourge and by devourers plus anything that can attack air, and they don’t directly counter any air unit of any race except guardians.

Consider the timings of the anti-air splash units. Corsairs fly early, so terran and zerg should be reluctant to commit to large air fleets vP until late game. Valkyries are later and more expensive, so zerg can harass early with mutalisks vT; scouts are too expensive to be harassment units. Devourers fly late and zerg needs overlords, so opponents vZ can go air if they choose. That and the high mobility of air units is why ZvZ is usually a mutalisk-scourge battle until late game (which is not often reached).

The cross-race unit counters are understandable in outline from these tables plus a little background knowledge: Battlecruisers can one-shot scourge, so scourge counters carriers harder than cruisers. Devourers splash in a way that counters capital ships with their heavy armor, unlike valkyries and corsairs. That’s most of the greater-than/less-than knowledge of counters needed for air-to-air fights. It doesn’t say how much greater than; to code it, you need numbers. Knowledge of counters is about knowing which units to build and which units to send; combat itself ain’t so simple.

The idea of today’s post is to set a point of view. It’s like setting a nail. Now when I get down to it you should know what I’m hammering on.

Tomorrow: Air versus ground, in general terms.