Creating Unbeatable Videogame AI


Super Smash Bros. Melee is a multiplayer fighting game released for the Nintendo GameCube in 2001. For the last decade and a half, it has become one of the premier fighting game eSports, and it is the reason Nintendo still makes a GameCube controller for the Wii U. Smash Melee has an intense following, and for years the idea of an AI that could beat top-tier players at Melee was inconceivable – the game was just far too complex, the strategies too demanding, and the tactics too hard.

[Dan] a.k.a. [AltF4] wasn’t satisfied that a computer couldn’t beat players at Melee, and a few years ago started work on the first Melee AI that could beat any human player. He just released Smashbot at this year’s DEF CON, and while the AI is limited, no human can beat this AI.

The architecture of Smashbot
The architecture of Smashbot

Smashbot isn’t a device with a camera you point at a TV that also plugs into a GameCube – the state of GameCube emulation has advanced far enough that the Dolphin emulator is a perfectly reasonable substitute for a cute little cube. Architecturally, this AI reads the game state from the Dolphin emulator – effectively looking at everything, and only everything, a human player would see. The AI then does its thing, sending button presses to the emulator just like a human pressing buttons on a USB gamepad. There’s nothing in Smashbot that a human couldn’t do, it’s just that Smashbot has superhuman performance.

Although Smashbot will beat any human player, there are a few limitations. Each character in Melee has different capabilities, strategies, and techniques. So far, Smashbot can only play as Fox. That’s not to say Smashbot can’t eventually play as any other character, it’s just that allowing this would require twenty times the amount of work. For similar reasons, and because the stages in Melee are interactive, the only stage Smashbot can play is Final Destination, or the frozen version of Pokemon Stadium. Additionally, because the strategies between characters are a very complex version of rock, paper, scissors, the AI can only play against Marth. It should be noted that in Melee competitive circles, a Fox v. Marth match nearly always means Fox loses. This is the worst possible case scenario for an AI, but if it can win this match, it can do anything else.

The obvious question — and first one asked at the Q&A after the talk — was, ‘what would happen if you make the bot play itself?’. There are two answers to this. Right now, Smashbot is written so it will always pick player two. The short, glib answer is ‘nothing. It can’t do that yet.’

The significantly better answer to the question is much, much more interesting. In short, each AI would choose the best, fastest attack for their character, in this case Fox, and the one-frame Reflector attack chained into ‘multishines’ (it looks like Fox is punching the ground). Since both bots are chaining one-frame attacks together against each other, but no attack will hit, this means the game timer will eventually run out. When that happens, the game goes into Sudden Death, and the stage starts collapsing. If a piece falls on a player, that player takes damage and loses. This damage is ‘random’, but effectively controlled by a random seed in the game, and Smashbot will be able to figure all of this out before the match has begun and try to position itself so it can block all attacks against the other bot, multishine for eight minutes, and wait for the stage to collapse.

That’s not exactly an answer to what would happen if the bot could play against another bot. It would either be the most boring competitive match of Melee ever or the most exciting ever. We just won’t know until [Dan] finishes up Smashbot.

You can check out a video [AltF4] made earlier showing off Smashbot below.