The Goonies

Cien salas y ninguna se repite, en un cartucho de 32 KB, y ni una esta dibujada: cada sala son ochenta bytes que apuntan a bloques de 8x4 casillas, y esos bloques comparten cola y se piden espejados. Encima va una lista de peligros por nivel y otra por sala, con dieciseis clases de bicho. Y el nombre de cada ronda es a la vez su contrasena: los mismos bytes que pintan el rotulo son los que se teclean para llegar alli.

Konami - (c) Konami 1986 - Cartucho RC-734, 32 KB - MSX1 - paginas 1 y 2 - Volcado 2ba602b1...

Aqui no hay ninguna captura. Todas las imagenes estan dibujadas desde los bytes de la ROM, ejecutando en Python el descompresor, el motor de figuras y el interprete de rotulos que corre el Z80, y cotejadas byte a byte contra la VRAM de openMSX: las cinco pantallas dan cero diferencias en color, patrones y patrones de sprite. El listado y las cifras se reproducen con make, y el reensamblado devuelve la ROM byte a byte.

El cartucho en cifras

100 %del binario explicado
1176rutinas con nombre
36,9 %del listado comentado
17.422bytes de codigo
15.346bytes de datos
0bytes sin identificar

Lo que aparecio al desmontarlo

Las cuatro salas de un nivel no van en columna: van en un plano

Esto lo encontro theNestruo, en el issue #1: las cien salas se publicaban una a una, sin plano, y el dijo que en el juego van agrupadas por nivel y con formas distintas. Lo de abajo es solo buscar en los bytes lo que el ya sabia.

empieza_el_nivel (0x4F82) saca de 0x9D67 un byte por nivel y lo deja en (0xE06A). Ese byte elige una de las diecinueve filas de 0x52DB, cuatro bytes, uno por sala.

De cada byte, el nibble bajo es la sala a la que se pasa saliendo por la izquierda (0xF: no hay), y el 0xF: no hay- y el alto es LA POSICION de esa sala en el plano: los dos bits altos son LA FILA y los dos siguientes LA COLUMNA.

Esto se publico al reves el 2026-09-09, y lo caza theNestruo. Lo que lo decide no es ningun razonamiento sino el propio decorado: montado bien, las casillas encajan a lado y lado de cada juntura en el 77,8 % de las verticales y el 56,6 % de las horizontales; con los ejes cambiados, 0,4 % y 0,0 %, que es POR DEBAJO del 10,8 % y el 7,2 % de comparar salas de niveles distintos. Y encaja con las dos tablas de paso: la sala de 0x52DB esta siempre justo ENCIMA y la de 0x5327 siempre justo DEBAJO, en sus 38 entradas.

De ahi salen los repartos: cinco niveles en columna, dos en fila, seis en 2x2 y catorce con forma rara. Y encaja con lo demas: 0x5327 da la sala de la derecha, y las de arriba y abajo son la de ahora menos y mas uno -el dec b de 0x529A y los dos inc b de 0x52A2-.

La prueba de que el reparto es el bueno esta en el dibujo: montadas asi, las plataformas y las escaleras siguen de una sala a la de al lado, y el agua del fondo se continua. Los veinticinco mapas de El mapa estan rehechos con este reparto.

Las 64 puertas de calavera emparejan sin una sola excepcion

Tambien de theNestruo, en el mismo issue: pidio un minimapa por ronda con las puertas unidas, y buscar que puerta va con cual es lo que destapo esto.

Cada puerta de calavera son tres bytes, y del tercero 0x8DA8 saca dos cosas: los seis bits bajos son el nivel al que lleva y los dos altos la ENTRADA, que es el numero de puerta por la que se aparece alli.

Y eso convierte las puertas en parejas comprobables: si la puerta j del nivel A dice (B, k), la puerta k del nivel B tiene que decir (A, j). Las 64 del cartucho lo cumplen, sin una excepcion, y ademas ninguna sale de su ronda: los 25 niveles son cinco grupos de cinco, cerrados.

El nombre de la ronda ES su contrasena

En la pantalla del titulo se puede teclear. Las letras se van acumulando en 0xE4C0 y 0x5444 las compara contra cinco nombres de dieciseis bytes, colocados de diecinueve en diecinueve desde 0x546E: MR SLOTH lleva a la ronda 2, GOON DOCKS a la 3, DOUBLOON a la 4, ONE EYED WILLY a la 5 y GOONIES a la 1.

Y esos mismos bytes son, a la vez, el guion que pinta el nombre de la ronda cuando empieza. No hay dos tablas: hay una. Al pasar de ronda, 0x53A7 te ensena debajo del rotulo KEYWORD el nombre que acabas de dejar atras, que es exactamente lo que hay que teclear para volver.

La quinta es la unica sin el 0xFF de cierre, y tiene sentido: ONE EYED WILLY es la ronda a la que se llega, no una que se anuncie nunca.

Sesenta y cuatro mil casillas en menos de tres mil bytes

Los veinticinco niveles son cuatro salas cada uno, y cada sala 32x20 casillas: 64.000 casillas en total. Todo eso cabe en 2.983 bytes, o sea a razon de veintiuna casillas por byte.

El truco son tres capas. Un nivel son ochenta bytes, cuatro columnas por veinte filas, y cada byte apunta a un bloque de 8x4 casillas de la tabla de 0x5B65, que tiene ciento ocho. El bit 7 del byte pide el bloque espejado, y asi se usa 615 veces de las 2.000. Y los ciento ocho bloques comparten cola: contando cada byte una sola vez ocupan 717 y no 841, porque unos empiezan dentro de otros.

Los ciento ocho se usan. Ni uno sobra.

Las veintisiete maneras de sacar un objeto escondido

La tabla mas larga del cartucho es la de 0x6DBD: veintisiete entradas, una por cada condicion que destapa uno de los objetos escondidos. Dar dos golpes seguidos al mismo sitio; una patada a cada lado; quedarse quieto 0x60 cuadros; tener las dos barras por encima de 0x28; darle una patada a la bola de piedra, o a la llamarada...

Casi todas se apoyan en (0xE126) y (0xE127), que son los dos ultimos golpes que ha dado el jugador y que 0x8005 va apuntando.

Y no sobra ninguna: recorriendo las listas de los veinticinco niveles salen veintisiete objetos escondidos con veintisiete indices distintos, del 0 al 26. Veintitres niveles llevan uno y dos llevan dos, el 5 y el 16.

Los veintisiete, eso si, se ven exactamente igual: una sola casilla, la 0x91, parpadeando.

Los objetos son escudos con carga, no adornos

La lista de 0x7D9B tiene ocho bytes, uno por peligro -chorro de agua, estalactita, gota, llamarada, columna, fuga y bola de piedra-, y dice que objeto del inventario para cada uno. Llevandolo, el golpe no resta energia: gasta un uso de (0xE150+objeto), y cuando se acaban, el objeto desaparece del inventario.

La barra de energia es de dieciseis bits -(0xE063) la fraccion y (0xE064) lo que se ve- y se pinta con resolucion de un octavo de casilla.

Son veintitres objetos y la tabla de 0x5576 dice en que nivel esta cada uno: veintitres valores distintos entre 0 y 24, y faltan justo el 5 y el 14. Los niveles 6 y 15 son los dos unicos sin objeto.

El perseguidor cuenta casillas para elegir cuerda

Cuando el perseguidor quiere cambiar de altura, 0x756D recorre su fila casilla a casilla hacia los dos lados, contando cuantas hay hasta la 0x41 -el pie de una cuerda- o la 0x53 -la cabeza-, y se va a por la mas corta.

Y hay un detalle: el bit 0 de (ix+00Fh) decide cual de los dos lados se prueba primero, y se gasta rotandolo en cada consulta. Por eso dos perseguidores iguales en la misma fila no salen los dos hacia la misma cuerda.

Las cuerdas verdes son las mismas para todos: el jugador sube por la 0x41 pulsando arriba y baja por la 0x53 pulsando abajo (0x66E4), y los bichos usan esas dos.

La demostracion es una partida grabada

0x5206 entra en 0x4730, que es el byte de detras del call que lee los mandos de verdad, con el acumulador ya puesto desde la tabla. O sea: la rutina de mandos se ejecuta desde la mitad, y lo que devuelve no lo ha pulsado nadie.

Son 34 estados de mando en 0x520E -mas el 0xFF que cierra- y sus 34 duraciones en 0x5231. La demostracion hace siempre exactamente lo mismo, y eso es lo que permite cotejar la VRAM arrancando el cartucho en frio, sin partidas grabadas ni puntos de ruptura.

El agua se lleva un cuaderno de lo que tapa

El chorro de agua baja por la sala pisando casillas. Para poder recogerse sin dejar agujeros, cuando encuentra una casilla ocupada apunta en 0xE1D0 la fila y las tres casillas que habia, y al retirarse las devuelve a su sitio. El mapa no se toca: el mapa es de solo lectura y lo unico que cambia es la pantalla.

La corriente, en cambio, no mueve nada: 0x854E reescribe tres patrones -las casillas 0x6D, 0xCF y 0xF1- en los tres bancos, alternando dos tandas de dieciseis bytes con el bit 2 del contador de cuadros. El agua parece correr y ni una casilla de la pantalla ha cambiado.

La mitad de los dibujos se fabrican al arrancar

De los 42 patrones de sprite de 16x16 que trae el cartucho, 22 no estan dibujados: se fabrican espejando a los otros. Y con las casillas, lo mismo: 34 se hacen dandole la vuelta a los ocho bits de otras 34.

Espejar un sprite de 16x16 no es solo invertir los bits: hay que cambiar de sitio sus dos columnas. El cartucho lo hace con un inc e y un sub 020h sobre el byte bajo de la direccion (0x46E6), y entra con el destino apuntando a la segunda mitad. Hacerlo sin ese detalle da dibujos partidos por la mitad, y el cotejo contra la VRAM lo canta: con el arreglo, 0 bytes distintos de los 2.048 de patrones de sprite.

La geometria de la VRAM va al reves, y el RLE tambien

Los ocho bytes de 0x4720 son los registros del VDP, y colocan las tablas al reves de lo habitual: el color abajo y los patrones arriba. Color en 0x0000..0x17FF, patrones de sprite en 0x1800, patrones en 0x2000..0x37FF y nombres en 0x3800. Un ld hl,00008h en este cartucho no apunta a patrones: apunta al color.

Y el descompresor tambien va al contrario de lo que parece. En 0x46A6, el bit 7 PUESTO es literal y a cero es repeticion: lo decide a donde vuelve el djnz, si al ld a,(de) -y entonces relee- o al out -y entonces repite-.

La marca oculta de la casa, y el ano que dice el rotulo

Al final del cartucho, detras del relleno, esta el titulo en katakana escrito del reves y el numero de catalogo: グーニーズ y el 34 del RC-734. El hallazgo no es nuestro: lo destapo Manuel Pazos en 2021, y gracias a el se sabe que hay que mirar ahi. Este cartucho, ademas, deja atado un caracter que estaba sin confirmar: el 0xBA solo cuadra si es el alargador.

Y una cosa que dice el propio cartucho y no una ficha de fuera: el rotulo de la pantalla del titulo, dibujado desde la ROM, pone © KONAMI 1986, y debajo el aviso de marca de Warner Bros. de 1985. El juego es de 1986.

Lo que el cartucho dibuja

Debajo de cada imagen esta de donde sale y que se esta viendo.

La pantalla del titulo, montada paso a paso como la monta el cartucho: la fuente, el cartel de la presentacion debajo, el rotulo descomprimido en los tres bancos de patrones y sus casillas escritas una a una. Cotejada contra la VRAM de openMSX: <b>cero</b> bytes distintos en color, patrones, patrones de sprite <b>y en las 768 casillas de la tabla de nombres</b>.
La pantalla del titulo, montada paso a paso como la monta el cartucho: la fuente, el cartel de la presentacion debajo, el rotulo descomprimido en los tres bancos de patrones y sus casillas escritas una a una. Cotejada contra la VRAM de openMSX: cero bytes distintos en color, patrones, patrones de sprite y en las 768 casillas de la tabla de nombres.
El nivel 1 entero: sus cuatro salas de 32x20 casillas, descomprimidas desde los ochenta bytes del mapa, con todo lo que el cartucho planta encima puesto donde lo planta -las jaulas, la puerta de entrada, las puertas de calavera, las estalactitas, las calaveras, las goteras y el objeto escondido-. Las salas van pegadas, sin rotulo, y las jaulas abiertas ensenando lo que guardan, con sus candados puestos.
El nivel 1 entero: sus cuatro salas de 32x20 casillas, descomprimidas desde los ochenta bytes del mapa, con todo lo que el cartucho planta encima puesto donde lo planta -las jaulas, la puerta de entrada, las puertas de calavera, las estalactitas, las calaveras, las goteras y el objeto escondido-. Las salas van pegadas, sin rotulo, y las jaulas abiertas ensenando lo que guardan, con sus candados puestos.
Los veintitres objetos del inventario, cada uno con el nivel en el que aparece debajo. El icono no se guarda como imagen: la tabla de <code>0x6F68</code> da UNA casilla por objeto y el juego coge esa y las tres de detras para montar un 2x2 en la fila de abajo. Los niveles 6 y 15 no salen en la lista: son los dos sin objeto.
Los veintitres objetos del inventario, cada uno con el nivel en el que aparece debajo. El icono no se guarda como imagen: la tabla de 0x6F68 da UNA casilla por objeto y el juego coge esa y las tres de detras para montar un 2x2 en la fila de abajo. Los niveles 6 y 15 no salen en la lista: son los dos sin objeto.
Las dieciseis posturas del jugador, compuestas y en color. Un sprite del MSX1 no lleva color dentro -va en su atributo-, asi que cada postura son varios sprites de 16x16 superpuestos, cada uno con el suyo. La fila de abajo son los mismos espejados, y esos veintidos patrones no estan en la ROM: los fabrica el cartucho al arrancar.
Las dieciseis posturas del jugador, compuestas y en color. Un sprite del MSX1 no lleva color dentro -va en su atributo-, asi que cada postura son varios sprites de 16x16 superpuestos, cada uno con el suyo. La fila de abajo son los mismos espejados, y esos veintidos patrones no estan en la ROM: los fabrica el cartucho al arrancar.
Los patrones de sprite de un solo cuadrado, en los seis colores que usa el juego. El color no esta en el dibujo: sale del atributo, y por eso el mismo patron aparece seis veces. Los murcielagos, las calaveras y el bicho de patas salen de aqui.
Los patrones de sprite de un solo cuadrado, en los seis colores que usa el juego. El color no esta en el dibujo: sale del atributo, y por eso el mismo patron aparece seis veces. Los murcielagos, las calaveras y el bicho de patas salen de aqui.
La puerta de la calavera -que solo se abre con los siete amigos sueltos-, la puerta al nivel siguiente y las cuatro jaulas: cerrada, abierta, con el amigo dentro y con el objeto dentro. Cada una es un bloque de casillas del cartucho, sin retocar.
La puerta de la calavera -que solo se abre con los siete amigos sueltos-, la puerta al nivel siguiente y las cuatro jaulas: cerrada, abierta, con el amigo dentro y con el objeto dentro. Cada una es un bloque de casillas del cartucho, sin retocar.
La pantalla del titulo, montada ejecutando en Python los mismos pasos que el cartucho: el rotulo comprimido, la fuente de la casa y las tres lineas de la licencia de Warner.
La pantalla del titulo, montada ejecutando en Python los mismos pasos que el cartucho: el rotulo comprimido, la fuente de la casa y las tres lineas de la licencia de Warner.
Los patrones de sprite en crudo, como quedan en la VRAM. Puestos asi no se entiende casi nada, y por eso las laminas de arriba no son este volcado: un bicho son VARIOS patrones, y lo que cambia de una postura a otra es donde va cada uno.
Los patrones de sprite en crudo, como quedan en la VRAM. Puestos asi no se entiende casi nada, y por eso las laminas de arriba no son este volcado: un bicho son VARIOS patrones, y lo que cambia de una postura a otra es donde va cada uno.
Los cinco niveles de la ronda 1 y sus puertas de calavera. Cada nivel va con el reparto de salas que le da 0x52DB, y cada raya une DOS puertas que se emparejan de verdad: la puerta j del nivel A dice (B, k) y la puerta k del nivel B dice (A, j). Las 64 del cartucho emparejan asi, y ninguna sale de su ronda. Los planos van a 1:1 y las rayas por detras de ellos.
Los cinco niveles de la ronda 1 y sus puertas de calavera. Cada nivel va con el reparto de salas que le da 0x52DB, y cada raya une DOS puertas que se emparejan de verdad: la puerta j del nivel A dice (B, k) y la puerta k del nivel B dice (A, j). Las 64 del cartucho emparejan asi, y ninguna sale de su ronda. Los planos van a 1:1 y las rayas por detras de ellos.
El nivel 8, uno de los que no son ni una fila ni un 2x2: la sala 1 arriba a la izquierda y las otras tres en fila debajo. Las escaleras y las plataformas siguen de una sala a la de al lado, que es la prueba de que el reparto de 0x52DB es el bueno.
El nivel 8, uno de los que no son ni una fila ni un 2x2: la sala 1 arriba a la izquierda y las otras tres en fila debajo. Las escaleras y las plataformas siguen de una sala a la de al lado, que es la prueba de que el reparto de 0x52DB es el bueno.
El nivel 13, uno de los tres que llevan el bicho de patas: el que espera escondido en una casilla de 8x8 hasta que el jugador la pisa. Se ve tambien el agua, que tapa lo que hay debajo y se lo apunta para devolverlo al recogerse.
El nivel 13, uno de los tres que llevan el bicho de patas: el que espera escondido en una casilla de 8x8 hasta que el jugador la pisa. Se ve tambien el agua, que tapa lo que hay debajo y se lo apunta para devolverlo al recogerse.
El nivel 25, el ultimo: treinta y dos columnas que crecen, ocho estalactitas, tres bolas de piedra y tres perseguidores repartidos por las cuatro salas. Es el nivel con mas columnas del cartucho, con diferencia.
El nivel 25, el ultimo: treinta y dos columnas que crecen, ocho estalactitas, tres bolas de piedra y tres perseguidores repartidos por las cuatro salas. Es el nivel con mas columnas del cartucho, con diferencia.
Las 256 casillas del nivel 1 en sus tres bancos, una debajo de otra. SCREEN 2 tiene tres juegos de colores independientes, uno por tercio de pantalla, y por eso el mismo dibujo sale de tres colores segun donde caiga. Aqui estan las tres versiones, tal como quedan en la VRAM.
Las 256 casillas del nivel 1 en sus tres bancos, una debajo de otra. SCREEN 2 tiene tres juegos de colores independientes, uno por tercio de pantalla, y por eso el mismo dibujo sale de tres colores segun donde caiga. Aqui estan las tres versiones, tal como quedan en la VRAM.