


We do this procedure for all attacks in the game, at all distances and with delays of a different number of frames. In more detail: we simulate a strike with a sword and at the same time a strike with a katana, and then we look who will hit whom. Remember how Doctor Strange looked through all the possible outcomes of the battle with Thanos? The collision tables work similarly: a computer calculates the outcomes for each attacking animation at every possible distance in advance. In order for the AI to know exactly how to counter, we came up with collision tables. We distinguish two groups of decisions that the bot has to make: first - when the player is standing, and second - when the player is attacking.

This, by the way, contradicted the fact that for many people, judging by their feedback on the game, the bot was almost invincible. We did not understand this right away, but after measuring the winrate of the players at different stages of the game it became obvious. Of course, we chose this option first, although we later realized that it wasn’t so simple: with our balance of animations, automatic blocks and the variety of special skills, a highly skilled player can almost always find out the necessary tactics and tricks that allow him to defeat the AI. From the developers' point of view, this may be more convenient, because you can pre-design all the features of the bot’s behavior and have a full idea of its final performance in the fights. The second option sounds very attractive: you create a cool AI that beats the players first, and then you mercifully reduce the difficulty of the bot. Use an invincible bot and then weaken it.Use a weak bot, then strengthen it to the desired level with new features.If you don’t want to use a bot that is powered by machine learning algorithms, there are two main other approaches:
