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)

8 comentarios:

  1. Hola, buenas tardes. Me pasa una cosa cuando juego a este juego, tanto a la versión que habéis arreglado como con el Dump original de la cinta hecho por Martos. Cuando te pasas la primera fase, por ejemplo si te matan en la segunda fase, o en la tercera, el juego necesita volver a cargar la primera fase. En la pantalla no sale nada o en la vuestra arreglada sale "Rewind to Start" , pero el programa se queda indefinidamente cargando y buscando esta primera fase.

    Supongo que será dificil de arreglar. Lo que a mi me gustaria tener es como con otros juegos, con dos archivos CAS, uno de la Cara A de la cinta, y el otro de la Cara B. De manera que las fases estan en la Cara B. Si te matan de la 2ª fase en adelante, rebobinas la Cara B para volver a cargar la fase 1. Supongo que si los de Xortrapa hubieran hecho bien su trabajo, la pantalla en la que salen los controles debería salir antes de haber cargado la fase 1. Después de "pulsar espacio para jugar", te debería pedir que pusieras la cara B rebobinada, y cargar la primera fase.

    ResponderEliminar
  2. Hola Senyor:
    Si "rebobinas" en el emulador no te carga la primera fase? Juraría que por lo menos en el nuestro funcionaba. No sería complicado hacer dos ficheros, pero está hecho así para poder cargar el CAS también en un ordenador "real" mediante LOADCAS o similares. Ya me comentas.
    Un saludo
    FX

    ResponderEliminar
  3. Hola FX

    No hay manera que funcione, ni con LOADCASX en un MSXTurboR, ni en el emulador con la imagen de cassette. Cuando rebobinas, salen en pantalla los colorines tipicos de la carga de cassette, luego se llega al final de la cinta y ya no salen mas colorines.Vuelves a rebobinar, vuelven a salir los colorines, y vuelve a pasar lo mismo.

    He comprobado y este comportamiento ya aparece en el juego original, es un bug. La diferencia es que por lo menos sale en pantalla que rebobines, con las modificaciones que has hecho tu.

    Saludos de Snakepow (en MRC tengo este nick)

    ResponderEliminar
  4. Hola Senyor:
    He estado mirandolo y es un poco complicado para poder arreglar el error. Como dices es un error del original también.
    El problema es que busca una carga que no existe (los ficheros antes de salir, serían diferentes. Si se modifican los archivos para que "pase" el check y los cargue en memoria, corrompe el programa (ya que las cargas están en distinto sitio).
    No lo intentaré arreglar, ya que es lo mismo que volver a cargar el juego desde el principio.
    También me he fijado que los créditos no deben funcionar bien, ya que cada crédito nuevo no da más que una vida, no? Esto era así siempre? O es otro bug?
    Un saludo
    FX

    ResponderEliminar
    Respuestas
    1. Hola, he visto que el arcade original da solo una vida, como en la version MSX. El arcade da una vida extra cada 30000 puntos, algo que en MSX no he visto que pase. En la versión Spectrum lo que he visto es que cada crédito da 3 vidas.

      Eliminar
  5. Ola ,

    Em primeiro lugar, parabéns por esse trabalho incrível ! Finalmente pude jogar esse jogo do inicio ao fim.

    Percebi entretanto que, ao chegar no final, e apertar espaço, o jogo reiniciou na fase 5 e não na fase 1. Usei o openmsx com a máquina Gradiente Expert plus.

    Notei também que se usar o z80 com turbo o jogo acelera, mas o relógio também fica mais rápido. Tem como consertar isso?

    No mais, valeu por esse excelente trabalho. :)

    ResponderEliminar