Game Over PAC Edition

Preludio:

Ante la avalancha de basura generada por IA que estaba invadiendo la escena del Amstrad CPC en las últimas semanas, me surgió un par de dudas: ¿acaso El Claudillo tiene problemas para hacer las cosas bien en CPC? ¿Por qué hay tanta conversión que necesita 128K y hasta 576K de memoria para funcionar?  Como sabe la audiencia, yo no se programar en ensamblador. Si me apuráis, el BASIC también lo tengo muy olvidado, así como el Turbo Pascal y el Modula-2, lenguajes que aprendí durante mis años formativos. La cuestión que me venía a la mente continuamente era: ¿Qué pasaría si yo guío los pasos de El Claudillo?

Loading

Tras seis años de PostPodcasts, hemos escuchado continuamente las explicaciones de Don Mauricio (Don SyX para los amigos) sobre como debería hacerse un juego para Amstrad CPC que haga un buen uso de los recursos de la máquina. Conceptos como «martillito ajustado», «doble buffer», «buffer oculto», etc., deberían estar ya grabados a fuego en la memoria de la audiencia. ¿Qué ocurriría si hablamos con El Claudillo y lo ponemos a implementar esos conceptos?

Game Over 1

Rumiando este proyecto me acordé de aquella vez, hace ya unos años, en los que tuve la oportunidad de conversar amistosamente con Snatcho. Durante la conversación, Snatcho me comentó que al ver los vídeos le había recordado que su Game Over iba más rápido en ZX Spectrum que en Amstrad CPC, a lo que yo le contesté que eso ocurría por que las R1 de Dinamic no trataban bien al CPC, sino que más bien lo hacían funcionar como si fuese un Spectrum. La cara de Snatcho me dejó claro que, o bien no comprendió lo que le expliqué, o directamente no me creyó. En cualquier caso, fue una anécdota simpática que recuerdo con cariño.

Game Over 1

Así que la ocasión era perfecta: ¿y si aplicamos lo que nos ha contado SyX al Game Over?

El ClaudiLLO EN ACCIÓN:

Así que la primera misión era bien clara: pasarle el juego a El Claudillo y pedirle que lo analizara en profundidad. Uno de los requisitos que me autoimpuse fue usar la versión gratuita, que actualmente está al alcance de todo el mundo. Lo cierto es que invirtió bastantes días en la tarea. Cualquier persona con un mínimo de conocimientos habría extraído los archivos del disco para que no fuese necesario analizar el cargador BASIC, la pantalla de carga y esas cosas, pero otra autoimposición que me hice fue no pedir consejo ni ayuda a nadie, y el retraso siempre está presente.

Así pues, puse a El Claudillo a analizar la primera carga. Tras varios días me dio un informe detallado del que no entendí un carajo más allá de que tiene bien estudiado el juego. Primera tarea: vamos a ver si entiende el primer concepto que Don SyX nos ha explicado un millón de veces. «¿Sabes ajustar el tamaño de pantalla visible en el CRTC para que no desperdiciemos memoria? Te adjunto una captura de pantalla con el borde en rojo para que veas cuanta zona visible está sin usar». Dicho y hecho; un par de días después, tenía la primera carga del Game Over con el CRTC bien ajustado, desperdiciando menos memoria.

Game Over 1

¿Cuál sería el siguiente paso lógico? En mi cabeza era sustituir el buffer oculto -que ya sabemos que es MUY lento en CPC volcar esa cantidad de datos en memoria a lo bruto- por un doble buffer hardware. Pero antes de eso: ¿por qué no separar la zona de juego del marcador? Para el marcador no necesitamos un doble buffer ni actualizarlo tan a menudo. Por suerte, tenemos la maravillosa técnica de la ruptura que nos permite hacer eso, pero ya hemos visto en todos estos años lo mucho que costó lograr hacerlo en la época y lo poco que se ha usado. Así que la pertinente pregunta: «¿Sabes lo que es una ruptura (en inglés raster split)? No modifiques nada aún». Respuesta: una explicación técnica que sonaba plausible a lo que Don SyX nos ha explicado tantas veces. Pues adelante: «Veo que sabes a que me refiero. Implementa una ruptura que separe la zona de juego del marcador. En el futuro buscaremos modificar la zona de juego sin que esas modificaciones apliquen al marcador.» Y va el tío, y lo hace a la primera. De aquella manera, con MUCHÍSIMO margen de mejora a nivel de código y estabilidad, pero funciona.

Game Over 1

Sin poder creerme lo que estaba viendo, pedí que implementase el doble buffer en lugar del buffer oculto. Aquí El Claudillo se permitió incluso sugerirme que usásemos una rutina de «rectángulos sucios», que no es más que actualizar en la página no visible del doble buffer solo los elementos en pantalla que se están moviendo. Me prometió que si hacíamos eso, el juego iría a 2,7 veces la velocidad del original, ya que el juego no está sincronizado con el VSYNC y cuanto más CPU tenga libre, más rápido va a ir. Entre el miedo a que rompiese cosas y que eso iba a ser injugable, le pedí que lo descartara.

Game Over 1

Durante la implementación del doble buffer surgieron algunas preguntas, sobre todo respecto a mover elementos en memoria para acomodar todos los cambios. Le sugerí que cambiase el alto de los carácteres a 6 Scanlines para compactar la memoria libre de los bufferes, pero me dijo que, aunque la idea era buena, no lograba conseguir todo el espacio que necesitaba, y que por lo tanto mover datos era obligatorio. Aquí El Claudillo cometió algunos errores que hubo que depurar.

Game Over 2

Al probar la primera versión con CRTC ajustado, ruptura y doble buffer hardware, aparecieron algunos glitches gráficos que se han ido corrigiendo a base de sacar capturas y mandárselas. Los primeros los corrigió rápido, pero uno fue persistente y no encontraba el fallo hasta que me di cuenta que solo ocurría al morir misteriosamente en pantalla tras abrir un barril, lo que me hizo a pensar que había un problema con el sprite de la mina. Y, efectivamente, al darle esta pista, El Claudillo se dio cuenta que había copiado parcialmente una tabla de datos. Sigo sin entender por qué una máquina automática mueve solo 92 de 96 Bytes de una tabla de datos, pero como dije desde el principio, de esto no tengo ni p. idea.

Game Over 2

Ahora sí, teníamos una versión de la primera carga del Game Over con crtc ajustado, ruptura y doble buffer, que va sensiblemente más rápida que el original, y sigue entrando en 64K de memoria como el original. Guiando de la mano a El Claudillo, diciéndole simplemente conceptos de programación, ha sido capaz de implementarlos él solito. Pedirle que implemente esas tres mejoras en la segunda carga ha sido trivial, en un par de sesiones apenas. El juego va, como mínimo, igual de rápido que la versión de Spectrum, si no un pelín más rápido incluso. El tiempo nos da la razón; las R1 de Dinamic lastraban el rendimiento del Amstrad CPC, a cambio de permitir a la compañía sacar sus juegos de manera más rápida y sencilla.

Game Over 2

Lo cierto es que queda alguna cosilla que se podría pulir. Los bugs y glitches originales del juego siguen ahí, además de uno nuevo que ocurre muy de vez en cuando, en el que el personaje se queda flotando unos segundos tras morir y reaparecer en pantalla. No obstante, os presentamos esta versión Beta para que la puedan ustedes ya disfrutar y quizás sirva de aprendizaje para sus futuros proyectos con El Claudillo. Si encontráis algún Bug más allá del sprite flotador, mandadnos una captura de pantalla por correo junto a una explicación de como ha ocurrido y en que máquina o emulador lo habéis probado, y pondremos a El Claudillo a trabajar.

Game Over 2

Por último, y no menos importante, fijaos en la importantísima labor de divulgación que lleva haciendo Don SyX a lo largo de todos estos años. No sólo SyX siempre ha tenido razón, sino que nos ha puesto en nuestras manos una serie de conceptos y conocimientos que ahora podemos poner en práctica. La labor de documentación, estudio y divulgación de Don SyX no tiene parangón en el mundo del Amstrad CPC. Son más de 3 décadas metido de lleno en la escena analizando, documentado y desarrollando herramientas, parches, juegos y rutinas variadas que van desde un Emulador de Pac-Man (pero emulador de verdad, de los que les tienes que poner la ROM y todo para que funcione) a su colaboración en la creación de diversas expansiones hardware.  Si una persona es sinónimo de Amstrad CPC, ese es Don SyX.

Y después de esta tremenda chapa: Descarga Game Over PAC Edition.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies