martes, 23 de junio de 2015

Nuevo parcheo: Double Dragon (Re-Re-Actualizado)

Bueno, ha llegado, el que de momento ha sido el mayor reto que me he encontrado en este empeño mío de lograr arreglar lo que algunos no hicieron en su día... (Llevamos ya unos cuantos días con ello)

Lo primero de todo, este CAS que ahora podéis "disfrutar" no habría sido posible sino fuera por las interminables veces que ha debido acabar el juego Araubi haciendo de teste y grabándome los necesarios SAVES para poder comprobar los errores que iban apareciendo.
Mención "especial" aparte a Fernando García que es el responsable de haber rehecho la fase 7 que nunca existió en MSX (por una vez ha sido bueno que la versión MSX fuera una conversión de Spectrum). Sino hubiera sido por él, igual hubiera quedado guardado en mi carpeta de "Próximos Proyectos"

Bueno, os pongo en situación de un niño que compraba el juego que te gustaba en recreativa para MSX, pensando que se podría parecer en algo... (qué ilusos éramos). Ya no nos importaban ni los gráficos (ya esperábamos que fueran los mismos de Spectrum), ni que la jugabilidad no fuera la de la máquina.... Sólo podíamos esperar que funcionara!!!!! Yo recuerdo que este juego nunca me funcionó bien. Ahora ya sé porqué....
Os comento (espero no dejarme ninguno, ya que han sido eternos) los "problemas a resolver" que nos hemos encontrado (más precisamente, se ha encontrado Araubi). Todo gracias a "los genios del Software de XORTRAPA":
1.- Como muchos otros juegos de la época, no se siguen los estándares del MSX. Lo primero es que la rutina que busca slots se pone en una parte de memoria que está ocupada en ordenadores con disquete por el MSXDOS.
2.- Algunos sabréis que sólo funcionaba en emulador con la configuración Gradiente. Esto era debido a que el juego guarda una copia del fondo en memoria. Porque no grabarla hasta la dirección FFFFh??? (para los que no lo sepan, en esta dirección es donde se controlan los cambios de slots, al grabar en esa dirección, cambia la memoria con el consiguiente cuelgue...) En el ordenador Gradiente, da la casualidad que lo que graba deja la memoria en el modo predeterminado.
3.- En los ordenadores MSX2 y superiores, incluso con estos parches, el juego no funcionaba... Uy, estos OUT(FEh) que hay aquí de la versión de Spectrum... Los quitamos? Na, no te preocupes, que no se usan para nada.... todavía... (En MSX2 se usan para cambiar los slots de memoria. Parecido a lo que ocurría al escribir en FFFFh)
4.- Una vez que se acaba la primera fase, los textos directamente no salen. La persona que hizo el port y parcheó las rutinas de escritura de textos, le pareció bien sólo hacerlo en la primera carga (supondría que las siguientes ya aprenderían solas...)
5.- La fase 6 (5B en el juego), tenía unos errores gráficos en una puerta. Pensaremos por el bien de los programadores que esta vez ha sido fallo al preservar el juego (aunque viendo el siguiente punto... como que no...)
6.- En esta misma fase hay unas animaciones, que hacen que por ejemplo cambie el color de los pebeteros del fondo. En este caso, supongo que el programador original de la versión de Spectrum, cuando hay una parte de la animación que no se ve en pantalla... porqué no simplemente no dibujar nada, cuando podemos "dibujar" en una dirección cualquiera como a partir de la 0000h (de casualidad no estropeaba nada de código ni alguna imagen de las guardadas. Al tener que cambiar las direcciones de las letras y donde guarda la imagen de fondo, esta rutina escribía lo que no debía en pantalla.
7.- La fase 7 (6 en el juego), y que estaba en la cara B de la cinta... directamente no estaba... Era un juego "tan difícil" que era imposible acabarlo.... :D Lo que había grabado, como curiosidad, era una cabecera defectuosa (llena de 00) y un bloque que era la fase 2... Como dije antes, con la ayuda de la versión de Spectrum, Fernando pudo reconstruir los 3 bloques de carga que componen esta fase.
8.- Un fallo "menor". En la pantalla de presentación había dos puntos transparentes (se ven parpadear en la carga).
9.- Podéis notar también una pequeña mejora en el movimiento de los personajes, y el scroll. La "desgana" de los programadores no daba para optimizar comandos duplicados y rutinas que sólo hacen que ralentizar el juego (igual en Spectrum era necesario para que no se volviera injugable, pero en nuestra versión le viene bien...)
Por si todo esto no fuera poco (daos cuenta que cada una de estas modificaciones hacia que hubiera que probar el juego de nuevo para ver si estaba solucionado), cada vez que se modifica alguna cosa, hay alguna otra que se puede estropear...
Como dije en alguno de los puntos, el tener que mover la zona donde guarda el fondo de pantalla sin "sprites" hay muchas rutinas que cambian las direcciones. Después, para hacer hueco a esta parte (bastante grande), la zona donde se guardan las letras, hubo que cambiarla de sitio (buscar los accesos también a estas letras desde varias rutinas y distintas cargas)

Bueno, ya no os doy más la charla con todos los problemas que nos hemos encontrado, y os dejo el CAS para que lo podáis, ahora si, disfrutar sin errores (si alguien ve algún otro que se nos ha pasado, remitírnoslo, y lo miraremos (si es con un save anterior, es de agradecer). Aunque creo que a Araubi no se le habrá pasado ni una....  :D

A ver el final.....por fin!!!!!

P.S: A todos los que lo habéis descargado, os recomendaría que lo descargarais de nuevo, ya que ahora el CAS está preparado para funcionar también con el LOADCASX. No sé si en todos los ordenadores, pero en Turbo R, parece que funciona.
Segunda Actualización: Quedaban algunos accesos directos a puertos, que daban problemas en algunos ordenadores.
Tercera Actualización: Gracias al usuario RenderEng, he actualizado el CAS con dos añadidos/mejoras hechas por él. Ha añadido el "poke universal" al cargador BASIC, y en la rutina de carga, la ha modificado para que haga la búsqueda de slot desde el 3.3 al 0, y no al revés. Por lo visto, esto mejora la compatibilidad con algunos ordenadores.
Aprovechando este nuevo parche, he localizado un fallo en la lectura del joystick. He arreglado la rutina, ya que no hacia la lectura del joystick de manera correcta (para que os hagáis idea, utilizaba el puerto de solo lectura A2h, como de escritura. En mis pruebas, de la forma "original", obviamente no lograba leer el joystick. No sé si hay a alguien que le haya funcionado en el juego original.

Double Dragon (CAS) (Re-Re-Actualizado)