Human vs Bot matches: Zergling rush

Iruian is a Brood War player who likes to help the bot coders with strategic advice. He even has his own bot, Antiga. He also frequently plays against the bots himself. Last week he shared some replays on the BWAPI Discord channel, of him playing against some of the top Brood War bots.

I have uploaded the replays to Google Drive. This post will be about the following games. You should also check out these games. They’re awesome.

In these games, Iruian uses 4-pool, and in one case 9-pool against Krasi0. Krasi0 is a terran bot, and quite possibly the strongest Brood War bot at the moment. It is currently at the top of the SCCAIT Ladder. Iruian manages to win every single one of these games. At this point, you are probably thinking, didn’t you tell us Brood War bots have figured out how to beat rushes? When it comes to other bots, they can reliably beat any rushes. Against a human player, however, they aren’t quite there yet.

This means that bots are inferior to humans, both in their ability to hold of rushes and also in their ability to perform them. I also think that it is quite possible that some bot will figure out how to perform better rushes and beat even the top bots with them.

Here are some skills that Iruian uses to beat Krasi0, which I have not seen a bot use properly:

  • Kill a single SCV or marine and quickly back out before the lings are surrounded by the remaining SCVs.
  • Have different groups of lings go for different goals. For instance, Iruian sends a few zerglings to take out a bunker, while the rest attack and distract the SCVs.
  • Properly judging which buildings are defended by a bunker and which aren’t. There are some bots which will occasionally run some units past the enemy defenses, but very few of them know exactly which buildings are safe to attack and which aren’t.

I would love to see what a bot can do when it knows how to do all of these things. These skills should be very useful outside of rushes as well.

Update on creating my bot

By now you must undoubtedly be wondering when my Starcraft 2 bot will finally join the ladder. I can tell you, I have worked hard on it, but I am still having trouble connecting to the Ladder manager. I am using the dotnet api, however it lacks some functionality that is needed to play on the ladder. I have managed to add what was missing, however I am still strugling with a bug that causes my bot to crash when run by the Ladder Manager.

 
Things are complicated by the fact that I am also having trouble running the Ladder manager itself. Archiatrus has been a great help in testing my bot on his PC and helping me debug. Currently I am building the Ladder manager on my own PC (previously I used a version Archiatrus had sent me). Hopefully that will allow me to run the Ladder manager myself, so I can better debug my bot.

 
I hope I will be able to fix these bugs soon, and my bot will be able to play on the ladder. From that point I can finally work on actually making my bot play a decent game of Starcraft!

Why I picked Protoss

In this blogpost I will explain why I chose Protoss as the race for my Starcraft 2 bot. Protoss has a lot of interesting abilities for a bot to master. A lot of them will be tricky to use properly, but they should also be tricky for the opponent to counter. Let’s look at a list:

Dark Templar
The Dark Templar is fairly easy to use, but can be very annoying to deal with. The Brood War API (BWAPI) allows your bot to ‘see’ where invisible units are. They get to know their position and what type of unit it is. They still need detection to be able to see them.
With the Starcraft 2 API you do not get to know where they are. You can tell that there is a Dark Templar near your units when your units mysteriously start losing large chunks of their health. If you suspect DTs, getting detection at your base and with your army is essential.

Force Fields
I expect that using Force Fields correctly will be very tricky for a bot. When you can use them well, however, there are some interesting things you can do with them. There was the Immortal Sentry all-in during Heart of the Swarm, where you would make a bunch of Immortals and Sentries, drop them in the opponent main and then block the ramp with Force Fields.
Any bot which does not understand Force Fields may find its army locked out of its main, helplessly walking back and forth, while the main is being destroyed.

(Warp Prism) Warp ins
Warping in units near the enemy base can allow a bot to do quick harassments or counter attacks. I would love to try out ways to catch the opponent off guard. The Warp Prism allows you to send in a flood of Zealots or a couple of DTs and do loads of damage. You can even take a peek at the opponents defenses to see if you want to risk it, before commiting the resources to the warp-in.

Disruptor
The huge area of effect damage of the Disruptor can destroy large portions of the enemy army if they are not careful. I expect that Disruptors will prove very strong against most new bots, since they probably lack the skill to dodge Disruptor shots.

Other than these big ones, there are a number of other abilities that could be very fun to experiment with. Just think about Blink, the Adept Shade, Mass Recall and Warp Prism pickup micro.

Protoss just has so many toys to play with, I can’t wait to get started!

XIMP

This post will be about the Brood War bot XIMP by Tomas Vajda. XIMP is an older bot, which hasn’t been updated since 2015. It got second place in the CIG and AIIDE in 2014. It also got second place in the SSCAIT of 2014/2015. Even now, three years after its last update it remains quite strong. So what makes XIMP so powerful?

First let’s take a look at at its strategy. XIMP is know for its iconic use of Carriers. The first thing it will do is build cannons at his natural. Lots of cannons.

XIMP_Cannons

With these defenses in place it will tech up straight to Carriers. It barely gets any other units before the carriers. Then it sends out groups of some four Carriers to destroy the opponent. Depending on what units the enemy has it may add Observers for detection, or Corsairs for more anti-air power.

XIMP_Carriers

On paper, there are some big problems with this strategy. In the first image I count 13 Photon Cannons. Those costs a total of 1950 minerals. Any human player who scouts that many cannons will know that he will be safe from attacks for a very long time. The obvious response would be to expand like crazy and overwhelm him. The better bots indeed know how to do this, or they use some other strategy which they know works.

There are however a lot of less advanced bots which don’t react well. There are the rush bots, which I mentioned in my previous post. These tend to suicide their units into the cannons and then they get wiped out by the carriers. There are some bots which are smart enough to see those cannons and decide to retreat. The retreat code often has problems though. They may not remember the cannons after they are out of their vision, and after retreating their units dive right back in. Some bots wait for a specific number of units before they decide to attack. However as soon as one or two units die they fall below the threshold and retreat again. In the mean time they take a lot of shots.

In fact, one of the first games of Brood War AI I watched was the semi finals of the SSCAIT of 2014/2015. This was a best of three series between XIMP and UAlbertaBot by Dave Churchill. UAlbertaBot repeatedly danced his Zealots in and out of range of the Cannons. XIMP won the series 2-0.

What can we learn from the successes of XIMP? Going for the theoretically better strategy isn’t always the most successful. It is often much better to stick to a simpler strategy and make sure you execute it well.

Brood War vs. Starcraft 2

Today I want to compare the Starcraft 2 AI scene and the Brood War AI scene. The Brood War scene has had many more years to develop so far. The Starcraft 2 AI Ladder currently has 8 bots listed (not counting stock blizzard AI). In comparison, the Brood War AI Ladder currently lists 86 active bots. Starcraft 2 has a long way to go.

So what can we expect for Starcraft 2, based on the history of Brood War? Number one is rushes, lots and lots of rushes! Rushes tend to be the easiest to program and they can often do surprisingly well, even against stronger bots. The SSCAIT ladder has a huge list of bots which do nothing other than a simple zergling rush. Most of these have now been disabled in favor of more varied playstyle.

Other strategies include: Zealot rush, Cannon rush, DT rush, Barracks Barracks Supply (Build two barracks before the first supply depot, preferably mid-map and send all marines directly at the opponent). There are even some worker rush bots, most notably Stone, which is surprisingly effective with its incredible SCV micro.

For the most part, the top bots know how to fend off all of these rushes. Martin Rooijackers, author of LetaBot has even proclaimed the end of rushbots in Brood War. Despite this, some rush bots still manage to claim fairly high places for themselves. WuliBot (Zealot rush) and Neo Edmund Zerg (Zergling rush) both managed to place high during the last SSCAIT.

I expect that for starcraft 2 this will be much the same. I expect there to be a lot of bots with simple strategies at first, but later on I expect the more capable bots to adept. I hope that the experience from the Brood War bots will allow us to get past this point quicker, so we can get to those awesome high level macro games!

Working on the SC2 bot

I am currently working on the Starcraft2 bot. So for progress is slow. I am writing the bot in C# using the .NET API. This project is however lacking some of the basic functionality needed for the bot to run on the ladder. I am adding the functionality myself now, which is a bit slow going since it is written in F#, which I haven’t used before. Luckily Archiatrus and Cryptious have helped me a lot with debugging. Thanks guys! I hope I will be able to fix the bugs soon and have a first version running on the ladder!

Building a Starcraft AI

Welcome to my first blog post! I have decided to start this blog to share my thoughts and experiences with building my Starcraft bot Tyr. This post will mostly be about my experience building a Brood War bot, although I recently started on a Starcraft 2 bot.

I first found out about the Starcraft AI scene at the start of 2015. This was around the time that the SSCAIT (Student Starcraft AI Tournament) streamed its final matches. As a fan of Starcraft and an avid programmer I decided to try my hand at creating my own bot. The end result was the Terran bot Tyr. In the past years I enetered quite a number of tournaments, and usually ended somewhere in the middle of the pack.

Around Januari 2017, after SSCAIT finished, I decided to try for a top spot for the CIG and/ or AIIDE tournaments that would be held that summer. I also decided I would switch race to Protoss, in hopes of surprising my opponents with a bot they had never encountered before. From Januari until the submission deadline for CIG in July I worked hard on my bot. I spent a lot of free time creating new Protoss builds and finetuning my bot against various existing opponents. When the final results for CIG came in I was kind of dissapointed. I finished 13th out of 20 contestants. I had not yet risen above the middle of the pack. Going into the tournament I had thought I had a decent chance to finish high, perhaps even in the top three. However, a lot of other people had put in a lot of effort as well. I later learned that at least two of the other contestants, Chris Coxe (ZZZKBot) and Dan Gant (PurpleWave), had taken more than a month of time off from work to prepare their bots for the tournament. They finished first and third. Despite all the effort I had spent on my bot, others had spent even more effort on theirs. This can be seen in the fact that there were a lot of strong, new bots in 2017 compared to the previous years. The competition has certainly become tougher!

I also entered my bot in the AIIDE tournament, where I finished 9th out of 28. This result was better, but it still wasn’t what I had hoped for, so I lost some of my enthousiasm. I worked very little on my bot between September and December of 2017, but when SSCAIT came around I decided to enter, despite the fact that I had not done any significant work on my bot since the last tournament. To my surprise, my bot did fairly well, ending up in the top eight out of the 78 contestants who entered. Unlike the CIG and AIIDE tournaments, the games of SSCAIT are streamed live on twitch and the final games are even broadcast with commentary. Seeing my bot play matches on stream made the tournament much, much, more exciting than the other tournaments. I finally got knocked out 3-1 by Iron, and I loved every moment of that series. Any author of a Brood War bot who has gone up against Iron will be able to tell you that even taking one game off him is no easy task!

After those results, I am excited to get back into Starcraft AI. I decided, however that I will start on a new bot for Starcraft 2, using the API released by Blizzard last summer. This new AI will play Protoss and I intend to write it in C#. At the same time I intend to keep this blog to detail my progress and share my thoughts on Starcraft AI in general. I expect it will take a while for me to make a decent bot, as I will be starting from scratch. In the mean time I intend to write some posts about both the Brood War AI scene and the much younger Starcraft 2 AI scene.

Thank you for reading and don’t hesitate to leave a comment!