Inteligencia artificial en el juego de lucha Shadow Fight 3



Los diseñadores de juegos se enfrentan regularmente al desafío de crear una IA interesante. Este proceso puede ser relativamente simple o extremadamente complejo, según las necesidades del proyecto y los objetivos que persiga. El diseñador de juegos senior de Banzai Games , Mikhail Dragovalovskiy, habló sobre su experiencia trabajando en IA para el popular juego de lucha móvil Shadow Fight 3.

Diferencia entre SF3 y la mayoría de los juegos de lucha


La serie Shadow Fight se creó de inmediato con una serie de características que la distinguen de muchos juegos de lucha:

  • La presencia de autobloques. Si el personaje simplemente se mueve y no ataca, bloquea automáticamente cualquier ataque normal del enemigo;
  • Ritmo más lento y animaciones. Apuesta por el componente táctico: el jugador debe tener tiempo para comprender qué tipo de golpe inflige el enemigo y qué ataque elegir para contraatacar con éxito. Esto nos permitió darle al jugador la oportunidad de considerar animaciones que intentamos hacer de la manera más bella y física posible;
  • Colisiones honestas. Esto crea situaciones muy interesantes en las que un personaje evade bellamente el ataque del segundo y ataca en respuesta, y gracias a animaciones suaves, el jugador logra considerar todo;
  • Forma de sombra. Cuando se llena una escala especial, el jugador puede ingresar a la forma de sombra y gastar varios trucos espectaculares que rompen el bloqueo del oponente

imagen

IA en juegos anteriores de la serie


Ya trabajamos en IA en nuestro juego de lucha anterior: Shadow Fight 2, pero debido a la transición a 3D, la aparición de colisiones entre jugadores y la adición de una forma de sombra, pudimos transferir solo una parte de la lógica de IA, y el resto tuvo que ser recreado.

¿Dónde comenzar a trabajar en IA?


Si no haces un bot usando machine learning, destacaría dos enfoques de capitán:

  1. Haga un bot débil, luego fortalezca al nivel deseado con nuevas características;
  2. Haz un bot invencible y luego debilítalo.

La segunda opción suena muy romántica: parece que eres más inteligente que todos y haces una inteligencia artificial genial que dobla a los jugadores y luego, afortunadamente, reduce la complejidad del bot. Desde el punto de vista del desarrollo, esto puede ser más conveniente, porque puede pensar en todas las características del comportamiento del bot que necesita de antemano e imaginar completamente su comportamiento final.

Por supuesto, elegimos esta opción, aunque luego nos dimos cuenta de que no todo es tan simple: con nuestro equilibrio de animaciones, bloqueos automáticos y una variedad de habilidades, casi siempre puedes encontrar las tácticas y abusos necesarios que te permiten derrotar a la IA con una gran habilidad. No entendimos esto de inmediato, pero solo cuando medimos correctamente la tasa de ganancia de los jugadores en diferentes etapas del juego. Esto a pesar del hecho de que para muchas personas, a juzgar por sus comentarios sobre el juego, el bot realmente era invencible.

imagen

¿Cómo funciona nuestra IA?


Disparadores o reglas de conducta.

  • Se basa en las reglas bajo las cuales el bot realiza acciones aleatorias. Llamamos a este sistema de reglas desencadenantes. Por ejemplo:
  • El bot mira la distancia entre él y el jugador y selecciona solo los golpes que puede golpear, y luego entrega uno aleatorio de estos golpes;
  • El bot no envía spam con armas arrojadizas;
  • El bot se mete en la frente con las armas arrojadizas del enemigo, y luego comienza a evadirse por un tiempo;
  • Y un montón de cosas que un bot debería o no debería hacer ...

Si liberas un bot así contra un principiante, con el mismo nivel de bombeo, el resultado dependerá de las armas con las que estén armados los oponentes. Quien es más rápido que la animación, ganará. Porque, de hecho, ambos presionan todos los botones, bueno, excepto que el bot lo hace un poco más significativo.

imagen

Toma de decisiones

El paso lógico para mejorar la IA es reducir la aleatoriedad y agregar un sistema de toma de decisiones que lleve al bot a la victoria. Para hacer esto, debe comprender qué decisiones son correctas en qué situaciones. Para pelear hay dos situaciones que ocurren todo el tiempo:

  1. El enemigo espera;
  2. El enemigo está atacando.

También hay dos soluciones:

  1. Necesita vencer cuando se garantiza que golpeará;
  2. Debes bloquear cuando te golpean y no puedes contraatacar.

Resulta que para la victoria, la IA debe interrumpir los ataques enemigos con sus contraataques, o bloquear si no puede interrumpirlos.

imagen

Tomamos dos grupos de decisiones que toma el bot: uno, si el enemigo está de pie, el otro, si el enemigo está atacando. Para que AI sepa exactamente qué contrarrestar, se nos ocurrieron tablas de colisión.

Tablas de colisión

¿Recuerdas cómo el Doctor Strange examinó todos los resultados posibles de la batalla con Thanos? Del mismo modo, las tablas de colisión funcionan así: la computadora calcula previamente los resultados de cada animación de ataque en el juego a todas las distancias posibles.

Si con más detalle: lanzamos un golpe con una espada y al mismo tiempo un golpe con una katana, y luego miramos quién golpeará a quién. Hacemos este procedimiento para todos los golpes en el juego, a todas las distancias y con retrasos en un número diferente de cuadros (lancé un golpe con una espada, y el enemigo a través de N cuadros: un golpe con una katana). Todos los resultados se registran en tablas. Hacemos un procedimiento similar antes de cada actualización y colocamos los archivos resultantes después de un algoritmo de compresión difícil en la forma finalizada en la compilación para no consumir los recursos del dispositivo en tiempo de ejecución. El jugador en el cliente ya tiene una lista de todos los resultados, lo que significa que la IA sabe qué golpe puede contrarrestar cualquier golpe del jugador a una distancia específica, o entiende que en este momento la mejor manera es bloquear el ataque.

imagen

Como resultado, la IA responde de manera efectiva a las acciones de los jugadores. Es decir, contrarrestaron los contraataques. Ahora debes enseñarle al bot a atacar de la manera óptima, en lugar de golpes aleatorios.

La elección de la distancia y el golpe correcto

Un lector atento e inteligente dirá: "¡Alto! ¿Por qué incluso atacarte si el enemigo siempre está en el bloqueo automático? ¡Debemos esperar el golpe del enemigo y castigarlo con un golpe rápido, que interrumpirá su ataque! " Sí, lo es, pero un bot que no se mueve y no ataca sin las acciones del jugador parece al menos extraño. La IA debe poder elegir golpes efectivos para lanzar un ataque, incluso si la estrategia óptima es jugar desde los contraataques. Para hacer esto, hemos desarrollado un sistema para elegir la mejor distancia y huelgas.

Como pensamos: el jugador usa con mayor frecuencia varios golpes favoritos, lo que significa que el bot realizará específicamente esos ataques que a una distancia seleccionada no pueden ser interrumpidos por golpes típicos del jugador. Para hacer esto, nosotros:

  • Recopilamos estadísticas de todos los golpes del jugador;
  • Observamos hasta qué punto tenemos los contraataques más efectivos contra sus ataques típicos;
  • Pasamos esta distancia al bot y hacemos que permanezca allí durante toda la batalla.

En teoría, suena genial, pero en la práctica resultó no tan bueno: los jugadores rara vez permanecen inactivos; casi siempre presionan botones y presionan el bot, por lo que el bot suele guiarse por el sistema de toma de decisiones basado en los ataques del jugador, en lugar de tomar la iniciativa. Por lo tanto, elegir el golpe correcto solo funciona contra jugadores pasivos, pero elegir la mejor distancia ha mejorado los contraataques: se han vuelto más diversos porque El bot tiene más opciones.

En esta etapa, el bot ya es bastante efectivo: sabe cómo comenzar mejor su ataque, sabe cuándo contraatacar y cuándo bloquear. A continuación, hablaremos sobre los sistemas que le permiten establecer el nivel de complejidad requerido y debilitar o fortalecer el bot.

Resentimiento y perdón

Este es un concepto interesante que subyace en nuestro sistema de balance. A través de él, creamos un nivel suficiente de complejidad para principiantes y profesionales, así como motivamos al jugador a usar diferentes golpes, lo que aumenta el interés y el entretenimiento del juego.

La esencia del concepto radica en el nombre: el bot se ofende por los golpes del jugador, que el jugador repite de vez en cuando. El resentimiento es un contador que reduce la posibilidad de tomar una decisión subóptima y aumenta la posibilidad de que la IA realice un contraataque perfecto.

En el otro lado de la escala se encuentra el perdón: el bot comienza a aumentar la posibilidad de elegir soluciones no óptimas y reduce la posibilidad de un contraataque si el jugador deja de enviar correos no deseados y cambia a usar otros golpes.

imagen

Si queremos hacer un bot complejo, reducimos la velocidad del perdón y también establecemos un alto nivel de resentimiento inicial, si queremos hacer un bot débil, lo contrario es cierto.

Retraso

Cada bot en SF3 tiene un retraso en tomar una decisión. Este es un parámetro que hace que el bot pause N cuadros antes de elegir una opción de acción. Una cosa útil: le permite crear la apariencia que piensa su oponente. Cuanto más simple sea el bot que queramos hacer, más demora lo estableceremos.

Verificación de condición

Para hacer que algunas partes del juego sean más emotivas, utilizamos un control de los estados y las relaciones de varias variables del juego.

Podemos obligar a algunos bots a no usar armas arrojadizas a ciertas distancias o reducir la velocidad del perdón si un jugador tiene más puntos de golpe que un bot, o hacer que la IA sea más agresiva si tiene pocos puntos de golpe.

imagen

En general, este es un complemento que utilizamos para generar situaciones en las que el bot cambia drásticamente su comportamiento y efectividad. Si es necesario, restringimos algunas acciones del bot en diversas situaciones, por ejemplo, es más difícil para un bot hacer un lanzamiento que para un jugador, de lo contrario, el jugador nunca podría lanzar un bot, porque las distancias a las que se puede aplicar el lanzamiento serían las mismas, y el bot solo tendría tiempo para comenzar su animación antes.

En base a todos los mecanismos anteriores, hemos creado 9 preajustes básicos de IA que usamos en diferentes situaciones y secciones del juego. Este enfoque le permite cambiar el equilibrio punto por punto y medir los cambios.

Resultado


El proceso de creación de tácticas bot fue largo. Introdujimos estas características gradualmente, así que a veces nuestros jugadores sufrieron, y después de ellos sufrimos, leyendo sus críticas y maldiciones. Cuando descargamos las últimas iteraciones de ediciones, el flujo de críticas negativas con respecto al comportamiento de los oponentes se detuvo, de lo cual estamos muy orgullosos.

imagen

Nuestra experiencia muestra que las mejoras adicionales al bot con el enfoque actual no dan un aumento tangible en la calidad. Por lo tanto, comenzamos a trabajar en una red neuronal que simulará las acciones de un jugador.

Hay varias cosas que nos empujan a esta decisión:

  1. Estamos desarrollando un nuevo juego de lucha PvP: Shadow Fight: Arena. Su característica es héroes con tácticas muy diferentes con diferentes habilidades y mecánicas. Hacer un bot realista en estas condiciones es muchas veces más difícil que en el caso de SF3;
  2. Ya tenemos experiencia positiva en el uso de redes neuronales para resolver problemas de animación en nuestro producto Cascadeur . Este es un programa para crear animaciones realistas que usamos para todos nuestros juegos;
  3. Queremos reunir un equipo de especialistas competentes en ML para aumentar aún más nuestra experiencia en esta área y usarla para mejorar Cascadeur y nuestros juegos.

El equipo de Banzai Games requiere un investigador de aprendizaje profundo. Lea más sobre la vacante aquí .

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


All Articles