Asalto y castigo para QL

Descripción del contenido de esta página

Versión para QL de la aventura Asalto y castigo de Baltasarq.

Proyecto desarrollado entre 2011-03 y 2011-05.

El origen de la idea

A finales de marzo de 2011 tenía entre manos varios proyectos en S*BASIC para QL, entre ellos la enésima reencarnación de un viejo proyecto de juego conversacional, que se me estaba atascando. Se me ocurrió que para cambiar de perspectiva y recuperar la inspiración podría hacer una pausa... y reescribir para QL una aventura conversacional escrita en algún otro BASIC. Inmediatamente me acordé de Asalto y castigo. Era un juego logrado y con un código aparentemente claro cuya traducción al SuperBASIC de QL no ofrecería dificultad.

Pantallazos

Los pantallazos siguientes están tomados de los emuladores Q-emuLator y QPC2 (para Windows, pero funcionando de maravilla en Debian con Wine).

De Q-emuLator

En un sistema QL con la resolución de pantalla de la máquina original de 1984 (256x256 puntos efectivos con los mismos ocho colores de ZX Spectrum), se carga una imagen de presentación antes del programa principal, creada a partir de la carátula de casete diseñada por Neil Parsons para la versión de ZX Spectrum.

Asalto y Castigo Asalto y Castigo Asalto y Castigo Asalto y Castigo Asalto y Castigo Asalto y Castigo

De QPC2

Cuando el programa arranca en un sistema QL moderno con modos de pantalla de alta resolución, como es QPC2, paradójicamente no se muestra pantalla de presentación. El motivo es que se da por supuesto que la carga del programa será muy rápida. No obstante quizá añada una pantalla con color real seguida de una pausa para estos casos en una futura versión.

El tamaño de la ventana del juego será el mayor posible hasta un máximo de 800x600, centrada en la pantalla. En las tomas siguientes la ventana mide 800x480; se aprecia en ellas la diferente gama de colores, igual a la de las versiones en Blassic y Locomotive BASIC.

Asalto y Castigo Asalto y Castigo Asalto y Castigo Asalto y Castigo

Novedades

Novedades técnicas

El código final en SuperBASIC no se parece al código original en Blassic, que fue del que partí. SuperBASIC es un BASIC estructurado de alto nivel, que incluso recuerda un poco a Pascal. Aunque necesita números de línea, yo trabajo sin ellos y los añado solo al final. Como cuento en el historial de desarrollo, los cambios necesarios para que SuperBASIC se «tragara» el código en Blassic fueron pocos y casi triviales. Pero ese no era mi objetivo. El objetivo era reescribir el programa con todo lo que un BASIC avanzado como SuperBASIC ofrece: procedimientos, funciones y estructuras de control. El código debía ser lo más legible posible (que pudiera entenderse casi sin necesidad de comentarios) y por supuesto no debía quedar él ni un solo salto de línea. Afortunadamente el programa original estaba bien escrito: estaba dividido en subrutinas claras y los saltos se usaban solo como sustitutos de las estructuras de control, no para cambiar el flujo principal del programa.

No obstante, durante el proceso de traducción, tentado por la ausencia de limitaciones (la memoria o la velocidad de ejecución no eran un problema) hice algunos cambios internos en la organización y tratamiento de los datos. El más significativo es la reescritura del analizador lingüístico. El original era tan sencillo como eficiente, impuesto por las limitaciones del lenguaje y la máquina. El que yo he escrito a partir del código original es equivalente (es decir, no tiene capacidades nuevas: reconoce el mismo tipo de estructuras) pero internamente trabaja de otra forma, usando una lista de palabras invariables, que están asociadas a sus identificadores (lo que permite añadir sinónimos muy fácilmente), y utilizando una extensión del lenguaje para buscar valores en matrices de texto muy rápidamente.

Estuve tentado ir más alla en los cambios del analizador: una lista única de vocabulario (como hago en mis propios programas); reconocimiento de complementos preposicionales; orden variable de los elementos de la frase y otras capacidades nuevas que he programado varias veces para otros proyectos. Pero al final preferí no hacerlo.

Por último, el programa usa un juego de caracteres estándar ISO 8859-1, diferente del propio de QL. Eso significa escribir una función para la entrada de textos escrita a medida. La escribí a partir de la que tenía ya escrita para el proyecto CE4, añadiéndole mejoras tomadas de una función análoga muy completa que había escrito para El bosque encantado de Oupouèle, a su vez una versión mejorada de la usada en Forth 5mx... El resultado final es tan bueno que sustituyó después a la función original de CE4.

Novedades estéticas

El aspecto es prácticamente idéntico al del original (salvo lógicamente por lo que respecta al tamaño de la pantalla). Tan solo hay un pequeño cambio en la disposición de un par de textos, que en el original mezclaban narración con diálogo y eran mostrados en conjunto como diálogo; en esta versión están separados en dos: la parte narrativa y la de diálogo.

Novedades de juego

La aventura en sí por supuesto es idéntica a la original... salvo por unos cambios que me tomé la libertad de introducir y que no afectan a la trama.

He añadido muchos sinónimos nuevos (por entretenimiento, pues la mayoría no aportan nada); entre ellos por supuesto «i». He creado un objeto nuevo, que en la versión original existía solo como parte de una descripción Y he añadido dos formas alternativas para solucionar dos de los puzles (una de ellas es una alternativa solo lingüística, una forma diferente de usar los mismos objetos; la otra es una alternativa con un objeto diferente pero muy relacionado). Ninguna de estas novedades afecta a la trama.

Quien conozca el juego no tendrá dificultad en encontrar las novedades leyendo el código del programa.

Estuve a punto de hacer un cambio significativo en el vocabulario que finalmente desestimé: separar en grupos los (seudo)sinónimos de «atacar» (que abarcan muchos usos diferentes) para poder discriminar precisamente sus acciones con diferentes objetos.

Requisitos

Memoria

El programa necesita más de 128 KiB de RAM (que es lo que proporcionaba la QL original) pero no he calculado cuánto más exactamente; con 384 KiB funciona bien.

Extensiones

El programa y su cargador usan varios funciones y comandos de tres extensiones de SuperBASIC, que se cargan en el inicio del cargador:

Plataforma

Asalto y castigo ha sido probado solo en las versiones registradas de dos emuladores comerciales: Q-emuLator y QPC2, que son los mejores emuladores de QL disponibles con gran diferencia. Aunque solo existen versiones para Windows funcionan impecablemente en GNU/Linux con ayuda de Wine (todo el desarrollo y las pruebas han sido realizados con ambos emuladores sobre Debian).

QPC2

El programa funcionará también con la versión gratuita del emulador QPC2. La única limitación de la versión gratuita es que no permite modificar nada en los sistemas de ficheros, algo que Asalto y castigo no necesita hacer.

Q-emuLator

La versión gratuita de Q-emuLator limita la velocidad a la de máquina original y la memoria máxima a 384 KiB de RAM, pero el programa funciona bien en esas condiciones.

Sin embargo el programa no funciona en Q-emuLator con la ROM MGE (la española) de QDOS y una velocidad igual a la de la QL original. El motivo, que me explicó detalladamente Daniele Terdina, el autor del emulador, es un fallo en el código original de las ROM MGx, que el emulador parchea y arregla cuando funciona a una velocidad superior a la original. Se puede usar la ROM JS (la inglesa) que viene con el emulador; no habrá diferencia en el uso del teclado español, pues el emulador se ocupa de ello de forma trasparente.

Otras plataformas

En principio tiene que funcionar con otros emuladores (las pruebas con uQLx están pendientes).

No cabe esperar ningún problema en una QL real.

Sistema operativo

QDOS

En QDOS conviene usar la ROM MGE para la cómoda entrada de los signos y letras propios del español (aunque funcionaría igual con otra versión de la ROM usando los atajos de teclado propios). Con esta ROM sin embargo, como ya se ha explicado, el programa no funcionará en el emulador Q-emuLator cuando la velocidad de ejecución sea la de la QL original.

El programa no funcionará con ROMs AH o JM, las más antiguas de QDOS, debido a que no permiten usar en un programa extensiones cargadas por él mismo, como hace el cargador del juego.

Minerva

El programa ha sido probado con Q-emuLator y Minerva (ROM 1.89). El atajo de teclado propio de Minerva para acceder a las letras no inglesas (Ctrl+Enter) no funciona (no tiene que ver con Asalto y castigo) pero el emulador envía los caracteres correctos según la disposición del teclado del sistema anfitrión.

SMSQ y SMSQ/E

En ambos sistemas el programa carga si es necesario la tabla de teclado de español.

Tamaño de pantalla y resolución de color

Si el sistema QL admite modos y resoluciones de pantalla modernos, el programa usará una ventana central de un tamaño máximo de 800x600 y una gama de colores igual a la de las las versiones en Locomotive BASIC y en Blassic. En caso contrario la ventana será la clásica de 512x256 (256x256 efectivos en ocho colores) y los colores serán los ocho de la QL original (idénticos a los de la ZX Spectrum).

Listados

Los listados están excepcionalmente en una página propia, tanto por su longitud como para no arruinar la trama del juego a quien no lo conozca.

Descarga

Ofrezco el programa en varios formatos habituales en QL y sus emuladores:

De la página de Dylwin Jones es posible descargar cualquiera de las ROM para QL.

Cómo arrancar el programa

En un artículo aparte explico cómo arrancar un programa de QL en diferentes plataformas y qué fichero usar en cada caso; conviene también familiarizarse con las características de los emuladores QPC2 y Q-emuLator.

En caso de hacerlo con el emulador QPC2, recomiendo elegir la resolución de color de ocho bitios (256 colores) de entre las tres disponibles:

Información sobre Asalto y castigo

Aparte de la página de Asalto y castigo ya citada, en la publicación SPAC (descargable en PDF) hay varios artículos dedicados al juego:

También puede resultar útil:

Páginas relacionadas

Glosario

BASIC
Beginner's All-Purpose Symbolic Instruction Code (código polivalente de instrucciones simbólicas para principiantes)
GNU
GNU's Not Unix (GNU no es Unix)
KiB
kibiocteto (1024 octetos)
PDF
Portable Document Format (formato de documento portable)
RAM
Random Access Memory (memoria volátil de lectura y escritura)
ROM
Read Only Memory (memoria inalterable)
S*BASIC
SuperBASIC y/o SBASIC
SPAC
Sociedad para la Preservación de las Aventuras Conversacionales
Wine
Wine Is Not an Emulator (Wine no es un emulador)