Microhistorias: la pantalla de la muerte (kill screen) de otro juego clásico, Galaga, y como superarla

Galaga

Galaga, foto Wikipedia

La mayoría de juegos clásicos arcade tienen su propia kill screen. Normalmente aparece cuando hemos llegado a un nivel 255 y pasamos al 256, dando en casi todos los casos errores del tipo overflow con resultados inesperados y muy curiosos. En CyberHades ya hemos hablado de algunas como la del mítico Pac-Man y Donkey Kong. Pero lo mejor es que hay gente muy geek que no se ha conformado con llegar a estas pantallas y ver qué ocurre, también han encontrado soluciones a nivel de código (la mayoría modificando el emulador MAME) para poder superarlas.

Hoy vamos a hablaros de otro caso con un juego mítico, Galaga.

Todos conocemos el mítico arcade llamado Galaga que David Lightman (Matthew Broderick) jugaba en la genial película "Juegos de Guerra":

Llegar al nivel 255 no es nada fácil, pero gracias a un truco que se puso de moda en los años 80, podías conseguir que las naves enemigas a partir de un punto, no dispararan más. Por lo tanto, con un poco de paciencia era más fácil llegar al último nivel del juego.

Al llegar al nivel 255 y superarlo, se producen algunas kill screen diferentes. Digo diferentes porque estas kill screen van en función del nivel del juego que se haya configurado previamente en la máquina. Por ejemplo, si está configurada para nivel "fácil", al llegar al stage 0 ocurre una mezcla entre el segundo nivel de desafío (en Galaga existen niveles especiales llamado "challenging stages" o "niveles de desafío" donde los enemigos no disparan y si los destruyes obtendrás bonos de puntos) y un nivel normal del juego. En el nivel difícil, al llegar al stage 0 sólo aparece el letrero indicando el nivel 0 y no pasa nada más. (no salen más enemigos). Y en el nivel más difícil de todos el stage 0 se juego igual que si fuera el stage 1 pero con nivel 255.

Aquí puedes ver un vídeo con lo que ocurre al llegar al nivel 256 a nivel medio:

Pero como buenos geeks, no nos conformamos con saber que existe una kill screen en Galaga, queremos también saber por qué ocurre. En el código fuente original del juego existe una subrutina que determina cuantos enemigos tienen que aparecer en función del nivel y la dificultad. Estos datos se almacenan en dos tablas, una con la información  para los niveles normales y otros para los niveles desafío. Y aquí está el error. Esta subrutina no contempla el valor 0 (¿olvido de los programadores o intencionado?, recordemos que en aquella época las empresas de videojuegos nunca pensaron que los usuarios pudieran llegar a esos niveles) y por lo tanto cuando debería recibir un valor entre 0 y 16, lo que recibe son valores entre 0 y 255 lo que provoca errores en cadena y datos extraños en las tablas que utiliza la subrutina. Las tablas entonces apuntan a otras direcciones de memoria provocando varios bugs. Esta es también la razón por la cual dependiendo del nivel, el bug o glitch varía (este error se parece mucho a la pantalla partida de Pac-Man).

GalagaErrorPseudoCode

Las soluciones propuestas (el autor de la entrada original nos ofrece dos) las podéis ver su blog:

http://donhodges.com/

Espectacular análisis que no te puedes perder, así de paso repasas algo de ensamblador ;)

Fantástico mundo este de las kill screen y sobre todo de sus soluciones, seguiremos buscando.

Trucos para Galaga

Una partida Galaga hasta el nivel 255 (primera parte).

Galaga online (por si te han entrado ganas de jugar)