Tower Power: De Hard a Easy

 

La idea de Tower Power siempre fue sencilla desde un principio, tengo personajes que construyen una torre y tienen que defenderse de enemigos para seguir construyendo. Podría entrar dentro de la categoría Tower Defense si se quisiera y de alguna forma me hace acordar al clásico juego "Missile Command". Sin embargo, entre las muchas diferencias que tienen estos juegos hay una en particular de la que les voy a hablar, los personajes y sus disparos, voy a comentar cómo encaramos los problemas que tuvimos cuando estos dejaron de ser tan básicos como aparentan, todo esto desde el punto de vista de desarrollador participe del juego.

Para empezar los personajes no son complejos per se, todos son conceptualmente iguales, todos disparan trepan, construyen, etc... pero el disparo... e ahí la cuestión. Cuando empezó el proyecto los primeros personajes que desarrollamos tenían disparos simples, lanzaban un proyectil que al golpear un enemigo se destruía y fin de la cuestión. Pero llegó un momento en el que tuvimos que implementar personajes nuevos, estos personajes eran especiales comparados a los que ya teníamos y sus disparos causaban efectos diferentes en aquellos enemigos que eran golpeados por los mismos. Ya no era más disparó, acierto y a la bolsa, ahora un personaje podía disparar un proyectil que al golpear un enemigo lo dejaba con estática, y al cabo de unos segundos recibía un rayo que caía del cielo, otro tiraba un cubito de hielo que congelaba a los enemigos para luego ser descongelado o destruido por otra bala. Este tipo de comportamientos fueron el problema principal, cada nuevo efecto que era recibido por un enemigo se aplicaba sobre los demás o al mismo tiempo que el disparo anterior y esto generaba una increíble lista de cuestionamientos, errores, y demases.

 

 "Por las constantes idas y vueltas relacionadas con balanceo del juego, game feel, etc... que cambiaban constantemente el comportamiento y prioridades de las balas, tuvimos que idear una solución elástica que nos permitiera cambiar fácilmente como interactuaban los efectos entre si"

 

Si son desarrolladores se preguntaran ¿Dónde está la dificultad en todo esto? Y la respuesta es: Que los disparos no debían seguir un orden de prioridades ascendente en el que un disparo más fuerte siempre pone su efecto sobre uno de menor prioridad. Es más como un piedra papel y tijeras.

Por este motivo y por las constantes idas y vueltas relacionadas con balanceo del juego, game feel, etc... que cambiaban constantemente el comportamiento y prioridades de las balas, tuvimos que idear una solución elástica que nos permitiera cambiar fácilmente como interactuaban los efectos entre si. Aprovechando el sistema de componentes de Unity desarrollamos pequeño sistema de EffectDealers (Componente que despacha efectos) y EffectRecievers (Componente que recibe los efectos) que al trabajar junto con un grupo de Interfaces ordenaban el comportamiento de las balas y como se relacionaban entre sí.

Es decir el efecto de disparo de fuego es entregado a los enemigos que golpea por un "FireEffectDealer" y cada enemigo al recibir este efecto decide qué hacer con él  usando un "FireEffectReceiver". Si el enemigo es de fuego quizás se hace mas fuerte o es inmune... quedaba todo en nuestras manos o en las manos de los diseñadores.

Este sistema resultó ser tan versátil que con un poco de cuidado se explayo sobre otros elementos de gameplay. Cada elemento del juego tuvo que ser configurado acorde a lo que se necesitaba y surgió la posibilidad de que se den ciertas particularidades ya que al relacionar estos EffectDealers y EffectReceivers;  podíamos saber si un pájaro ya había sido congelado antes y en cuyo caso hacer que una bala de fuego lo descongele en vez de matarlo por ejemplo.

De repente todo resultaba sencillo. Hacer efectos en cadena en los que un pájaro pase algún efecto que recibió a los demás que estén a su alrededor, un pequeño sistema de combos, teníamos registro y control total de que le había pegado a qué y cuándo.

De estar sentados pensando un pequeño sistema de efectos terminamos resolviendo algo que nos facilitaría el desarrollo de muchas cosas más .Al dedicarle tiempo a encontrar la forma en la que vas a resolver las problemáticas de un proyecto y pensar las herramientas que vas a usar podés ahorrarte unos cuantos dolores de cabeza. No se si es mejor sistema para resolver este tipo de situaciones, pero en nuestro caso es definitivamente cómodo y eso tiene mucho valor cuando se trabaja a la par de los Game Designers en un proyecto que cambia, se retuerce y evoluciona constantemente. Cada juego es un mundo, y el mundo TowerPower pasó de ser complejo a sencillo con un par clases y un manojo de interfaces.

 
Gabriel VionComment