Bot Aliases

A few of the bots on the SSCAI ladder have names, but are listed under the name of their owners rather than their own names. This is simply a list of these bots, so people will be able to identify them, regardless of which name is used. Other Starcraft AI tournaments (AIIDE and CIG) typically use the bot’s name rather than its owner’s

Martin Rooijackers: LetaBot
Chris Coxe: ZZZKbot (Usually spoken as “Triple Z K bot”)
Marian Devecka: Killerbot
Tomas Vajda: XIMP
Sijia Xu: Overkill
Andrew Smith: Skynet
Dave Churchill: UAlbertaBot (University of Alberta bot. Sometimes abbreviated to UAB)
ICELab: ICEbot (ICELab is a department of Ritsumeikan University)
Soeren Klett: W.O.P.R
Florian Richoux: Aiur
Aurelian Lermant: GarmBot
Simon Prins: Tyr (pronounced as “tear”, as in “teardrop”)
Nathan A David: HadesBot
Bjorn P Mattson: Loki
Oyvind Johannessen: MadMix



We go from one of the weakest bots in the SSCAIT to one of the strongest. Bereaver has by far the most impressive rise to power of any bot, having shot to the top position of the SSCAIT ladder within days of its first game on the 30th of September 2016.

Bereaver’s name seems rather appropriate. It certainly caused significant bereavement as it took the top ladder positions away from the likes of Krasi0 and Iron, and the name also acts as a pun of one of Bereaver’s best used units: the reaver.

Bereaver’s play in many ways resembles that of ZerGreen bot, which was added to the SSCAI ladder only a week before, but with stronger macro, and much better micro of gateway units (and unfortunately no funny BM).

As of the time of writing, Bereaver is in second place in the SSCAIT round-robin, just behind Letabot (Martin Rooijackers).

Bereaver is a strategically very versatile and adaptable bot. It typically begins with a few zealots, then transitions into dragoons as quickly as possible, then builds reavers and high templar when it is safe for it to do so. It buys upgrades such as dragoon range and attack at generally sensible times. For very late game (usually when it maxes out) it transitions into carriers.

Against rush bots, such as ZZZKbot, Bereaver pulls 6 probes to its ramp to block it. While the timing of this pull is often a little off on certain maps, leading to unnecessarily lost mining time, the probes are usually enough to fend off early zerglings, workers and/or zealots until it makes enough units of its own.

This behaviour is determined by scouting information, rather than hard-coded counters for specific opponents, which has both advantages and disadvantages. It means that bots which are altered to play new builds against certain opponents can still be countered, but it means that Bereaver can make strategic errors if its scouting is denied, as Jay Scott reported on his blog that his own bot (Steamhammer) was able to do. Using heuristic based counters rather than hard-coded counters are also often more useful from an AI research perspective, as discussed in one of my other posts.

Bereaver is able to take additional bases, and usually builds photon cannons to help defend them. Its playstyle generally seems to be very defensive when it comes to macro, and it often waits a little too long before taking additional bases, but rarely has problems with getting the bases down, and loses them even more rarely.

Its spending of resources seems slightly weaker than that of most other strong bots, and it will occasionally float a few thousand minerals while still not maxed out. Building additional gateways or robotics facilities and pylons, or simply taking expansions sooner when this happens could help turn this already very powerful bot into an unstoppable one.

Taking bases when it’s not necessarily safe to do so is a risk, but not a significant one when you’ve got minerals to spare – the worst result is effectively equivalent to losing a probe, as the minerals wouldn’t be of more use stagnating for several minutes in Bereaver’s bank than they would going into a building that gets destroyed. On the other hand, the potential benefit of securing another base is significant, as it provides map control, and (in most cases) an extra source of vespene gas, which could help balance the mineral-heavy economy. Cannons, army positioning, or just retreating the probes back to the mineral line of another base would help prevent probe losses, should a risky expansion be attacked after probes have been transferred – anyway, when floating minerals and with 3-4 saturated bases, losing 1 mineral line isn’t the biggest loss. The macro is by no means weak, but it is probably the weakest of Bereaver’s attributes.

Bereaver’s dragoon micro is very strong. Unlike most other protoss bots, it tends to split up its dragoons when they are approached by enemies and have them all kite separately. This spreading makes it extremely difficult for melee or short-ranged units to chase down more than one or two dragoons at a time, prevents the dragoons taking splash damage from tanks and reavers, and means that dragoons with full shields can tank for ones which have taken damage. When there are no enemy units present, the dragoons move together in a group to ensure that they have strength in numbers when they next encounter a threat.

Reavers, as previously mentioned, are also well used. Scarabs are intelligently targeted into groups of units to maximise damage, and the shuttle drop micro is also very effective. Shuttle positioning still needs a little work, as they will often be moved over marines or other anti-air units and shot down, especially while defending, but the drops and pickups themselves are pretty much frame-perfect (though this isn’t really that difficult for an AI).

Most other units are also well used. Storm targeting is quite good, as is zealot positioning, but these are less significant as templar and zealots aren’t usually built in large numbers. I’ve not seen much stargate play from Bereaver other than an occasional corsair used for scouting, so unfortunately I can’t really comment on that.

If you’ve got any of your own ideas or comments about this bot, feel free to post them below. If you’ve got any questions about this bot, I’ll try my best to answer them (though it’s likely I’ll have no idea what the answer is). If Damir Akhmetzyanov comes around here, hi, I hope that my comments are helpful, or at least interesting.

Sungguk Cha

Sungguk Cha is currently one of the weakest bots on the SSCAIT ladder in terms of results, but its play is far more complex than what one might expect. It loses around 4/5 of its games, but its strategy strongly resembles that of bots like Iron which win around 4/5 of their games.

I thought that a bot that on paper looks very strong but underperforms would be a good place to start on my reviews of bots, as it gives me a lot to talk about.

The bot’s strongest asset. It begins with bio, then transitions into mech, with a huge number of vultures backed up with tanks, then builds wraiths. I’ve never seen it, but I wouldn’t be surprised if it’s also able to build battlecruisers and/or science vessels if it can get far enough into its build order. The build strongly reminds me of Iron, Tscmoo and Tyr’s builds from around Spring 2016, when they were the strongest Terrans on the SSCAIT ladder.

Surprisingly for such a weak bot, Sungguk Cha is good at taking expansions at sensible times, and also seems reasonably good at keeping map control to defend them. Even some of the strongest bots (Krasi0, for example) have had problems with taking third bases (admittedly against far stronger opponents than those that Sungguk Cha is able to beat).

However, something that I’ve noticed is common in bots that underperform, includng Cha, is excessive gas harvesting. I’ve seen this bot float over 10,000 gas, while still struggling to mine enough minerals. From what I saw of the bot’s base, its saturation of its mineral lines seems sensible (it uses a few too many SCVs on minerals, if anything), but there seem to be problems with pathing and/or distribution of SCVs between mineral patches.

The strategy is certainly very good, but it does seem a little too vulture-heavy, and a shift to include more tanks or get Starport tech out sooner would help to balance the economy and make the army stronger. Just moving SCVs from gas to new mineral lines when there’s a big surplus of gas would help somewhat.

Probably the main reason this bot underperforms.

A common and serious error of several weak bots that Sungguk Cha makes is not having its army together when it engages. It sieges its tanks across the map rather than together in a group, and when it attacks with vultures it only moves a handful in at a time.

The wide and sparse tank positioning works well as a stalling tactic, allows greater map control which helps prevent harassment, and means the tanks aren’t affected by splash damage. This may have benefits in some situations, but it means that the army invariably loses against other late game armies in a head-on fight.

The massed vultures are used to make a large minefield, which isn’t as neat as that of other bots like ICElab, but is still very effective against bots without detection, and couples with the tanks as a stalling tactic to allow wraiths to get out safely. There does, however seem to be a bug where vultures freeze when enemy units enter their line of sight. I believe this may be the result of vultures being ordered to lay mines and attack the approaching enemies at the same time, or possibly some other clash of contradictory instructions. Whatever the cause, it’s a serious disadvantage when some units don’t move or attack, and simply fixing this could make the bot far more powerful.

I initially believed that Sungguk Cha’s bot did not use kiting micro, but it actually does in some situations. I have seen it kite its vultures against zerglings, but not zealots. This may be related to the previously mentioned “freezing” bug, or it may simply be that kiting has been programmed as a response to zerglings but not zealots.

If you’ve got any of your own ideas or comments about this bot, feel free to post them below. If you’ve got any questions about this bot, I’ll try my best to answer them (though it’s likely I’ll have no idea what the answer is). If Sungguk Cha comes around here, hi, I hope that my comments are helpful, or at least interesting.

Bot Overviews

These Bot overviews are going to cover the specific strengths and weaknesses of all the different bots, how they relate to its performance, and possible solutions. I’m far from an expert coder, but I can understand how bots play, and at least speculate on possible causes for certain bugs and weaknesses.

This is intended as both an information resource for other spectators interested in the play styles of different bots and how they counter each other, and as an outside opinion on how a bot’s weaknesses can best be solved.

I’m going to rate how bots perform in different match ups, and look at macro, micro and strategy and how they work together to define how each bot plays. I’ll also be comparing bots to others which use similar strategies, and try to work out why two bots which look similar on the surface can have drastically different results.

I currently don’t plan on making these overviews in any particular order. I’ll just be writing about bots I find interesting. I do, however, intend to update these overviews as bots are updated, and look at what bugs and weaknesses have been fixed, what new strategies have been introduced, and which new weaknesses (if any) have been created.

Hardcoding vs machine learning.

I’m going to be using this “Ideas for the future” section to discuss the development of BWAPI bots, going over a few ideas about ways the coding and gameplay can change to make the bots more versatile and effective.

Yesterday, a game between Krasi0 and LetaBot (Martin Rooijackers), two of the strongest bots in the SSCAIT, ended with a very surprising result.

Replay link:

Martin had hard-coded a specific counter to Krasi0: an SCV rush. Usually these two would be expected to play late game mech, but this game ended with LetaBot’s victory in just over 3 minutes.

I, and several other people in the Twitch chat were pretty disappointed that we’d missed out on a proper battle – few other bots are capable of using all the units available to them effectively, and matches between two bots which are both able to do this have been rare.

It was certainly impressive to see that a strong bot can be taken down easily if you know how to counter its weaknesses, but it sparked a discussion about whether bots should be allowed to have pre-programmed counters for specific opponents.

I think that it’s better to allow this sort of play, but there are good arguments on both sides.

Bots that are just following a build order aren’t really being intelligent – the bot isn’t the one recognising strategies and adapting to them, it’s the programmer, so hard-coding counter builds is far less useful than building a bot that learns and adapts from the AI-research perspective.

In the long term it should be far more effective to program good decision-making and machine learning, so hardcoding entire builds is in some ways just a waste of time, as it should soon be superseded by heuristic-based bots, then by bots which actually have an understanding of how their opponents play, and can develop their own counter builds.

Some people equated the use of a predetermined counter strategy to cheating. I think this attitude is a little extreme, but it does still seem a little “cheap” to find a small weakness in a good bot and exploit it like this, only revealing that you knew about this weakness when it comes to the bots actually playing each other.

There is a possibility that use of unexpected hard counters will put less emphasis on bots that are capable of solid gameplay. In a worst case scenario, people keeping their builds secret and working on exploiting specific weaknesses in other bots rather than just outplaying them will mean that Brood War AI battles will just devolve into a competition of who can cheese the other bots the hardest. We’ve already seen very powerful bots that specialise in cheese do well over the past few years – ZZZKbot and Stone come to mind. Though these bots are usually fun to watch, I don’t think anyone wants the entirety of SSCAIT to be 4 pools, photon cannons and SCV rushes.

There are benefits to allowing this sort of programming though, at least at this point in Starcraft AI development:

The metagame of AI battles is still developing. When you’ve got up to 10,000 APM, certain strategies which are usually ineffective, even in the hands of Korean demi-gods with up to 600 AMP, are suddenly much stronger: Mass vultures with perfect splits and kiting, 4 or more simultaneous attacks to different bases, tactical retreat of protoss units to avoid taking damage beyond shields, last-frame pickups to prevent projectile weapons from hitting. All of these micro abilities are only limited by programming and the minimum frame rate cap.

The use of custom strategies thought up by programmers is currently much faster and more efficient than waiting for the bots to come up with the strategies themselves, so investing effort into specific builds and counters to them allows the meta to develop. It may turn out that the main strategies used by pros aren’t effective compared to the best builds possible when you know how to use 10,000 APM properly.

When the meta has reached a more stable position, it becomes more practical to work on bots that can learn for themselves. Only at this point will you know whether a learning algorithm will be useful in the long term – a bot might be great at producing counters to the bad positioning and adaptability of most of the bots that currently dominate the meta, but in a few years it might be completely useless, or at the very least, require a lot of reworking. A well made machine learning algorithm should be able to handle various situations, but would likely require more time and processing power than bot programmers currently have access to.

Cheesy builds tailored against specific weaknesses also encourage programmers to make their bots as robust as possible, and remove all these minor weaknesses. Hopefully, the overall long term effects of this will be that bots become more robust and versatile so that they can stand up to many different strategies, rather than that the bots that get cheesed decide to cheese their opponents back.

That said, I would be open to the idea of a Brood War AI competition where the bots aren’t allowed to have preprogrammed build orders, and must learn to play effectively. I wouldn’t even be against the SSCAI changing their rules to prevent bots from choosing specific builds against specific opponents, but there should at least be somewhere that bots with predetermined counters can play each other. Without these cheesy counter builds we’d lose a lot of research potential, and (to my mind more significantly) a lot of the most interesting end entertaining bots.

If you have any opinions or information about the different ways build orders can be developed, or about which you think are most useful for research and/or entertainment value, feel free to share your ideas in a comment.

Starcraft AIs, etc.

Hello, I’m Speedyblupi.

You might have seen me commenting on the Certicky stream for the SSCAIT, or on Jay Scott’s blog.

I’m not sure if this is going to go anywhere, but I intend to use this blog as an information source about the different bots on the SSCAIT ladder, reviewing their strengths and weaknesses. Hopefully this will help programmers improve their bots, and will also be a useful resource for other fans who want to know about the different play styles the different bots use.

For anyone who doesn’t know, the SSCAIT (Student Starcraft AI Tournament) is a competition between AIs, playing the game Starcraft: Brood War. The games run 24/7, and are streamed on the SSCAIT website, and on the owner’s Twitch page. The SSCAIT consists of both a ladder, which runs all year (apart from when the tournament is on), and the SSCAIT competition itself, which is an approximately annual event, consisting of a round robin qualifier and a final knockout bracket.

As of the time of writing, the 2017 edition of the SSCAIT is being played. For some reason the 2016 edition was skipped. We’re just over a third of the way through the round robin phase, and 7 of the 45 contestants seem to be pulling away from the field.