Penguin Adventure

Un MegaROM Konami4 de 128 KB de 1986, la continuación de Antarctic Adventure. Veinticuatro fases, una tienda, una máquina de apostar y dos claves de teclado escondidas.

Konami · 1986 · Cartucho RC-743, 128 KB · MSX1 · Konami4, sin SCC · Volcado 525608aa…

Aquí no hay ni una captura de pantalla. Las pantallas están dibujadas ejecutando en Python las mismas rutinas que el cartucho ejecuta en el Z80: su descompresor, su pintor y su pintor con máscara. Lo demás —el listado y las cifras— sale del binario y se reproduce con make.

El juego en cifras

100 %del binario explicado
830etiquetas con nombre
44,7 %de las instrucciones, comentadas
0rutinas por debajo del 10 %
32.317bytes de código
98.755bytes de datos

Lo que aparece al desmontarlo

El final bueno depende de cuántas veces pauses

El hallazgo es de Manuel Pazos, que lo contó en una charla; lo que aporta este desensamblado es dónde está escrito y la regla exacta. p02:81EE sube un contador cada vez que se entra en pausa, y al acabar la fase 24 p02:82DE mira sus dos bits bajos y les resta uno: si queda cero, la princesa sale viva.

O sea que hay que haber pausado 1, 5, 9, 13… veces —el resto de dividir entre cuatro tiene que ser 1— y no pausar nunca da el final malo. La cuenta sobrevive a perder una vida, pero el CONTINUE la borra. Los dos textos están en la ROM: YOU HAVE SUCCEEDED IN RESCUING THE PRINCESS y YOU HAVE FAILED TO RESCUE THE PRINCESS.

Dos claves de teclado: NORIKO y KAZUMI

Se teclean en la pantalla del título y encienden el CONTINUE, que sin ellas no existe. p02:9522 vigila NUEVE teclas con SNSMAT de la BIOS y guarda las seis últimas pulsadas en una cola; p02:9634 las compara con dos patrones de seis bytes. Y las nueve teclas vigiladas —A, I, K, M, N, O, R, U y Z— son exactamente las letras que hacen falta para escribir esos dos nombres y ninguna más.

Las dos no hacen lo mismo: NORIKO deja 0xFE en 0xF0F7 y KAZUMI 0xFF, y con 0xFE justo el borrado del fin de partida se salta 143 bytes, así que NORIKO además conserva lo que se lleve encima.

La cereza es el símbolo más probable y el único que cuenta suelto

Los rodillos de la máquina de apostar sacan su símbolo del registro R del Z80 —el contador de refresco de memoria— enmascarado a cuatro bits, y con ese índice leen la tabla de dieciséis de 0x7B34. La cereza ocupa cinco de las dieciséis casillas: 31,2 % por rodillo, y al menos una en el 67,5 % de las tiradas.

Y el reparto de premios de p01:7AF0 la trata aparte: por cada rodillo que saque cereza sube un contador, y los tres primeros multiplicadores de la tabla son 1, 2 y 4. Los demás símbolos sólo pagan si salen los tres iguales: ×8, ×10, ×15, ×20 y el premio gordo. Es la regla clásica de las cerezas, escrita en el Z80.

Santa Claus regala, y el tendero enfadado cobra el doble

Caer en el centro de una grieta de modo 3, 4 o 5 (p01:72F2) abre la tienda, y el modo es el tendero. Los tres venden lo mismo —la lista de siete de la fase, 0xAF90— pero cada uno con su tabla de precios: la normal (0x6FD5), la del doble (0x6FE5, salvo el artículo 7, que sube de 17 a 32 y no a 34) y la de Santa Claus, que está a cero (0x6FF5) y cierra la tienda tras la primera compra (p01:6F09): regala una cosa. Son 41 tiendas en 18 fases: 18 normales, 20 caras y tres de Santa, en las fases 6, 12 y 21.

Y cada tendero habla: MAY I HELP YOU? GET WHATEVER YOU LIKE., HEY YOU! YOU MUST BUY SOMETHING FROM ME!! y WELCOME! I WILL GIVE YOU A JEWEL.; al pulsar END se despiden, el enfadado con un BUY MORE! WAIT! DAMN IT!!. Las seis pantallas están dibujadas desde las tablas y cotejadas contra 14 volcados de openMSX: cero diferencias.

Seis atajos, escondidos en grietas

El guion de avisos de 0xB046 convierte en grieta la cosa que sale tras su distancia y le pega dos bytes: el modo y la lista. Con el modo 2, caer dentro y pulsar abajo (p02:999C) lleva al WARP, una carrera de 0x150 pasos por el decorado 9, y al acabar p03:B94A lee el registro de 17 bytes de 0xB79B que escoge la lista y suma fases. Son seis: de la 1 a la 6, de la 6 a la 9, de la 9 a la 12, de la 13 a la 15, de la 15 a la 18 y de la 18 a la 21, medidos los seis en openMSX. Y en el mapa de antes de cada fase salen como caminos de puntos (0x8D85).

Veinticuatro fases, no trece

Los trece son lo que el cartucho le declara al Konami Game Master en su segunda cabecera, la de 0x4010. El juego dice otra cosa: p02:8328 compara la fase con 0x19 y las tres tablas de guion —terreno, enemigos y el tercero— cierran en 24 entradas justas. Y la partida del LEVEL 2 es otro diseño entero, sin un solo tramo igual.

El tiempo corre aunque no se ande

0xE08B no es el largo de la fase: es el tiempo. p02:922D le quita uno cada 32 cuadros se ande o no se ande, por debajo de 0x15 pita un cuadro sí y otro no, y al acabar la fase p02:94D1 lo cambia por puntos de 0x20 en 0x20. Lo que va bajando con el terreno es otra cosa, 0xE08D, y de ella salen los nueve cortes del final de fase.

De ahí que el objeto de p03:B31E, que le suma 0x50 en BCD, no alargue el recorrido: da tiempo extra. Es lo único de todo el cartucho que toca ese contador después de montada la fase.

Las curvas se leen, pero el ángulo se calcula

La circunferencia de 24 pasos y la parábola de 32 están escritas en la ROM y se leen. Pero para apuntar al jugador el banco 9 hace trigonometría de verdad: p09:ACE3 es una división de 16 entre 8 bits a base de restar y desplazar —el Z80 no tiene div— y p09:ACBA una arcotangente que busca el cociente en una tabla de ocho tangentes en formato 8.8, de 11,25 en 11,25 grados. El ángulo sale en las 256 unidades de circunferencia de la casa.

Cambia de banco con las interrupciones abiertas

Y con semáforo en 0xE005. Ningún trazador estático lo sigue: de ahí salían 14 KB inventados en los bancos 12 y 13, que hubo que declarar a mano. Con el relleno 0xFF de la cola de un banco pasa algo parecido: 0xFF es rst 38h, así que el trazador se salía al banco vecino por la puerta de atrás.

Lo que dibuja

Ninguna de estas imágenes es una captura: las dibuja tools/graficos.py desde la ROM.

La pantalla del título japonesa, montada con los pasos del propio cartucho: el guion 0xB5A8 del banco 6 en los tres tercios de la tabla de patrones, los sprites de p07 0x9846 y los rótulos de p13 0xBAB2.
La pantalla del título japonesa, montada con los pasos del propio cartucho: el guion 0xB5A8 del banco 6 en los tres tercios de la tabla de patrones, los sprites de p07 0x9846 y los rótulos de p13 0xBAB2.
Y la del resto del mundo. El cartucho elige una u otra con el byte de país de la BIOS (0x002B): la diferencia es UN guion de más, el 0xA463, que sólo toca el rótulo.
Y la del resto del mundo. El cartucho elige una u otra con el byte de país de la BIOS (0x002B): la diferencia es UN guion de más, el 0xA463, que sólo toca el rótulo.
El pingüino, de espaldas y en negro, con las poses de la tabla de 0xA91D sobre los patrones que carga cada terreno. De arriba abajo: en tierra, en el hielo, nadando (la pose 10 y una espuma que alterna cada 16 cuadros, p02:9A1D), bajo el mar (poses 7, 8 y 9) y en el espacio, con los colores que le pisa p03:A778.
El pingüino, de espaldas y en negro, con las poses de la tabla de 0xA91D sobre los patrones que carga cada terreno. De arriba abajo: en tierra, en el hielo, nadando (la pose 10 y una espuma que alterna cada 16 cuadros, p02:9A1D), bajo el mar (poses 7, 8 y 9) y en el espacio, con los colores que le pisa p03:A778.
Los diez bichos de los guiones de las fases, cada uno en sus cuatro tamaños y, si aletea, en sus dos pasos, con su clase y las fases que lo sacan. El de la clase 7 no se ve: p09:B8B3 le da el color 0 salvo que se lleve 0xE16A.
Los diez bichos de los guiones de las fases, cada uno en sus cuatro tamaños y, si aletea, en sus dos pasos, con su clase y las fases que lo sacan. El de la clase 7 no se ve: p09:B8B3 le da el color 0 salvo que se lleve 0xE16A.
El dinosaurio que cierra cada tres fases, en los cinco tamaños con que se acerca: las tiras de 0xA76B que p01:6697 copia a 0x20, 0x10, 5, 2 y 0 de la meta. El color lo escoge el decorado.
El dinosaurio que cierra cada tres fases, en los cinco tamaños con que se acerca: las tiras de 0xA76B que p01:6697 copia a 0x20, 0x10, 5, 2 y 0 de la meta. El color lo escoge el decorado.
La pelea, el estado 7: caen los cuatro bloques, el dinosaurio lanza (0xB212) y a los veinte aciertos el hielo se agrieta y se hunde (0xAE0A, 0xADA2, 0xAB60). Debajo, sus nueve dibujos de 0xA842: tres pasos por tres lados, porque mira hacia el pingüino.
La pelea, el estado 7: caen los cuatro bloques, el dinosaurio lanza (0xB212) y a los veinte aciertos el hielo se agrieta y se hunde (0xAE0A, 0xADA2, 0xAB60). Debajo, sus nueve dibujos de 0xA842: tres pasos por tres lados, porque mira hacia el pingüino.
Las escenas de p03:AA80: el árbol tras la fase 12 y, tras la 24, el final bueno y el malo, con sus mensajes. Pantallas de 32 columnas del banco 13 pintadas del centro hacia fuera; en el final malo, la pieza de 0xB963 ocupa el sitio de la princesa.
Las escenas de p03:AA80: el árbol tras la fase 12 y, tras la 24, el final bueno y el malo, con sus mensajes. Pantallas de 32 columnas del banco 13 pintadas del centro hacia fuera; en el final malo, la pieza de 0xB963 ocupa el sitio de la princesa.
El mapa de antes de cada fase: el camino andado en rojo, el pingüino en la fase de ahora y los atajos cogidos como caminos de puntos (p02:8AEC, 0x8FE7, 0x8D85).
El mapa de antes de cada fase: el camino andado en rojo, el pingüino en la fase de ahora y los atajos cogidos como caminos de puntos (p02:8AEC, 0x8FE7, 0x8D85).
Lo que se mueve en las escenas: el pingüino entra de espaldas y sube una fila cada cuatro cuadros (p03:ACE6); en el árbol cae y rebota la manzana (0xAD88), en el final bueno salta (0xADBA) y en el malo llora (0xADD7 y 0xADEF).
Lo que se mueve en las escenas: el pingüino entra de espaldas y sube una fila cada cuatro cuadros (p03:ACE6); en el árbol cae y rebota la manzana (0xAD88), en el final bueno salta (0xADBA) y en el malo llora (0xADD7 y 0xADEF).
El espacio, el bonus: la Tierra, el pingüino y los meteoritos, que son cosas hechas de caracteres (0x15 a 0x19) con dieciséis dibujos que crecen hasta salirse por un lado.
El espacio, el bonus: la Tierra, el pingüino y los meteoritos, que son cosas hechas de caracteres (0x15 a 0x19) con dieciséis dibujos que crecen hasta salirse por un lado.
El WARP, el decorado 9: una grieta de modo 2 pulsando abajo lleva a esta cueva y de ahí a otra fase. Son seis atajos: de la 1 a la 6, de la 6 a la 9, de la 9 a la 12, de la 13 a la 15, de la 15 a la 18 y de la 18 a la 21 (0xB79B).
El WARP, el decorado 9: una grieta de modo 2 pulsando abajo lleva a esta cueva y de ahí a otra fase. Son seis atajos: de la 1 a la 6, de la 6 a la 9, de la 9 a la 12, de la 13 a la 15, de la 15 a la 18 y de la 18 a la 21 (0xB79B).
Las tres tiendas escondidas, el estado 12: el tendero de siempre, el que cobra el doble y Santa Claus, cada uno con su saludo (0xB038, 0xB065 y 0xB0DD) y, debajo, su despedida al pulsar END. Los artículos y los precios salen de la lista de la fase (0xAF90) y de la tabla del tendero (0x6FD5, 0x6FE5 y 0x6FF5); la bolsa de la izquierda sólo sale con puntos.
Las tres tiendas escondidas, el estado 12: el tendero de siempre, el que cobra el doble y Santa Claus, cada uno con su saludo (0xB038, 0xB065 y 0xB0DD) y, debajo, su despedida al pulsar END. Los artículos y los precios salen de la lista de la fase (0xAF90) y de la tabla del tendero (0x6FD5, 0x6FE5 y 0x6FF5); la bolsa de la izquierda sólo sale con puntos.
Los dieciséis artículos, dibujados con los caracteres del marcador (0xB71B, cuatro por artículo desde el 0xB2), con su precio normal y el caro. El 14 y el 15 no los vende nadie: son los premios de los secretos de la fase 6 (p03:BE7D) y de la 13 (p03:BEC0).
Los dieciséis artículos, dibujados con los caracteres del marcador (0xB71B, cuatro por artículo desde el 0xB2), con su precio normal y el caro. El 14 y el 15 no los vende nadie: son los premios de los secretos de la fase 6 (p03:BE7D) y de la 13 (p03:BEC0).
Los peces con alas que se cogen en el espacio, en los dieciséis pasos de la lista de 0xA545. Debajo, los dos colores entre los que salta el que da una vida (p01:6A04).
Los peces con alas que se cogen en el espacio, en los dieciséis pasos de la lista de 0xA545. Debajo, los dos colores entre los que salta el que da una vida (p01:6A04).
Las veinticuatro fases del LEVEL 1, andadas paso a paso desde sus tablas: ocho vistas de la carretera por fase, de la salida a la meta, con lo que sale del guion del terreno y las curvas; debajo, los bichos de cada tramo.
Las veinticuatro fases del LEVEL 1, andadas paso a paso desde sus tablas: ocho vistas de la carretera por fase, de la salida a la meta, con lo que sale del guion del terreno y las curvas; debajo, los bichos de cada tramo.
Uno de los ocho decorados de las fases, montado como lo monta el juego: las diez piezas de p02:966B con su tabla de color, el mapa de p01:6000 y la animación del suelo.
Uno de los ocho decorados de las fases, montado como lo monta el juego: las diez piezas de p02:966B con su tabla de color, el mapa de p01:6000 y la animación del suelo.
La máquina de apostar, con tres cerezas. La tabla de premios está pintada en la propia máquina y dice lo mismo que el código: una cereza ×1, dos ×2, tres ×4, y los demás símbolos sólo pagan de tres en tres.
La máquina de apostar, con tres cerezas. La tabla de premios está pintada en la propia máquina y dice lo mismo que el código: una cereza ×1, dos ×2, tres ×4, y los demás símbolos sólo pagan de tres en tres.
Los seis símbolos de los rodillos, con cuántas de las dieciséis casillas de la tabla de 0x7B34 les tocan. La cereza se lleva cinco: es el símbolo más probable y el único que cuenta suelto.
Los seis símbolos de los rodillos, con cuántas de las dieciséis casillas de la tabla de 0x7B34 les tocan. La cereza se lleva cinco: es el símbolo más probable y el único que cuenta suelto.