FR EN ES
2026-09-06

Mr. Matt: volver a excavar las cuevas de mi infancia

Mr. Matt: volver a excavar las cuevas de mi infancia

Cuando era niño tenía ADI. El programa educativo con el extraterrestre verde que te explicaba las fracciones. Solo que en el CD-ROM de ADI 4, entre dos ejercicios de gramática, había juegos. Y entre esos juegos estaba Mr. Matt.

Le dediqué demasiadas horas. Muchísimas de más. (así que el programa educativo cumplió su función: aprendí la perseverancia, aunque no las fracciones)

Hoy está ahí, en tu navegador: mrmatt.jeux.philr.fr.

El juego

Mr. Matt es un juego de lógica de J. Andrzej Wrotniak, escrito en 1996 para Windows, después de que jubilara su Atari ST y no encontrara una versión decente de Stone Age. Distribuido como shareware, se descargó cincuenta mil veces el primer año.

El principio cabe en una frase, y la ayuda original lo dice mejor que yo: «No shooting, no killing, just thinking ahead and hours of endless frustration.»

Cavas la tierra, comes las manzanas, esquivas las piedras. Comer la última manzana termina el nivel. Las piedras caen en cuanto la casilla de debajo se libera, ruedan por los montones y te matan si acaban encima de tu cabeza. Puedes empujar una piedra, solo una, en horizontal. También hay cajas, que se tragan tres piedras antes de desaparecer, y bombas, llegadas en 2001, que destruyen lo que tocan.

Eso es todo. Y es una pesadilla.

Porque empujar una piedra es irreversible. Una manzana tapiada tras un derrumbe es una manzana perdida, y un nivel perdido, salvo que no lo sabrás hasta cuarenta movimientos después. El juego es un primo del Sokoban disfrazado de Boulder Dash. (salvo que Boulder Dash te deja correr, mientras que Mr. Matt te deja meditar sobre tu error)

La adaptación

Rehíce el juego con Godot 4.7, a partir de la distribución shareware 1.59 y de la versión 3.16 de 2001.

La norma que me impuse: fidelidad. Nada de «reinterpretación moderna», nada de lavado de cara gráfico, nada de modo aventura con logros. Las mismas reglas, los mismos niveles, las mismas casillas, los mismos sonidos, todo extraído directamente de MRMATT.EXE. Los cuarenta mapas de bits de 16 píxeles duermen en un recurso Delphi del ejecutable de 1997; los sonidos son los MM_*.WAV originales, PCM de 8 bits mono a 22 050 Hz, dos de ellos con una cabecera corrupta que hubo que reescribir.

Hasta las traducciones vienen de ahí. El juego habla seis idiomas, inglés, francés, alemán, italiano, español y sueco, y son los seis archivos .MMI entregados en 1997, ochenta y nueve cadenas cada uno. Erratas incluidas: el francés original dice «Qu'as-tu fais à Mr.Matt?», y lo sigue diciendo.

Cómo se comprueba que una adaptación es fiel

Es la parte que no había previsto, y con diferencia la más interesante.

La ayuda de 1997 describe las reglas. Mal. Dice que una piedra rueda, sin decir hacia qué lado. Dice que una bomba no explota «al aterrizar en el fondo de la pantalla», sin decir si el fondo de la pantalla sostiene o se traga. No dice nada del momento exacto en que un objeto empieza a caer, que es precisamente toda la diferencia entre sobrevivir y morir.

Solo que la distribución de 2001 incluye un archivo mrmatt.sol con 2278 soluciones encontradas por jugadores, repartidas en 437 paquetes de niveles. Esa gente jugó en el programa de verdad. Así que cada una de sus secuencias de movimientos, rejugada en mi motor, tiene que acabar en victoria.

Eso es un oráculo. Mucho más severo que leer la documentación, y sobre todo medible: escribí el motor una segunda vez en C, puse cada regla dudosa detrás de un #define, y observé cómo se movía la tasa de éxito.

Variante probadaÉxitoVeredicto
(reglas finalmente adoptadas)99,8 %
Las cajas no ruedan89,6 %refutada
Se rueda sobre cualquier cosa48,1 %refutada
La caída no espera al paso siguiente41,4 %refutada
Hay que caer antes de rodar8,2 %refutada

De ahí salieron tres reglas que la ayuda no menciona en ninguna parte.

Un objeto en el aire no cae solo. El juego de verdad no aplica la gravedad a todo el tablero: un objeto solo cae si la casilla bajo él ha cambiado. Y 851 niveles del corpus empiezan con una piedra puesta en el vacío. Ahí se queda, suspendida, hasta que alguien viene a molestarla.

El sentido del rodamiento sigue al jugador. Cuando una piedra aterriza sobre otra y ambos lados están libres, se va hacia el lado hacia el que Mr. Matt acaba de moverse. Forzar un sentido fijo arreglaba 42 soluciones y rompía 36; esta regla arregla 66 y no rompe ninguna.

Una caja se traga todo lo que le llega, caiga, se empuje o ruede hasta ella.

El desensamblado confirmó las tres. También entregó la definición exacta de la muerte, en la dirección 0x4653c4: Mr. Matt muere cuando un objeto pasa a ocupar la casilla justo encima de él, y solo mientras queden manzanas. Una vez comida la última, el nivel está ganado y ya nada le alcanza.

Balance final: 2273 soluciones de 2278, y las 35 de los siete juegos originales. Quedan cinco que siguen sin rejugarse, todas muy tardías, entre el movimiento 305 y el 1102.

Los niveles, y un cifrado que romper

El shareware solo da 48 niveles. La versión registrada daba cuatro mil, y el autor suspendió los registros hace mucho.

Pero 437 paquetes comunitarios de la época seguían circulando. Solo que los distribuidos después de 2001 están revueltos: las dieciocho líneas del tablero se vuelven ilegibles, el resto no.

+>$> ->!<*!#O* &!H! <<<<*=>+%!>      <- cifrado
H#+#+#+++*************+++#+#+#+      <- el mismo en claro

Un archivo, abba_dabba_dooo.mat, existía en los dos formatos. Eso da 2232 casillas de texto claro conocido, y algo con lo que comparar. Es una sustitución por desplazamiento sobre un alfabeto de dieciséis caracteres, donde la clave depende únicamente de la posición y se repite cada 256 caracteres. No es, por tanto, un cifrado de flujo: dos niveles del mismo archivo cifran la misma casilla de la misma manera, lo que bastó para delatar el método.

Comprobación en un archivo sin texto claro conocido, 2b_or_not_2b.mat: salen cinco niveles que dibujan cada uno un signo de interrogación, para un juego llamado «2b Or Not 2b» cuyos niveles se llaman «Question 1» a «Question 5». Asunto zanjado.

Resultado: 443 juegos y 2322 niveles entregados con la adaptación, en un recurso de 303 kB que se carga en 11 milisegundos.

Queda un misterio. Cada nivel lleva un número de control que sigo sin saber calcular. No es ni una suma simple ni ningún CRC-16 corriente. Mientras no se descifre, los niveles que crees los releerá mi juego, pero probablemente los rechace el de 1997. (lástima, era el único puente que faltaba)

Lo que hay dentro

Una sola pantalla, como en el original: la barra de menús Archivo / Juego / Opciones / Ayuda, el tablero, y la franja azul de abajo con los números de nivel, amarillo el actual, verde los terminados, rojo el siguiente.

Y además: catorce temas gráficos, entre ellos Cerveza, Margaritas y Matt-Ilda; un editor de niveles con punto, línea, círculo y relleno, y sesenta y cuatro pasos de deshacer; la instantánea y la reproducción del original, teclas C y R; la solución visible para cualquiera de los 443 juegos, ya que las 2278 soluciones humanas van incluidas. (una victoria obtenida mirando la solución no se registra, igual que en 1997: el juego te conoce)

También se juega con el pulgar. Una cruceta translúcida se coloca en la esquina inferior izquierda, un botón de deshacer en la inferior derecha, y todo se bloquea en horizontal y a pantalla completa al primer toque. Firefox para Android no implementa el bloqueo de orientación, así que hay un botón, y una versión instalable cuyo manifiesto lo declara.

Y una importación y exportación en JSON, porque el formato .mat es arte ASCII y hacía falta un puente hacia las herramientas de hoy.

Lo que viene

Queda una pregunta que ya me hacía a los diez años, delante de un nivel atascado: ¿sabría resolverlo una máquina?

La respuesta corta es no, no realmente. Escribí un solucionador, una búsqueda en haz. Resuelve 3 niveles de 26. El motor en C va a 900 000 estados por segundo, frente a 5000 en GDScript, y eso no cambia nada: la fuerza bruta está a decenas de órdenes de magnitud del problema. Empujar una piedra crea callejones sin salida irreversibles, y eso es exactamente lo que hace difícil al Sokoban.

Será el tema del próximo artículo. Será menos alegre.