<< Anterior
Siguiente >>
Índice

Procesos y respuestas

RESPONSE
{
  <verbo entrada> <nombre entrada>
  [| <verbo entrada> <nombre entrada>...]: <lista de condactos> ;
  ...
  [ <verbo entrada> <nombre entrada>
  [| <verbo entrada> <nombre entrada>...]: <lista de condactos> ; ]
}

PROCESS <nombre de proceso> | <numero de proceso>; // Declaración de un proceso
PROCESS <nombre de proceso> | <numero de proceso>
{
  <verbo entrada> <nombre entrada>
  [| <verbo entrada> <nombre entrada>...] : <lista de condactos> ;
  ...
  [ <verbo entrada> <nombre entrada>
  [| <verbo entrada> <nombre entrada>...]: <lista de condactos> ; ]
}

Sintaxis de los procesos

Los procesos en Inpaws se identifican por un número, en cuyo caso será el número asignado en la aventura generada, o bien por un nombre. No es posible asignar ambos. En el resto del código deberemos referirnos a ese proceso por el identificativo asignado (nombre o número). En el caso de asignar un nombre al proceso, InPAWS le asignará de forma automática un número durante el proceso de compilación.

  • Verbo entrada: el verbo que se busca en la tabla de procesos o repuesta en función de lo teclado por el jugador. Puede adoptar los valores especiales _ y * para indicar "cualquier entrada", al igual que en PAWS.
  • Nombre entrada: el primer nombre que se busca en la tabla de procesos o repuesta en función de lo teclado por el jugador. Puede adoptar los valores especiales _ y * para indicar "cualquier entrada", al igual que en PAWS.
  • Lista de condactos: la lista de condactos que se ejecuta al encontrar la entradas verbo-nombre del encabezado.

Declaración de los procesos

Como caso excepcional dentro de la sintaxis de InPAWS, es obligatorio que los procesos creados por el usuario (a partir del 3) se declaren antes de su utilización. Caso de definir parte de un proceso que no ha sido declarado, fallará la compilación con un mensaje de error indicándolo.

Opciones múltiples, sinónimos y uso de operador O

Inpaws permite especificar opciones múltiples (también llamadas sinónimos) en las entradas de procesos, así como en los condactos dentro de esas entradas que sean condiciones. Para ello se debe utilizar el carácter de pipe o tubería '|' entre las entradas o condactos que queremos que se evalúen de una forma alternativa.

  • Utilización de sinónimos dentro para los encabezados de las entradas de procesos/respuestas: se indicarán las tuplas verbo-nombre para las cuales queremos repetir el cuerpo de la entrada en la aventura generada, separando esas tuplas por el carácter |.
    Ejemplo: USAR LLAVE|ABRIR PUERTA: ;
  • Utilización de opciones alternativas dentro del cuerpo de la entrada: separar las opciones alternativas (que sean condiciones) mediante el carácter |. Se generarán tantas entradas como opciones consideradas, teniendo en cuenta todas las combinaciones posibles.
    Ejemplo: ABRIR PUERTA: CARRIED llave|ISAT llave abrigo SET abierta ...;
  • Se pueden combinar ambas formas de especificar opciones alternativas:
    USAR LLAVE |ABRIR PUERTA: CARRIED llave|ISAT llave abrigo SET abierta ...;
    así como especificar tantas opciones alternativas dentro del cuerpo de los condactos como sean necesarias. Aquí es necesario tener en cuenta que cuando InPAWS encuentra una o varias de estas opciones dentro de una entrada de procesos o respuesta, va a generar tantas entradas en la aventura generada para PAW como la multiplicación del número de opciones especificadas, de forma que se cubran todas las posibilidades con todas. En el caso del último ejemplo estaríamos generando en la aventura final: 2 opciones de encabezado X 2 opciones de cuerpo de entrada = 4 entradas en la tabla.

Otros aspectos importantes a tener en cuenta

InPAWS tiene definidos por defecto los procesos 1 y 2, a los que no se podrá cambiar el nombre y por tanto debes referirte a ellos por sus números en tu código.

Del resto de códigos asignados, InPAWS intentará establecer una definición correlativa de los procesos definidos, al igual que se hace en objetos, localidades y mensajes. Si esta no es posible, el proceso de compilación finalizará con el mensaje de error: "no se pudo establecer una definición correlativa de los elementos".

No es necesario definir todo el proceso/respuesta en el mismo sitio, puedes ir ampliando el proceso/respuesta a medida que lo vayas necesitando. Por ejemplo, puedes definir las respuestas que afectan a una localidad u objeto justo después de su definición. En definitiva, se pueden abrir varios bloques referidos al mismo proceso/respuesta en distintas partes del código. El compilador agrupará todas ellas durante el proceso de generación de la aventura.

Orden de las entradas en una tabla de procesos o respuestas

Al procesar una tabla de respuestas o procesos, PAWS recorre las tablas de principio a fin buscando una entrada hasta que una de ellas ejecuta el condacto "DONE". El orden en el que están almacenadas las entradas es importante, y debe conocerlo el programador, ya que dependiendo de la entrada que se procese primero, la tabla se comportará de una forma u otra. PAWS ordena las entradas dentro de un proceso o tabla de respuesta por código de verbo primero, y por código de nombre después. Las palabras reservadas * y _ representan los códigos 1 y 255 respectivamente. Es importante resaltar aquí que se trata de una ordenación POR CÓDIGO, no por alfabeto.

Para igual verbo y nombre, el orden que establece PAWS es el de introducción de esas entradas, es decir, si tenemos varias entradas EXAMI ESPAD, la primera que aparecerá en la tabla de respuestas, y que por tanto se comprobará a la hora de buscar una respuesta adecuada a la entrada del jugador, es la que primero se haya introducido, y así sucesivamente. El comportamiento de InPAWS en relación a lo anterior respeta la filosofía de PAW, pero conviene tener en cuenta las diferencias entre una definición en fichero de texto y lo que muestra el editor de PAW de Gilsoft para evitar confusiones: El fichero de texto que contiene tu aventura InPAWS tendrá las entradas en el orden en que tú las hayas ido escribiendo, sin importar el código de palabra, pero ten en cuenta que al generar la aventura se seguirá respetando la filosofía de PAW de ordenar por código, y por tanto ese orden podría cambiar.

Para entradas de InPAWS de igual verbo y nombre, aparecerá primero en la aventura aquella que esté primero en tu fichero de texto con el fuente.

Al definir las palabras del vocabulario sin asignarles número, no podrás hacer presunciones de cuál de ellas tendrá un código menor (recuerda que el orden no es alfabético). Por tanto si quieres controlar totalmente el orden en que se recorrerán las tablas de procesos/respuestas, deberás asignar número a las palabras de vocabulario que definas y para las que quieras asegurar un orden concreto.

Parámetros en los condactos

Los parámetros utilizados en los condactos deberán ser coherentes con el tipo de dato que tengan definido. Consulta la especificación de PAW para conocerlos (en WOS tienes toda la documentación). Atendiendo al tipo de parámetro, basándonos en la nomenclatura utilizada por Gilsoft, deberemos proporcionar lo siguiente:

  • LOCNO / LOCNO+: el código o nombre de una localidad, tal como la hayamos definido. En el caso de LOCNO+, podremos utilizar las localidades “especiales”: NOTCREATED (252), CARRIED(254) y WORN(253), así como la 255 que siempre representa la localización actual del jugador.
  • MESNO / SYSNO: el código o nombre del mensaje tal y como los hayamos definido en un bloque MESSAGES o SYSMESSAGES, o bien un literal de cadena que representa al mensaje a mostrar.
  • FLAGNO: el código o nombre del flag. Recuerda que para utilizar los flags por código no es necesario haberlos definido.
  • PROCNO: el código o nombre del proceso, tal y como lo hemos declarado. Los procesos 1 y 2 están definidos por defecto y no se les puede cambiar el nombre.
  • WORD: una palabra definida en el vocabulario, o las palabras de vocabulario reservadas _ y *.
  • VALOR: en la documentación de PAW viene indicado como un rango de valores: 0-255, 0-7, etc. En el caso de uno de estos valores, podemos indicarle directamente el valor numérico que vamos a utilizar, pero también podemos utilizar palabras de vocabulario, nombres de localidad, nombres de objeto, o constantes.

Ejemplos de respuestas y procesos

RESPONSE
{
  EX CUCHI: CARRIED Cuchillo MESSAGE "Está afilado." DONE;
  EX HACHA|EX FILO: CARRIED Hacha|ISAT Hacha Bolsillo MESSAGE "Un arma mortífera." DONE;
  EX _: MESSAGE "No ves nada especial";
}

PROCESS Miproceso; // Declaración

PROCESS Miproceso  // Definición/ampliación
{
	_ _ : WHATO;
	_ _ : DONE;
}
<< Anterior
Siguiente >>
Índice