Modelando a tu compañero de viaje: diseñando un juego cooperativo tan divertido en solitario como con amigos
Uno más uno en Fulvinter suman más que dos. Pero… ¿Qué sucede cuando juegas sólo? Pues sucede que en realidad controlas a algo más que tu personaje. En Fulvinter, tanto si juegas sólo como en cooperativo, tu personaje va siempre atado a un compañero.
Este compañero puede ser controlado por la IA o por otro jugador. Bueno lo de controlado por la IA tiene su trampa :)
En este artículo vamos a contar precisamente cuál es la trampa y cómo la hemos implementado.
Making off
Fulvinter desde su concepción se ha diseñado para ser un juego cooperativo que sea casi tan divertido de jugar en solitario, como con amigos. Es una de las ideas centrales del juego y para ello es vital contar con una inteligencia artificial que sustituya a tu compañero de viaje, que no se equivoque y que tome buenas decisiones.
Nuestra primera aproximación fue implementar el comportamiento de nuestro compañero como una IA independiente. Tenemos experiencia en ello por lo que era la solución obvia. Pero pronto nos dimos cuenta de que tener una IA completa en el juego podría no ser divertido. ¿Cuántos juegos habéis jugado donde la IA aliada prácticamente resuelve el juego por vosotros? No nos parecía divertido y además no aportaba nada al jugador individual. Jugar sólo era en realidad jugar menos. Era más aburrido y esto era justo lo que queríamos evitar.
Así que volcamos la mesa, y buscamos un planteamiento diferente. ¿Y si en realidad el jugador controla a los dos jugadores?
Espera, espera… para el carro. ¿Cómo va el jugador a controlar a los dos personajes?
Efectivamente, eso no es posible… directamente. Pero no indirectamente. En realidad, el truco de la IA aliada de Fulvinter es que hace exactamente lo mismo que has hecho tú, salvo que con un retardo. Esto hace que puedas predecir exactamente cómo se va a comportar tu compañero y lo uses a tu favor, bien para resolver puzles o bien para ajusticiar a un enemigo cuando tu personaje ya no estaba allí. ¡¡Ya veréis lo útil que es!!!
Pero… ¿Cómo está implementado esto? Bueno agarraos que vienen algunas curvas, vamos a hablar un poquito de patrones de diseño.
Inicialmente se utilizó el patrón de diseño Command para crear la IA aliada.
Si queréis saber algo más de este patrón aquí tenéis un enlace donde lo explica bastante bien.
Básicamente la IA aliada no era más que una cola de comandos que se iban guardando y que se ejecutaban con un retardo. Cada vez que el jugador realizaba una acción, esta se encolaba y se ejecutaba cuando fuera necesario. Todas las acciones menos el golpeo del martillo que lo realizan simultáneamente jugador y compañero. Pronto nos dimos cuenta de que esto no era suficiente. Y es que ese retardo y que ambos personajes partieran de posiciones diferentes en el mapa, complicaba todo el asunto.
Así que cambiamos de estrategia y planteamos la IA de forma similar, pero en realidad radicalmente diferente. Finalmente, lo que hace tu compañero de viaje es buscar Objetos Inteligentes por el mundo y recibir las ordenes que estos le transmiten.
Los objetos inteligentes se usaron por primera vez en el videojuego The Sims.
No son más que objetos colocados en el mundo, que le dicen a un avatar qué tiene que hacer con ellos. Cuando juegas con tu personaje en single player, tu jugador va creando smart object por el mundo con las indicaciones de lo que tu compañero tiene que hacer. De esta forma, estos objetos están ubicados en una posición en el mundo y no dependen del punto en el que empiece el compañero o de los sucesos que hayan ocurrido por el camino. Y para terminar, los objetos inteligentes procesados por el NPC se eliminan del mundo para evitar que se repitan las acciones.
Esto soluciona el 95% de los problemas que la primera implementación nos daba. Pero no todos. Hay una lista de excepciones donde esta aproximación no funciona correctamente y que son tratados de forma separada. Nos quedamos con una en concreto. Las plataformas móviles.
En este tipo de plataformas, el objeto inteligente no puede ser colocado en posición absoluta, porque la posición en la que el jugador saltó ahora puede ser una posición en el vacío y su pareja para dar un salto de fe.
La posición debe ser relativa a la plataforma. Cuando el jugador entra en la plataforma móvil, los objetos inteligentes redundantes se eliminan y se añade un nuevo objeto inteligente para gestionar el salto sobre la plataforma móvil. Básicamente el smart object realiza las siguientes acciones:
- Saltar desde el último punto válido hasta el centro de la plataforma.
- Mientras esté el player en la plataforma, el NPC permanezca en ella. Cuando el player baje y pise el suelo, el compañero bajará y saltará a la misma posición que el player.
Y así es como hemos resuelto la IA del compañero cuando juegas sólo. Haciendo una IA predecible que puedes utilizar como mecánica jugable. Así pues, sabiendo esto, cuando juegues sólo, está en tu mano usar a tu compañero como parte de tus mecánicas jugables. Seguro que se te ocurre una forma original de usarlo en tu beneficio ;)