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.
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
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-.
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.
Debajo de cada imagen esta de donde sale y que se esta viendo.
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.