Blog | Archivo | Contacto | Administración |
Me falla la memoria; haciendo un post nuevo, me he puesto a buscar otro que creía haber escrito en este blog, cuando no lo hice aquí. En fin, copiaré una parte del mismo actualizada para que se quede en este sitio para la posteridad (la caché de Google).
El post es sobre un juego antiguo, una de esas historias interactivas eroge tan comunes en Japón y una de las pocas en ser traducidas al inglés. Su nombre es Nocturnal Illusion (Mugen Yasoukyoku).
Normalmente suelo pasar de este tipo de juegos, pues no suelen ser más que una excusa para mostrarte imágenes hentai. Sin embargo este tiene una muy buena historia de fondo y las escenas cerdas metidas como con calzador. Me dijeron que me iba a gustar y no se equivocaron. En esta línea de juegos de misterio (aunque con toque gore en este caso) podemos encontrar más recientemente a otros como el DiviDead (pobre perro ¿Saburo se llamaba?), pero eso es otra historia.
Le eché una ojeada por dentro, y me di cuenta de algo: no es más que una máquina virtual, los verdaderos scripts son independientes de la plataforma. Considerando los inconvenientes del juego (es un ejecutable de 16 bits NE, pero con un segmento de 32 bits para las operaciones gráficas) me decidí a analizarlo y generar de nuevo la máquina virtual.
Tal cual está no funciona en ninguna versión de Windows de 64 bits (pues ya no existe la máquina virtual de 16 bits). Tampoco es fácil debugearlo, pues está dentro de la VM de 16 bits, y la mayoría de los debuggers asumen siempre código de 32 bits, y aunque no sea así saltamos al código de la VM a la mínima. Sólo hay un desensamblador (que no debugger) que funciona bien, el IDA, con esta mezcla 16 bits / 32 bits.
Así que lo primero que hice fue desensamblarlo enterito, y después de agrupar código y datos, quitar basura, renombrar las cosas, identificar estructuras, etc, acabé con un librito de sólo 170 páginas en Courier de 8 puntos, doble columna y doble cara.
Más tarde, y tras buscar durante bastante tiempo, fui capaz de encontrar el original japonés para PC98.
¿Qué es un PC98? Es la abreviatura de PC-9801 y de los PC-9821, unas máquinas autóctonas de Japón fabricadas mayormente por NEC aunque hubo clones. Mientras aquí teníamos PCs, ellos tenían sus propias arquitecturas y no fue hasta la salida de Windows 95 que las empezaron a dejar de usar.
Estaban basados en x86 (8086, NEC v30 en principio; 80286 y 80386 más adelante, y después son básicamente PCs), con sus chips PIC y DMA pero en otras direcciones de hardware. Distintas BIOS con su soporte de kanas y kanjis y hardware de video y sonido dedicados. Aunque había otros competidores (x68000 (Sharp) y FM Towns (Fujitsu), por citar algunos), este fue el más extendido.
Tenían su versión de DOS y todo, similar al DOS/V pero con los kanas en BIOS, y usaban los mismos formatos de disquete y casi los mismos de disco duro (aunque con algunos cambios; hasta 16 particiones en vez de 4, unidad de arranque siempre A en vez de A ó C, arranque desde cualquier unidad (disquete, HD, MO, CD-ROM, ...), proceso de arranque estandarizado). Por eso es que es relativamente fácil entender sus programas, salvando accesos a hardware y llamadas BIOS.
En cualquier caso, las fases del proyecto con el Mugen son:
De momento está parado, hasta que me dé el yuyu algún día. Pero está bastante avanzado, funcionan perfectamente todos los menús y muchas partes del juego, y es compatible con los juegos guardados que se tengan.
Su VM trabaja con palabras de 16 bits, y tiene alineado su código y hasta sus datos a nivel de direcciones. Consta de unos 100 opcodes distintos, con funciones tanto de bajo como de alto nivel.
Particularmente me costó la rutina de decodificar las imágenes, una mezcla de códigos de longitud variable y diccionario rotatorio. Un formato japonés conocido simplemente como PI.
También hice una herramienta que manipula los archivos empaquetados, extrae, quita y pone ficheros, y navega por las imágenes y scripts mostrándolos.
Y ya vale de post, que bastante he escrito para ser una recapitulación.
Post cerrado