| # LOS CREADORES DE AVENTURAS (III)

## Con la solución completa al problema de la suscripción damos por terminado este breve análisis del GAC y comenzamos con el estudio comparativo de las condiciones y acciones del PAW.

Suponíamos en el número anterior que ya tenías una idea de la lógica interna del GAC y te dejamos con la importante misión de planear una suscripción a M.H., pagando con un talón y cubriendo TODAS las posibilidades.

Cierto que existen varias formas de enfocarlo, pero creemos que la más eficaz sería:

1) IF (VERB [suscribir] AND NOUM [Microhobby] AND SET? 10 AND AVAI [Talón]) MESS "Vale, has enviado tu talón y esperas ansioso el próximo número" WAIT END.

2) IF (VERB [suscribir] AND NOUM [Microhobby] AND RES? 10) MESS "No tienes dinero en el banco y no nos gustan los cheques sin fondo" WAIT END.

3) IF (VERB [suscribir] AND NOUM [Microhobby] AND NOT AVAI [Talón] MESS "Furro, no puedes enviar un talón si no tienes talonario" WAIT END.

Cuando el jugador teclea "suscribirme a MicroHobby", el intérprete chequea todas las condiciones hasta que encuentra una en la cual la parte condicional (IF) es válida tanto para lo que ha tecleado (VERBO Y NOMBRE), como para su status en el momento actual, y sólo entonces la acción será ejecutada. Si no hay condiciones compatibles o válidas en todos los aspectos, se imprime en pantalla el mensaje "No puedes".

Por lo tanto, en nuestro ejemplo, el intérprete mira la condición (1) y chequea:

a) ¿Tecleado el verbo suscribir? Negativo, paso a la siguiente. Positivo, continúa en la (1).

b) Lo mismo, pero con el nombre Microhobby.

c) ¿El marcador 10 seteado? (lo hemos usado para indicar que el jugador SI tiene dinero en el banco). Negativo, paso a la siguiente. Positivo, continúa en la (1).

d) ¿El objeto talón disponible ? (o en la habitación o lo llevado). Negativo, paso a la siguiente. Positivo, entonces esta condiciónes totalmente válida tanto para lo tecleado como para el estatus y, por lo tanto, se pasa a ejecutar la acción (1):

e) MESS, se imprime el mensaje adecuado: Vale..., etc.

f) WAIT, el sistema espera la próxima orden.

g) END, le dice al intérprete que la condición está completa.

Fíjate que se pueden dar cuatro variantes:

1. Dinero en el banco y el talón a mano..............Condición(1)
2. Dinero en el banco y no el talón a mano...........Condición(3)
3. No dinero en el banco y sí el talón a mano........Condición(2)
4. No dinero en el banco y no el talón a mano........Condición(2)

Y lo hemos arreglado con 3 condiciones pues la (2) se encarga de dos de las combinaciones.

Por otra parte, habría que prever que la bandera 10 se reseteara si el jugador se gasta el dinero, pero sobre ese tema hablaremos más adelante. Por ahora esperemos que este ejemplo te haya servido para un primer contacto con la lógica en las aventuras.

### En el corazón del PAW.

El enfoque del PAW es algo diferente. Se usan dos tipos de tablas, una de Response (respuesta) y otra de Process.

Cada entrada, en vez de hacerla como en GAC, lleva como cabecera un Verbo y un Nombre (los cuales pueden hacerse nulos sustituyendolos por una línea (_) o un asterisco (*), seguidos por una serie de CONDACTS, que vienen a ser una mezcla de condiciones y acciones.

En la tabla de respuestas, PAW busca una correspondencia entre lo que el jugador teclea y las entradas que tiene en forma de Verbo-Nombre y, si las encuentra, ejecuta las acciones que hay detrás.

A diferencia del GAC, PAW ya ejecuta de forma automática los coger, dejar, ponerse y quitarse cualquier objeto, así como coger todo, dejar todo, ponerse todo y quitarse todo.

Los CONDACTS son también más variados. Existe el EXTERN, que permite hacer llamadas a rutinas en Bsic o en Código Maquina desde dentro del PAW. RESET, de gran ayuda en la creación de juegos en varias partes o de carga múltiple, donde los objetos que no van a ser llevados a la otra parte vuelven a su anterior sitio y los que se llevarán pasan a otra localidad definida.

Con la orden PARSE se obtiene la decodificación de cualquier frase entre comillas para formar una nueva orden. Es muy útil en la creación de los PSI o Personajes pSeudoInteligentes, pues sirven para poder hablar con ellos.

TIMEOUT es usada para animar algunos gráficos o para mover a los otros personajes o hacer que pasen cosas mientras el jugador está pensando.

PUTIN O TAKEOUT nos permite llevar objetos dentro de otros que han sido definidos como contenedores. En este caso PAW calcula el peso total del contenedor.

DOALL es un poderoso comando usado para cuando se quiere hacer algo con todos los objeos o con todos exceoto uno.

Hay que tener en cuenta que muchas de esas acciones se pueden obtener con un uso adecuado del GAC, pero a costa de memoria y sin la facilidad y elegancia con que los ejecuta el PAW.

INPUT nos perite cambiar la forma como opera la rutina de los inputs del jugador para obtener una pantalla más ordenada.

LINE especifica la línea donde se inicia el texto en las pantallas con gráficos.

MOVE permite la manipulación de los PSI, pues permite dotarlos de movimientos aleatorios.

Con el comando MODE se pueden obtener fácilmente varias combinaciones entre los textos y los dibujos.

Con PROMPT se puede aparecer cualquier mensaje de una forma que no sea la habitual definida por el PAW.

PROTECT puede usarse para permitir que un dibujo o una parte de una inscripción se protejan dejando que el resto del texto haga un scroll por debajo.

PICTURE permite llamar en cualquier momento a un gráfico, sea una subrutina o un dibujo completo.

WATO permite crear acciones automáticas con los objetos, como por ejemplo el dejar caer un objeto desde un árbol (que es una localida) hasta el suelo (que es otra localidad).

Hay muchos otros (108) CONDACTS, pero sólo nos hemos referido a los más significativos y que crean una diferencia con respecto al GAC.

Así, en cuanto a condiciones, hay 4 que se encargan del manejo de localidades; ocho que llevan el control actual de un objeto; cinco que se encargan de hacer un escrutinio de lo tecleado por el jugador buscando asjetivos, adverbios, preposiciones, etc.; una que se ocupa de los eventos aleatorios y otra del paso del tiempo; finalmente, una que permite abandonar el juego.

Las acciones son más variadas, hay 19 para la manipulación de objetos; tres que se encargan de realciones con el jugador; siete que se encargan de la presentación en pantalla; tres que permiten imprimir valores determinados; 13 más que se encargan del control de mensajes y su presentación en pantalla; tres modos de listar los objetos; cinco que se ocupan de la ejecución de salidas desde las tablas de Response y Procesos.

Hay cuatro acciones dedicadas a salvar y cargar la posición actual del juego, incluyendo el poderoso y útil RAMSAVE y RAMLOAD y la posibilidad de tener el comando OOPS, que permite repetir la última jugada si has metido la pata.

También hay dos modos de efectuar pausas durante el juego; dos acciones muy especiales para control interno del propio Parser y varias más difíciles de clasificar, como sonido, etc.

En cuanto al manejo de Banderas, PAW tiene ocho condiciones y 17 acciones específicas que permiten toda clase de variaciones para un mejor control del juego.

La tabla de respuestas es la que se encarga de contestar a los inputs del jugador; pero PAW tiene otras tablas que actúan de forma independiente.

Son las tablas de Procesos; donde el Verbo y el Nombre sólo se usan como recordatorio para el autor de lo que ellas ejecutan, puesto que si se cumplen las condiciones, las acciones se hacen automática e independientemente de lo tecleado por el jugador.

Vienen a ser algo así como el "turno" del PAW en el juego.

La tabla de Procesos N.°1 es revisada cada vez que se describe una nueva localidad y sería el equivalente de la tabla de ALta Prioridad del GAC. Ello permite que las acciones se ejecuten sólo una vez cuando el jugador llega a una nueva localidad o pide una redescripción.

La tabla de Procesos N.°2 es llamada después de cada input del jugador y es donde ocurren los eventos que están fuera de control.

Pero donde destaca el PAW es en la posición de crear otras 253 tablas de subprocesos. Ellas pueden ser llamadas desde Responses o desde Procesos.

Estas tablas pueden ser subllamadas o "anidadas" hasta 10 niveles, con la particularidad de que pueden ser recursivas, es decir, se pueden llamar a sí mismas.

Con un buen uso de esta facultad se pueden estructurar perfectamente los programas, poniendo todas las condiciones y acciones para cada evento en una tabla separada, lo que permite un mayor control y una enorme facilidad a la hora de corregir errores.

Se manejan, entre otros, con el comando PROCESS, que pasa la acción a la tabla específica. Este subproceso recibe entonces las mismas características que la tabla que lo llamó. Como son verdaderas subrutinas, cualquier salida desde ellas retornará el control al siguiente CONDACT de la tabla madre, que se seguirá ejecutando hasta el final.

Veamos ahora como se plantearía en el PAW nuestro ejemplo de suscripción:

Como el GAC, se pone en el vocabulario el verbo suscribir y el nombre MicroHobby.

En Responses:

a)SUSCRIBIR MICROHOBBY:
CARRIED (talón) PROCESS 3 DONE

b) SUSCRIBIR MICROHOBBY:
MESSAGE 1 (Furro, no llevas talonario)

En Process 3:

c) * * GT 100 X MESSAGE 2 (vale, envías tu talón y esperas con ansia tu ejemplar y de paso te has ahorrado 1.000 pelas) DONE.

d) ** MESSAGE 3 (No lo intentes forastero, no tienes suficientes fondos) DONE

El intérprete, al coincidir lo que ha tecleado el jugador con la primera cabecera de la tabla Response (a), pasa a ver si la condición CARRIED se cumple (que lleves el talonario), si es positivo pasa a la tabla de Procesos 3.

En Procesos 3 se chequea en (c) si tienes fondos suficientes (que la bandera 100 sea mayor que X, siendo X igual al precio de la subscripción menos 1).

Si es positivo imprime el mensaje 2. Si es negativo pasa a (d) e imprime el mensaje 3.

Si en (a) es negativo para CARRIED, cae a la siguiente cabecera, donde se limita a imprimir el mensaje 1.

DONE sólo informa a PAW que la acción ha sido ejecutada y que no debe tener en cuenta más CONDACTS o entradas.

La llamada a la tabla de procesos 3 no es obligatoria, se puede hacer todo desde Response; la hemos incluido para dar una idea de la utilidad del comando PROCESS, antes comentado.

Damos fin así a esta breve introducción a los dos Parsers más populares y usados en la creación de aventuras' Esperemos que te haya servido para aclarar un poco lo que hacen y cómo lo hace cada uno.

También, para los que pensabais que eran de muy difícil manejo, esperamos que os hayáis decidido a usarlos y tengamos pronto otro colaborador en este bello campo-aventurero tan necesitado en España, de ese talento que sin duda existe, pero al que le faltaba un instrumento mediante el cual poder expresarse: (toma cha, máximo lirismo).

Y como durante estos últimos capítulos hemos mencionado varias veces las Banderas y su gran utilidad, dedicaremos la próxima entrega al análisis de estos marcadores, base de todas las maniobras especiales de un Parser.

Andrés R. Samudio.

>