TECNICAS AVANZADAS DE PROGRAMACION DE AVENTURAS Programación con el sistema SINTAC T2

Por: Javier San José

Esta sección va a variar ligeramente de rumbo; esto es así porque a partir de ahora dedicaré gran parte de la misma al SINTAC, el sistema de creación de aventuras para PC.
En esta entrega hablaremos de las diferencias entre la nueva versión T2 y la anterior versión T1. Desde luego las diferencias no son muchas pero si las suficientes como para dedicar este artículo a comentarlas.

Los que hayáis empezado a programar o estudiar la versión T1 debéis saber que las bases de datos de la versión anterior son totalmente compatibles con esta nueva versión; esto no es así, en cambio, con las bases de datos compiladas. Así una base de datos compilada con el compilador de la versión T1 no se ejecutará bajo el intérprete de la versión T2. Esto no supone más que deberéis recompilar las bases de datos con el compilador de la versión T2.

Son varios los añadidos al compilador en esta nueva versión; todos ellos espero que facilitarán la labor de programar una aventura. Uno de los platos fuertes de la versión T2 es la posibilidad de incluir constantes simbólicas; esto es, definir valores numéricos y asignarles un nombre identificativo. Veamos con un ejemplo como se hace esto:

\\JARDIN  18

\PRO 10

...

MIRA      _         AT   JARDIN
                    DESC JARDIN

...

\END

Este breve ejemplo contiene la esencia del uso de una constante simbólica, aquí la constante simbólica es JARDIN a la cual asignamos el número 18, así cuando en algún lugar de la base de datos aparezca la palabra JARDIN, nos estaremos refiriendo al valor de esta constante, es decir, al número 18. En realidad el trozo de código anterior se podría escribir así:

MIRA      _         AT   18
                    DESC 18

Pero la primera forma es más legible y más sencilla de cambiar; si en el futuro quisiéramos asignar el jardín a la localidad 24 deberíamos, simplemente, cambiar la línea que define la constante a: \\JARDIN 24

Pero ¿en qué lugar tiene sentido una constante?. La respuesta es sencilla: en aquellos lugares de la base de datos dónde podamos colocar un número también podemos colocar una constante. Por ejemplo:

\\CONSTANTE         1
\\JARDIN            14
\\LOC_LINTERNA      12

\LOC

...
@JARDIN Es un bonito y verde jardín con setos muy cuidados...
...

\END

\OBJ

...
@0   LINTERNA  VIEJA     LOC_LINTERNA   L    OOOOOOOOOOOOOOOO
...

\END

\PRO CONSTANTE

...
_         _         LT [CONSTANTE] 18
                    GOTO [CONSTANTE]
...

\END

En estos ejemplos vemos el amplio uso que se les puede dar a las constantes, incluso como parámetros 'indireccionados' como se aprecia en el último ejemplo.

El compilador automáticamente diferencia una constante de una palabra de vocabulario, así la línea:

DESC      JARDIN    SYNONYM MIRAR JARDIN

Se compilaría correctamente si JARDIN está definido como una constante y como una palabra de vocabulario.

Más cosas. En la rutina de INPUT se ha incorporado la detección de la pulsación de teclas de función. Esto permite, por ejemplo, que se pueda ejecutar una acción sin más que pulsar una tecla. En la aventura de demostración se incluye un ejemplo del uso de esta capacidad asignando a algunas de las teclas de función las acciones más comunes (MIRAR, GRABAR, CARGAR...).

Hasta ahora, en el debugger la pulsación de las teclas Shift-F10 provocaba el retorno al paso-a-paso. Esto ahora ya no es así. Se ha eliminado esto y en su lugar se ha incluido un nuevo condacto, el condacto DEBUG. Este condacto permite salir y entrar del paso-a-paso del debugger. El condacto DEBUG admite dos valores: DEBUG 0 para salir del paso-a-paso y DEBUG 1 para entrar en él. Este condacto sólo tiene efecto cuando la base de datos se ejecuta bajo el intérprete-debugger.
En la base de datos de inicio se aprovecha la capacidad del condacto INPUT de detectar la pulsación de teclas de función para ejecutar una condacto DEBUG 1 cuando pulsamos F10 en mitad de una frase de entrada. Esto se consigue llamando al proceso 5 después de un condacto INPUT. El proceso 5 hace lo siguiente:

\PRO 5
_         _         EQ 12 TECLA_F10
                    DEBUG 1
                    DONE

\END

Primero comprobamos si se pulsó la tecla F10 (EQ 12 TECLA_F10); aquí hacemos uso de la constante simbólica TECLA_F10 definida al principio de la base de datos y que hace referencia al código devuelto por INPUT cuando pulsamos la tecla F10 (hay otras 9 constantes refiriéndose al resto de las teclas de función). Si hemos pulsado F10 (y estamos ejecutando la base de datos bajo el intérprete-debugger) entraremos en el paso-a-paso con el condacto DEBUG 1.

Otra mejora en el sistema es la inclusión de un condacto EXTERN. Este condacto funciona de forma tal que permite ejecutar cualquier programa externo siempre y cuando este quepa en la memoria disponible. Junto con la versión T2 del sistema se suministra, a modo de ejemplo de lo que se puede lograr con este potente condacto, un visualizador gráfico que permite incluir gráficos en las aventuras (la aventura de demostración hace uso de esto para presentar unas cuantas pantallas gráficas). Otras de las posibilidades de este condacto serían la inclusión de música o efectos sonoros en las aventuras (incluso voces digitalizadas), efectos de pantalla, por citar unas pocas posibilidades.

Además en esta versión ya se permite redefinir el juego de caracteres por defecto (condacto CHARSET) pudiendo incluir en la aventura hasta ¡256 juegos de caracteres diferentes!.
Esta posibilidad sólo funciona en tarjetas gráficas EGA y VGA y no es una limitación del propio SINTAC sino una limitación de las tarjetas gráficas CGA que no permiten estos 'lujos'.
Este condacto bajo una tarjeta que no sea EGA o VGA es, simplemente, ignorado. Así se asegura que una aventura funcione correctamente en una tarjeta CGA a pesar de que utilice este condacto.
El sistema viene con unos cuantos juegos de caracteres pero además se incluye un pequeño programa de creación de juegos de caracteres que permite crear nuevos.

En fin, las enumeradas son las más importantes mejoras del sistema (pero no las únicas). Se ha mejorado también la presentación por ventanas en pantalla, la rutina de entrada por teclado (que ahora reconoce la mayoría de las teclas de edición), la eficiencia del compilador, la velocidad del intérprete, y algunos pequeños detalles que sería interminable el detallarlos aquí.

En la próxima entrega veremos la estructura de la base de datos de inicio y nos internaremos en los entresijos del funcionamiento del parser.