TRABAJO EN CURSO: este parche no está terminado. Se juega de principio a fin y todas sus pantallas se han visto corriendo, pero se publica así a propósito: el logo del título todavía está flojo, el tutorial no puede escribir ni una cifra y el rótulo de dificultad va apretado en tres letras. La lista entera de lo que falta está en Lo que falta; léela antes de juzgar una captura.
La ROM salía byte a byte como se pedía y la pantalla de recuento estaba mal: una banda cian repitiendo «LT» cruzaba la pantalla de lado a lado. Ninguna comprobación del proyecto la cazó, porque ninguna miraba la pantalla.
La celda 0x0DF parecía libre por la regla que usábamos —es la fila del medio de una ficha, y ésas no se dibujan en el tercio central—. Y lo es, salvo que el recuento la usa veinticuatro veces en la fila 8 como el borde de arriba de una rejilla de cajas. Allí no se ve:
original : patron FF 00 00 00 00 00 00 00 color 10
una raya, tinta negra sobre fondo transparente
parche : patron 00 8E 84 84 84 84 84 E4 color 17
el digrafo LT, negro sobre CIANEl arreglo fue mudar ese dígrafo a la celda 0x0FA, que ningún volcado dibuja en ese tercio. Y el arreglo de verdad fue make pantallas, que compara las pantallas del cartucho original con las del parcheado celda a celda: si una celda dibuja el mismo número de celda en las dos, antes no se veía y ahora sí, hay una letra dentro del mobiliario.
Cada ficha se dibuja con seis caracteres, dos de ancho por tres de alto, y las hileras caen a caballo de dos tercios de pantalla. En el tercio de en medio la fila del medio de cada ficha no se dibuja nunca, y ahí es justo donde el cartucho escribe sus rótulos: de los 97 caracteres que usa la barra, 56 son el par central de alguna ficha.
Eso deja 49 celdas para el inglés. Y el inglés necesita más sitio que la katakana.
Con letras de 8x8 la caja de mensajes se queda en siete caracteres por línea y no cabe lo que dice el japonés. Con una fuente de 3x7 y dos letras por celda pasa a catorce, y el menú de seis a doce: entonces sí entra «CALL TSUMO / PON CHI KAN».
El precio es que una celda cuesta por cada PAR DISTINTO de letras, no por letra. Cambiar una palabra rehace el reparto entero, así que los textos se escriben en el generador y se regeneran; editarlos a mano en el parche es la forma segura de romperlo. La cuenta actual: 49 pares distintos para 49 celdas, con cero de margen.
El estado 14 del cartucho —el rótulo del final— acaba con un jp a la rutina que devuelve al estado 0. Ese salto, y sólo ése, es el enganche: el tutorial se mete en medio y todo lo demás sale gratis.
El reloj es el del cartucho: el estado 14 va restando de 0xE004 uno de cada cuatro cuadros y salta cuando llega a cero, así que basta con recargarlo y volver para que nos llame otra vez, 6,4 segundos después. El contador de diapositiva es el submodo, que entra a cero solo. Y se abandona al pulsar una tecla sin una línea escrita para ello, porque la puerta del teclado ya está abierta en ese estado: medido, la tecla 1 en la diapositiva 2 lleva al título en 0,08 segundos.
En la pantalla del tutorial faltaban dieciséis de las treinta y cuatro fichas: los siete honores, porque sus celdas de siempre son justo las que ocupa el alfabeto del parche, y los círculos 3 a 9, que ahí no traen dibujo ninguno. Un tutorial de un juego de fichas que no enseña las fichas no vale.
La salida fue que el número de celda de una ficha no es sagrado: se carga el dibujo en cualquier hueco y se pide por el número nuevo. Contando las que esa pantalla no dibuja jamás quedaban libres dos tramos, y ahí van. Tres cabos que costaron una prueba cada uno: los dibujos se sacan de la ROM original y no del bloque ya parcheado; se cargan en un solo tercio y los reparte la rutina del propio cartucho, 864 bytes en vez de 2.592; y eso tarda 1,66 segundos medidos, así que el borrado de pantalla va antes de la carga o se ve el rótulo anterior con las fichas ya pisadas.
Las veinte fichas con las que venía la pantalla eran las del rival, giradas 180 grados: el kanji arriba, la sombra en la esquina de arriba a la izquierda y tres filas negras por debajo. Al lado de los honores, cargados derechos, parecían recortadas. Medido: las seis celdas de SOU1 y de PIN1 son, byte a byte, la rotación de las del bloque del jugador. El tutorial carga ahora ese bloque tal cual y copia 126 celdas por la VRAM: 54 bytes de código y ninguno de datos.
Y al enderezarlas apareció un fallo de agosto: el hueco vacío son las celdas 0xFA-0xFF y su fila de abajo, FE FF, son los códigos de control del intérprete de listas. Toda ficha detrás de un hueco perdía su fila de abajo. El generador pinta el hueco en negro y rechaza esos dos bytes como dato, con un test que muerde.
Cuando la mano acaba sin ganador sale un cartel, y antes de dibujarlo el cartucho borra las celdas que va a tapar. Esas celdas estaban elegidas para el japonés: en inglés los rótulos ocupan otras, así que quedaban a la vista una «D» pegada a EAST 1, una «A» suelta encima de la caja y un DORA colgando debajo.
Con el borrado bueno el bloque pasa a 40 bytes y su hueco son 39, así que se reubica en la zona libre y se reapunta el ld hl que lo carga.
La primera prueba del tutorial salió con cuadrados verdes donde iban las aes. La celda 0x030 en esa pantalla no es la A: es el verde del interior de la caja del final, y el bloque de la pantalla lo restaura desde la ROM.
No se arregla en ese bloque, porque ese verde sí se ve, durante los 64 cuadros que tarda el muro de fichas en taparlo. El tutorial carga su propia A. Leer el código no lo habría cazado.
Todas las imágenes de aquí son capturas de la ROM parcheada. Y ninguna se ha hecho a mano: un guion arranca la ROM en openMSX sin pintar nada, vuelca la memoria de vídeo y el PNG se monta desde el volcado. Son tres pasadas: el demo, que se juega solo y no pulsa una tecla; las pantallas que el demo no enseña, forzadas llamando a las rutinas que las pintan; y el tutorial entero, retratado diapositiva a diapositiva mientras sale por sí mismo. Se rehacen con make capturas.
A la izquierda de cada pie está en qué situación se hizo la captura. Las que el demo no enseña se fuerzan llamando a la rutina que las pinta.
Salen solas al acabar el ciclo del demo —o al momento, con la tecla 4 en el título—, 6,4 segundos cada una, y se abandonan en cuanto se pulsa otra tecla. Aquí están en su orden.