GIST AI Tournament

Yesterday the GIST AI Tournament was played in South Korea. It was organised by the Gwangju Institute of Science and Technology. This tournament was invite-only, with just 5 participants. The tournament featured a round robin with 16 games between every two bots. The detailed results, including replays, can be found on their website. The final standings were as follows:

  1. G-SCAI
  2. Tyr
  3. 5minBot
  4. HjaxAI
  5. CryptBot

As you can see, I managed to get second place! Interestingly, the G-SCAI bot, developed by the Gwangju Institute itself has managed to get first place. This is the first time I have seen the bot play. Versus Terran and Protoss it uses a gateway army with Collosus. Versus Protoss it uses a much simpler proxy Stargate into Oracle harass strategy. I have seen it use a number of quite advanced skills. It can dodge Widow Mine shots using blink. It can shade Adepts into the zerg bases for early game harass. It uses Sentries with Guardian shield. It uses blink to safe low health Stalkers. It also uses a Warp Prism to warp in reinforcements to the front line. The below image shows a fight between G-SCAI and 5minBot.AdeptBotv5minBot.png

My own bot also got to demonstrate a number of cool new tricks.

Gateway Robo build

My bot also has a new gateway + robo build, similar to G-SCAI, although less refined. Depending on the enemy composition it will also switch up what it produces, so for example, against a more Roach heavy zerg, it will build a lot of Stalkers and Immortals, while against a more Hydra heavy zerg it will build more Adepts and Collosus.

One base Stalker

My bot also used a one base Stalker build to great success against G-SCAI. Since their PvP build consists of a one base proxy Stargate, my stalkers were pretty good at defeating that. Sadly I had accidentally turned of the defense of the main base for that build, so my stalkers wouldn’t defend against the Oracle harass. The results is that most games ended up in a base trade, which my bot usually won. There were also instances where G-SCAI defeated my Stalkers, but only after both our Nexuses were destroyed. My bot detected that it had no army and no Probes left, so it GGed. G-SCAI also had very little left though, so if my bot had not surrendered, the game may well have ended in a draw.

Probe rush

I have also implemented a Probe rush. This may sound like a terrible idea, but it turns our that quite a number of the current bots are highly susceptible to it. I won most of my games against HjaxAI with this build. In my own testing, the build also defeated 5minBot fairly consistently, but in the tournament it did not manage it. Perhaps 5minBot’s worker defense has improved.

I very much enjoyed this tournament. I am also looking forward to putting some of my new strategies on the ladder!

Skytoss everywhere!

It seems my bot has inspired some other authors to go for a Skytoss composition. I currently count three others that would fall in that category.

  • GreenBot, which is currently disabled due to bugs, goes for a two base Voidray build, similar to mine, but without the cannons for defense. The lack of cannons allows it to get the Voidrays out faster and it goes for a fairly quick attack. Its lack of defense causes it to lose against more aggressive bots. Below is an image of GreenBot killing the marines of AviloBot. Since AviloBot has little anti-air, GreenBot will go on to beat AviloBot quite easily.GreenBotvsAviloBot.png
  • MEMI goes for two bases and does build cannons to defend. It goes for a single Oracle to harass and then starts building Carriers. Interestingly, this is similar to the Brood War bot XIMP, which inspired my own build. The Carriers are quite strong and it has even managed to get quite a few wins against my bot. Below is an image of MEMI versus CreepyBot, where the Queens are trying to shoot down the Intercepters while the Carriers float at a safe distance.MEMIvsCreepyBot.png
  • RuleMeBot uses mainly Voidrays, but it adds on some Phoenixes and even Tempest! It also does quite well against my bot. Below is an image from a game between him and my own bot. His Voidrays are killing my workers. My own Voidrays just went out to the enemy base where they got taken apart by some more Voidrays and two Tempest.RuleMeBotvsTyr.png

I find it fun to see these bots that play similarly to mine, especially since they each add their own flavor to the Skytoss formula!

Finding a Wall

During the Probots tournament some viewers remarked on the building placement of my bot, in particular my wall off. In this post I will show how I find a suitable wall placement for any given map.

Step 1: Where are the ramps?

From the StarCraft 2 API we get two grids that can help us in finding the placement for our wall. The first tells us which squares on the map are buildable, the second tells us which squares on the map a unit can walk on. The below image shows the buildable areas in white for the map CatalystLE. The areas that are not buildable, but which are walkable are shown in red.Ramps.png

Note that for the most part, the red areas correspond to ramps.

Step 2: Finding the ramp out of the main

First we want to determine the area of our main base itself. to do this we find the area that can be reached from our staring point without leaving any of the buildable area. This area is shown green in the below image.


Now we find all of the squares that are part of a ramp and adjacent to the main area. These are shown in orange in the image above. On maps with a pocket expand, we sometimes have two ramps that lead outside of our main. To make sure we pick the correct one, we find the square with the smallest walking distance to the enemy main. This squares is shown as yellow in the above image. This tells us which ramp leads out of our main.

Step 3: Finding the areas to the side of the ramp

Next we take all the squares adjacent to our ramp that are not pathable. We then determine all other unpathable squares that are within a distance of 5 steps of that original set of squares. See the two blue areas in the below image.


Step 4: Finding the possible placement locations for the Gateway and Forge

We now look for placement locations for 3×3 buildings that are adjacent to these two areas so that we can create a tight walloff. We only accept placements inside the area of our main, which we have determined earlier. The allowed placement locations can be seen in the image below.


Step 5: Choosing the final positions

Finally, from these two sets of possible building locations we choose the ones closest together, provided that the resulting placements do no overlap. Then we choose a location for a Pylon that borders both of these buildings. The resulting locations can be seen below.


The wall looks like this in game:


How generic is this solution for finding a wall?

This solution makes a number of assumptions about the map, such as that there exists a single exit from our main, and that this exit is itself a ramp. It assumes that the exit can in fact be walled off by a Gateway, Forge and a Pylon. In practice most ladder and tournament maps satisfy all of these conditions and a suitable wall is found on all of them. For strange, unconventional maps this method will not work very well, although it should be possible to use it as a basis and take these different features into account.

The current version also does not support walling off with buildings of different size (for instance a Barracks and two Depots, or just three Depots). However it should not be very difficult to adept it so that it can handle these.

Probots finals

The KotN: Probots finals were played last Friday! The finals were between 5minBot and HjaxAI. If you are a subscriber to eschamp, you can watch the games here. These bots played some awesome macro games. Let’s go through them now.

Game 1

The game starts with both bots macroing up. 5minBot tries to do some harass with his reaper, but HjaxAI chases it out of his base with some lings. HjaxAI tries to block 5minBot by burrowing lings at base locations. 5minBot manages to scan and kill the zerglings without much trouble, which impressed me quite a bit. 5minBot tries to do a push with a small bio force with some medivacs and a tank, but HjaxAI is ready with a flood of zerglings and cleans the push up nicely.


At this point HjaxAI adds on some mutalisks and goes on the offensive. The bio army quickly gets overwhelmed by the mass of zerglings. The marines and marauders try to split, but this only allows the zerglings more surface area to attack. A pair of vikings manages to hold the mutas at bay, but the zerglings push into the main with ease. They take out what little defenses remain for 5minBot and HjaxAI takes game 1.

Game 2

The early move out with bio from 5minBot does a bit better this time. It takes out a queen and quite a number of zerglings, but it eventually does get cleaned up. A second push takes out another two queens, but it decides to retreat again. HjaxAI adds on mutalisks to the zergling army and pushes out. Once again the bio stands little chance to the mass of zerglings. Only the third base for 5minBot puts up some resistance. This base is a planetary fortress and it has a single turret to fend of the mutalisks. The mutas seem to be reluctant to attack into the turret, but instead of retreating properly they dart in and out of range taking hits needlessly.


The zerglings try to take down the planetery fortress, but with some scv repair the zerglings don’t get anywhere. The main and natural for 5minBot do not do so well. He simply has no answer to the constant flood of zerglings and ultimately even the planetary fortress falls. Game 2 goes to HjaxAI.

Game 3

This game is on Redshift. 5minBot goes for a planetary fortress at the natural. When HjaxAI comes in with a flood of lings they once again destroy themselves on the planetery fortress. They manage to get it down to a sliver of health, but the repairing SCVs barely manage to save it.


The mutas come in at the pocket expand of 5minBot. The marines do a decent job of holding them off. 5minBot seems somewhat confused about the attacks that come in from both sides. A large part of his army sits in his main base, not quite sure which attack it should defend against. In true zerg swarm fasion, HjaxAI keeps throwing wave after wave of zerglings into 5minBot. For a while this doesn’t seem to do too much, but gradually 5minBot gets worn out. The SCV numbers drop and the army of 5minBot, although it looks large enough that it should be able to handle the attacks, simply does not know what to do. With the resources running out, HjaxAI manages to overrun the defenses and take the third game, winning the tournament.


The ladder has restarted

After a long break, the ladder is back! It is once again running bot matches and now there is also a twitch channel where random replays from the ladder are played 24/7. My bot is also playing and so far it has won all of its 26 matches! This includes matches against such bots as 5minBot and HjaxAI!

Speaking of 5minBot and HjaxAI, they will be playing in the Probots tournament final this Friday on eschamp, so do tune in there for some awesome games!

Probots semi-finals

The semi-finals for the KotN: Probots tournament were played yesterday. Let’s look at the games that were played! If you are a subscriber to the ESChamp twitch channel you can watch the cast here. Otherwise you will have to wait a bit until the games are uploaded to the youtube channel.

AviloBot vs 5minBot

This matchup was the first to give us some nice macro games. AviloBot uses a mech strategy with lots of tanks and some hellions/hellbats. 5minBot plays mostly bio with tanks and medivacs for support.

Game one, both bots go up to three bases fairly quickly. 5minBot tries to do an attack at the third, but despite very little defense from AviloBot, he pulls back before doing any real damage. Next, 5minBot tries to do some drops, but the medivacs get cleaned up easily and 5minBot loses quite a few units in the process. A couple of hellbats sneak into one of the bases of 5minBot and take out a good chunk of SCVs. The army for 5minBot returns home to defend. 5minBot is rather indecisive about attacking, although whenever the armies do meet, it always seems on top. AviloBot never manages to build up a large force. Eventually 5minBot makes a decisive push and destroys the remaining bases of AviloBot.

Game two, AviloBot makes cloacked banshees. It gets quite a few SVCs, but 5minBot makes turrets at its mineral line. The banshees know to stay away form the turrets, however, they keep flying barely inside of range, and slowly get killed. When 5minBot adds vikings the banshees don’t stand a chance anymore. This game, AviloBot does manage to get up a sizable army of tanks. When it pushes out, it dominates the bio forces of 5minBot. It has very little anti-air though, so the vikings of 5minBot stay alive, but they don’t know to land and just fly around uselessly. AviloBot takes the second game and takes the score to 1-1.

Game three, 5minBot starts with an attack at the front and mixes it up with some medivac drops. It does a reasonable amount of damage. Eventually it commits better to its attack and takes out two of the bases for AviloBot. Like game one, AviloBot struggles to get an army up. Eventually the pressure from 5minBot is simply too much and AviloBot gets defeated. 5minBot wins the series 2-1.

HjaxAI vs CreepyBot

CreepyBot is a macro bot that likes to spread creep a lot. HjaxAI, normally also plays a macro style, but for these games he decided to use a different strategy to take CreepyBot off guard. It does a twelve pool, makes a couple of lings and then attacks, taking all its drones with the attack. CreepyBot is totally unprepared for this kind of cheese. The worker defense is weak and it doesn’t manage to get any spine crawlers up. Only game two is somewhat interesting. CreepyBot expands to a distant base and HjaxAI doesn’t manage to scout it. The game ends in a draw and another game has to be played. HjaxAI wins that game as easily as the first and takes the series 2-0.

Next week will be the finals with 5minBot vs HjaxAI. The final wil be a best of 5. I am very much looking forward to what we get to see from these bots. Both bots get a chance to make adjustments for their final match, so we will have to wait to see what they come up with!

Results Round of 8 Probots

The results are in for the round of 8 of the KotN: Probots tournament. I’ll review the matches and the results below:

AviloBot vs MicroMachine

Watch the VoD here. This was the first chance we had to see AviloBot play. It plays a mech style off of one base. MicroMachine plays a 4 rax opening, also staying on one base. AviloBot built a bunker on the top of his ramp, which shut down all aggression from MicroMachine. MicroMachine didn’t really understand it though, and kept suiciding marines up the ramp. AviloBot eaily won 2-0.

m1ndb0t vs 5minBot

Watch the VoD here. m1ndb0t is also a new bot. It builds a proxy pylon with a shield battery. Then it goes for stalkers, immortals and a few adept.

5minBot has had some modifications for the tournament, but it still uses mostly marines and marauders with medivac support. It does now go for an early attack if it determines that the enemy is not going to put on too much pressure.

In game one this happens and the early attack hits m1ndb0t before he has enough units to defend. The victory goes to 5minBot. In game 2 5minBot does not scout that m1ndb0t has built a gateway in his main. According to Archiatrus, the author of 5minBot, this led the bot to believe that m1ndb0t was going for some form of proxy. Because of this, he doesn’t go for the early attack and the game goes on for a little longer. The stalkers are no match for the bio force though. For some reason the immortals all stay in the main base and do not contribute to the fight. They are also killed when the army of 5minBot marches into the enemies base. 5minBot wins the series 2-0.

HjaxAI vs Tyr

The VoD for these matches has not yet been uploaded to youtube. If you are a subscriber of ESChamp you can watch it on their twitch channel, otherwise you will have to wait until they upload it. Here is the match with my bot I have been waiting for all this time.

HjaxAI uses a macro heavy strategy where he quickly goes up to three bases and then masses hydras. Finally it adds a fourth hatch for some extra macro potential. It also makes sure to build lings to defend against early aggression.

My own bot Tyr makes use of two different strategies. With the first strategy is a two base voidray all-in. My bot makes sure to build plenty of cannons at the natural to stay safe against early pressure. If my bot loses with this build it will move on to the next. For the next build it walls itself in on one base with a gateway and a forge. It then builds a ton of cannons and some shield batteries on top of the ramp to stay safe. After that it goes for a combination of DTs and voidrays.

The matches themselves were actually cast in reverse order of how they were played. This makes it somewhat confusing as my bot decides its strategy based on the result of the previous game. I will discuss the games in the order that they were actually played.

Game one my bot went with the two base voidray strategy. The voidrays moved out at about the same time as the hydras did. The meet in front of my base and the voidrays are killed. The hydras move on to the cannons. They are barely held of – sort of – as only one hydra remains, which my bot seems to ignore. When the reinforecements arrive for HjaxAI it is game over for my bot.

The second game my bot decided to switch up its strategy and go with the one base DT, voidray build. The DTs arrive at the third base of HjaxAI before any detection is done. They quickly kill a lot of drones. When the voidrays arrive there are only a couple of queens and hydras, with spores being added on. The defenses are too little to late and the game goes to Tyr.

In the final game my bot sticks with the same strategy. This time, however, HjaxAI builds a ton of overseers right before my DTs arrive. According to the author of the bot, the overseers were supposed to be built every single game, but somehow the bot failed to do so during game two. This time, with the overseers out, the DTs are killed in seconds. The voidrays make the mistake of trying to kill all the lings before anything else. They do not get very far when a couple of hydras come in and kill them. The rest of the game, Tyr keeps slowly trickling in units, and finally dies when HjaxAI move out with his hydras.

HjaxAI wins the series 2-1.

CreepyBot vs CannonLover

The VoD for these games are not on youtube yet either. If you are a subscriber, they come after the HjaxAI vs Tyr matches in the same video as above.

CreepyBot stays true to its name. It is a Zerg bot that likes to cover the map in creep, and it does so at an insane rate. Behind that it goes for a macro focussed roach heavy build. CannonLover also likes to stay true to its name. It uses a cannon rush, although it does not try to kill the enemy with the cannons, but rather puts them in the natural to delay the opponent. After that it goes for a zealot, stalker, collosus army.

Both games played out fairly similarly. CreepyBot takes an early natural. CannonLover builds a pylon next to it. The probe that is supposed to build the cannon gets attacked by a drone and eventually dies. Then CreepyBot kills the pylon with drones. By this point CreepyBot starts spreading its creep. CannonLover doesn’t want to give up on its cannon rush and tries once more. Since there is creep in the way it has to build the pylon a way out. CreepyBot is having none of it and promptly destroys the pylon. Eventually CreepyBot overruns CannonLover with large numbers of roaches. By this point the entire map is covered in creep. CreepyBot wins 2-0.


That’s it for the round of 8. Next week will be semi finals with AviloBot vs 5minBot and HjaxAI vs CreepyBot. I am a bit dissapointed that I didn’t make it to the next round, but we can definitely expect some interesting games. In the meantime, the ladder will soon start up again, so it will be fun to see the new and improved bots battling it out there!