Saturday, January 03, 2015

Una técnica útil para detectar anomalías

Aviso: antes de que sigas leyendo, me gustaría avisar que esta entrada es de un tema puramente técnico, por tanto, si estás leyendo este blog queriendo ver "algo nuevo del juego", ni te molestes en leer lo que voy a contar de aquí en más, porque como ya dije, es puramente técnico.

Estos días estuve trabajando mucho en cosas que tal vez sean un poco aburridas de mostrar. Básicamente estuve corrigiendo muchos casos de borde, ajustando aspectos finos de la jugabilidad y agregando nuevas funcionalidades a los fondos (por ejemplo, objetos animados y capa con efecto "overlay" entre otras cosas).

Aún así, hay algo que me resulta interesante contar acerca de la dinámica de trabajo que estoy teniendo.

Tal vez hayan notado en la animación de la entrada "Profundizando un poco en el gameplay", que hay un pequeño número en la parte inferior, que va creciendo frame a frame. Bueno, ese número es simplemente un contador de frames... pero alguien se preguntó alguna vez "¿para qué?"... ¿que utilidad tiene eso para mí? Justamente... ese es el tema de esta entrada.

En mi framework, cuento con un sistema propio de "replays", lo cual me permite reproducir partidas enteras a mi antojo. Esto es particularmente útil a la hora de encontrar anomalías en el juego. ¿Para que utilizo un contador de frames entonces? La respuesta es muy simple: Para ir directo a los momentos cruciales de una partida. Un ejemplo: Digamos que yo estoy probando mi juego, y sucede algo extremadamente extraño, un personaje se comporta de una manera inesperada, etc... Si no hubiese grabado un replay, no podría ver con exactitud lo que pasó, por tanto tendría que comenzar a suponer muchos casos que pudieron generar dicha anomalía... en cambio, al contar con replays, cada vez que veo una anomalía o simplemente algo "sospechoso", miro el frame en el que estaba... y reproduzco el último replay guardado unos frames antes del momento en el que detecté algo (básicamente, hago que mi framework avance los frames anteriores rápidamente y vaya directo al frame que interesa). De esta forma puedo ver varias veces (o incluso debugear) casos en los que se producen anomalías (muchos de esos casos, por suerte, fueron solo sospechas).

Debo aclarar también, que estos "replays", son más precisamente "input replays", osea que la información que guardan, es solo el input de cada frame, teclado, mouse y joysticks. De esta forma, su peso es bastante ligero... puedo correr el juego desde el principio en un modo especial, que en lugar de obtener el input desde los dispositivos reales, lo obtenga desde el replay mismo, reproduciendo exactamente lo sucedido. Esta técnica es muy usada en emuladores que graban partidas enteras, y yo creo que es prácticamente esencial a la hora de programar videojuegos... además, su implementación es muy sencilla siempre que se haga sobre un framework propio.

0 comments:

Post a Comment