Inteligência artificial no jogo de luta Shadow Fight 3



Os designers de jogos enfrentam regularmente o desafio de criar uma IA interessante. Esse processo pode ser relativamente simples ou extremamente complexo, dependendo das necessidades do projeto e dos objetivos que você persegue. O designer sênior de jogos da Banzai Games , Mikhail Dragovalovskiy, falou sobre sua experiência em IA para o popular jogo de luta móvel Shadow Fight 3.

Diferença entre o SF3 e a maioria dos jogos de luta


A série Shadow Fight foi criada imediatamente com vários recursos que a distinguem de muitos jogos de luta:

  • A presença de autoblocos. Se o personagem simplesmente se move e não ataca, ele bloqueia automaticamente qualquer ataque normal do inimigo;
  • Ritmo e animações mais lentos. Aposte no componente tático: o jogador deve ter tempo para entender que tipo de golpe o inimigo inflige e qual ataque escolher para contra-atacar com sucesso. Isso nos permitiu dar ao jogador a oportunidade de considerar as animações que tentamos fazer da maneira mais bonita e física possível;
  • Colisões honestas. Isso cria situações muito legais nas quais um personagem evita lindamente o ataque do segundo e ataca em resposta, e graças a animações suaves o jogador consegue considerar tudo;
  • Forma de sombra. Quando uma escala especial é preenchida, o jogador pode entrar na forma de sombra e usar vários truques espetaculares que rompem o bloqueio do adversário.

imagem

IA em jogos anteriores da série


Já trabalhamos na IA em nosso jogo de luta anterior - Shadow Fight 2, mas devido à transição para 3D, o aparecimento de colisões entre os jogadores e a adição de uma forma de sombra, conseguimos transferir apenas parte da lógica da IA, e o restante teve que ser recriado.

Por onde começar a trabalhar na IA?


Se você não criar um bot usando o aprendizado de máquina, eu destacaria duas abordagens de capitão:

  1. Faça um bot fraco e depois fortaleça no nível desejado com novos recursos;
  2. Faça um bot invencível e depois enfraqueça.

A segunda opção parece muito romântica: parece que você é mais esperto do que todos e cria uma IA bacana que dobra os jogadores e, em seguida, misericordiosamente reduz a complexidade do bot. Do ponto de vista do desenvolvimento, isso pode ser mais conveniente, porque você pode pensar sobre todos os recursos do comportamento do bot que precisa com antecedência e imaginar completamente o comportamento final.

É claro que escolhemos essa opção, embora tenhamos percebido que tudo não é tão simples: com nosso equilíbrio de animações, bloqueios automáticos e uma variedade de habilidades, quase sempre é possível encontrar as táticas e os abusos necessários que permitem derrotar a IA com uma habilidade alta. Nós não entendemos isso imediatamente, mas apenas quando medimos corretamente a taxa de vitórias dos jogadores em diferentes estágios do jogo. Isso apesar do fato de que, para muitas pessoas, a julgar pelos comentários sobre o jogo, o bot era realmente invencível.

imagem

Como nossa IA funciona?


Gatilhos ou regras de conduta

  • É baseado nas regras sob as quais o bot executa ações aleatórias. Chamamos esse sistema de gatilhos de regras. Por exemplo:
  • O bot olha para a distância entre ele e o jogador e seleciona apenas os hits que ele pode atingir, e então entrega aleatoriamente esses hits;
  • O bot não envia spam com armas;
  • O bot entra na testa com as armas de arremesso do inimigo e então começa a fugir com segurança por algum tempo;
  • E um monte de coisas que um bot deve ou não fazer ...

Se você liberar esse bot contra um iniciante, com um nível igual de bombeamento, o resultado dependerá das armas com as quais os oponentes estão armados. Quem é mais rápido que a animação, ele vencerá. Porque, de fato, ambos pressionam todos os botões, bem, exceto que o bot faz um pouco mais de significado.

imagem

Tomada de decisão

O passo lógico para melhorar a IA é reduzir a aleatoriedade e adicionar um sistema de tomada de decisão que levará o bot à vitória. Para fazer isso, você precisa entender quais decisões estão corretas em que situações. Para lutar, há duas situações que acontecem o tempo todo:

  1. O inimigo está esperando;
  2. O inimigo está atacando.

Existem duas soluções também:

  1. Precisa bater quando garantido bater;
  2. Você precisa bloquear quando eles atingem você e não pode contra-atacar.

Acontece que, para a vitória, a IA deve interromper os ataques inimigos com seus contra-ataques ou bloquear se não puder interrompê-los.

imagem

Tomamos dois grupos de decisões que o bot toma: um - se o inimigo está de pé, o outro - se o inimigo está atacando. Para que a IA saiba exatamente o que combater, criamos tabelas de colisão.

Tabelas de colisão

Lembra como o Doutor Strange olhou todos os resultados possíveis da batalha com Thanos? Da mesma forma, as tabelas de colisão funcionam assim: o computador pré-calcula os resultados de cada animação atacante no jogo a toda distância possível.

Se mais detalhadamente: lançamos um golpe com uma espada e, ao mesmo tempo, um golpe com uma katana, e depois olhamos quem acertará quem. Fazemos esse procedimento para todos os golpes do jogo, a todas as distâncias e com atrasos em um número diferente de quadros (lancei um golpe com uma espada e o inimigo através de N quadros - um golpe de katana). Todos os resultados são registrados em tabelas. Realizamos um procedimento semelhante antes de cada atualização e colocamos os arquivos resultantes após um algoritmo de compactação difícil na forma finalizada na compilação, para não consumir os recursos do dispositivo em tempo de execução. O jogador no cliente já tem uma lista de todos os resultados, o que significa que a IA sabe qual golpe pode neutralizar qualquer golpe do jogador a uma distância específica ou entende que, no momento, a melhor maneira é bloquear o ataque.

imagem

Como resultado, a IA responde efetivamente às ações dos jogadores. Ou seja, eles combateram os contra-ataques. Agora você precisa ensinar o bot a atacar da melhor maneira possível, em vez de acertos aleatórios.

A escolha da distância e o golpe certo

Um leitor atento e inteligente dirá: “Pare !!! Por que se atacar se o inimigo está sempre no bloqueio automático? Precisamos esperar o golpe do inimigo e puni-lo com um golpe rápido, o que interromperá o ataque dele! ” Sim, é, mas um bot que não se move e não ataca sem as ações do jogador parece pelo menos estranho. A IA deve poder escolher hits efetivos para lançar um ataque, mesmo que a estratégia ideal seja jogar contra-ataques. Para isso, desenvolvemos um sistema para escolher a melhor distância e distância percorrida.

Como pensamos: o jogador costuma usar vários golpes favoritos, o que significa que o bot fará especificamente aqueles ataques que não podem ser interrompidos na distância selecionada pelos golpes típicos do jogador. Para fazer isso, nós:

  • Coletamos estatísticas de todas as tacadas do jogador;
  • Examinamos até que ponto temos os contra-ataques mais eficazes contra seus ataques típicos;
  • Passamos essa distância para o bot e fazemos com que ele permaneça nele durante a batalha.

Em teoria, parece legal, mas na prática não foi tão bom: os jogadores raramente ficam ociosos - quase sempre pressionam botões e pressionam o bot, de modo que o bot é mais frequentemente guiado pelo sistema de tomada de decisão com base nos ataques do jogador, em vez de tomar a iniciativa. Portanto, escolher o ataque certo funciona apenas contra jogadores passivos, mas escolher a melhor distância melhorou os contra-ataques - eles se tornaram mais diversos, porque o bot tem mais opções.

Nesta fase, o bot já é bastante eficaz: sabe como iniciar melhor o ataque, sabe quando contra-atacar e quando bloquear. A seguir, falaremos sobre sistemas que permitem definir o nível de complexidade necessário e enfraquecer ou fortalecer o bot.

Ressentimento e perdão

Este é um conceito interessante subjacente ao nosso sistema de balanço. Por meio dele, criamos um nível de complexidade suficiente para iniciantes e profissionais, além de motivar o jogador a usar movimentos diferentes, o que aumenta o interesse e o entretenimento do jogo.

A essência do conceito está no nome: o bot se ofende com os golpes do jogador, que o jogador repete de tempos em tempos. O ressentimento é um contador que reduz a chance de tomar uma decisão subótima e aumenta a chance de a IA realizar um contra-ataque perfeito.

Do outro lado da escala está o perdão - o bot começa a aumentar a chance de escolher soluções não ideais e a reduzir a chance de um contra-ataque se o jogador parar de enviar spam e passar a usar outros hits.

imagem

Se queremos criar um bot complexo, reduzimos a velocidade do perdão e também estabelecemos um alto nível de ressentimento inicial; se queremos criar um bot fraco, o oposto é verdadeiro.

Atraso

Todo bot no SF3 tem um atraso na tomada de decisão. Este é um parâmetro que faz com que o bot pause N quadros antes de escolher uma opção de ação. Uma coisa útil - permite que você crie a aparência que seu oponente pensa. Quanto mais simples o bot que queremos fazer, mais atrasamos.

Verificação de condição

Para tornar algumas partes do jogo mais emocionais, usamos uma verificação dos estados e relacionamentos de várias variáveis ​​do jogo.

Podemos forçar alguns bots a não usarem armas a certas distâncias ou reduzir a velocidade do perdão se um jogador tiver mais pontos de vida do que um bot, ou tornar a IA mais agressiva se tiver poucos pontos de vida.

imagem

Em geral, esse é um complemento que usamos para gerar situações nas quais o bot altera drasticamente seu comportamento e eficácia. Se necessário, restringimos algumas ações do bot em várias situações, por exemplo, é mais difícil para um bot fazer um arremesso do que para um jogador; caso contrário, o jogador nunca seria capaz de lançar um bot, porque as distâncias nas quais o arremesso pode ser aplicado seriam as mesmas e o bot teria apenas tempo para iniciar sua animação mais cedo.

Com base em todos os mecanismos acima, criamos 9 predefinições básicas de IA que usamos em diferentes situações e seções do jogo. Essa abordagem permite alterar o balanço ponto por ponto e medir as alterações.

Resultado


O processo de criação de táticas de bot foi longo. Introduzimos esses recursos gradualmente, e às vezes nossos jogadores sofriam, e depois deles sofríamos, lendo suas críticas e maldições. Quando baixamos as iterações mais recentes das edições, o fluxo de críticas negativas sobre o comportamento dos oponentes parou, o que nos orgulha muito.

imagem

Nossa experiência mostra que novas melhorias no bot com a abordagem atual não oferecem um aumento tangível na qualidade. Portanto, começamos a trabalhar em uma rede neural que simula as ações de um jogador.

Há várias coisas que nos levam a essa decisão:

  1. Estamos desenvolvendo um novo jogo de luta PvP - Shadow Fight: Arena. Sua característica são heróis com táticas muito diferentes, com diferentes habilidades e mecânicas. Fazer um bot realista sob essas condições é muitas vezes mais difícil do que no caso do SF3;
  2. Já temos uma experiência positiva no uso de redes neurais para resolver problemas de animação em nosso produto Cascadeur . Este é um programa para criar animações realistas que usamos em todos os nossos jogos;
  3. Queremos montar uma equipe de especialistas competentes em ML, a fim de aumentar ainda mais nossa experiência nessa área e usá-la para melhorar o Cascadeur e nossos jogos.

A equipe dos Jogos Banzai exige um pesquisador de Deep Learning. Leia mais sobre a vaga aqui .

Source: https://habr.com/ru/post/pt468023/


All Articles