Paguaglús puede dividirse en cuatro areas principales:
Así funciona un intérprete de Paguaglús:
Los flags se ponen a cero excepto los siguientes: flag 37, el numero de objetos que el jugador puede llevar, se pone a 4, el flag 52, el número máximo de peso que el jugador puede llevar, se pone a 10. Los flags 46 & 47, el pronombre actual , se pone a 255 (sin pronombre). flag 1 se pone al numero de objetos que el jugador lleve (en las manos, no puestos). Nótese que borrar los flags tiene el efecto de que los juegos siempre comienzan en la localidad cero. Esto es porque el flag 38, la localidad actual del jugador, es ahora cero.
Si el flag 2 no es cero es decrementado. Si esta oscuro (el flag 0 no vale 0) y el flag 3 no es zero se decrementa en uno también. Si está oscuro el flag 0 no vale 0 y no hay ningún objeto fuente de luz, el flag 4 es decrementado.
Se borra la pantalla si el modo actual de pantalla (contenidos del flag 40) es par.
Si está oscuro, y no hay objetos con luz, se muestra el mensaje del sistema 0 (referido como SM0 - "Esta muy oscuro para ver nada"). En otro caso la descripción de la localidad se muestra (sin retorno de carro al final, el cursor queda justo detrás de la ultima letra o carácter de la misma).
El diagrama de flujo 2 en la siguiente sección describe el proceso de ejecución de una tabla de proceso. El proceso 1 se usa principalmente para poner entradas que añadirán información extra a la descripción de la localidad actual. Por ejemplo, detalles sobre puertas abiertas, objetos presentes, etc.
En este momento entramos en el bucle principal, que controla cada fase de tiempo (es decir, cada vez que una frase se obtiene del jugador o que ocurre un timeout mientras se espera).
Esto contiene el control principal de los turnos de Paguaglús en el juego. Se usa para implementar movimientos y acciones de PSIs, eventos no controlados por el jugador como por ejemplo puentes que se hunden, y demás.
Los flags 5 a 8 son decrementados si no valen 0. Si esta oscuro y el flag 9 no es 0 es decrementado. Si esta oscuro, el flag 10 no es cero, y además no hay objetos que den luz se decrementa el flag 10.
Se llama al parser para extraer una frase y convertirla en una sentencia lógica. Si el buffer de input esta vacío, se le pide al jugador una nueva orden. En ese caso se mostrará el prompt, que será el mensaje del sistema cuyo numero esté en flag 42 (si el valor es cero se seleccionarán los mensajes del sistema 2, 3,4 y 5 con un ratio de posibilidades de 30:30:30:10 respectivamente).
Si la opción de timeout (exceso de tiempo de espera) está seleccionada, lo cual se hace poniendo en el flag 48 un valor superior a cero, entonces la rutina de esperar una orden del jugador puede tener limite de tiempo. En caso de que se pase del tiempo, el SM35 ("El tiempo pasa...") se muestra y se reprocesa el proceso 2.
Se extrae una frase convirtiéndola en una SL (sentencia lógica) convirtiendo las palabras presentes, que hay en el vocabulario, en su valor numerico y poniéndolas en los flags correspondientes (aquellos que guardan el numero del verbo, nombre, adjetivo, etc. de la SL actual).
Si no se encuentra ninguna frase válida el SM6 ("No entiendo") es mostrado, y se llama de nuevo al proceso 2.
Los turnos (flags 31 y 32), que son el numero de frases válidas extraídas por el parser, se incrementa en uno. Pese a permitir los flags mantener valores altos se utiliza el viejo sistema de mantener dos valores de 8 bits de PAW en cada flag para formar un valor de 16 bits por compatibilidad [*].
La tabla de respuestas (Proceso 0) es ejecutada entonces, buscando una entrada que concuerde con el verbo y nombre1 de la actual SL, usando las rutinas de proceso que se describen mas adelante.
Si se tiene éxito ejecutando una acción (por ejemplo si Paguaglús ejecuta cualquier acción distinta de NOTDONE) entonces vuelve y salta de nuevo a ejecutar el proceso 2.
Se realiza una búsqueda en las conexiones entre localidad para la localidad actual, buscando una palabra que concuerde con el verbo de la actual SL. Si se encuentra una, entonces la localidad actual del jugador (flag 38) toma el valor del número asociado con la palabra. Entonces se ejecuta un retorno a la zona donde se describe la localidad actual. En caso contrario Paguaglús escribe el SM7 ("No se puede ir en esa dirección") si el valor numérico del verbo de la SL actual es menor o igual que 14, o el SM8 ("No puedes hacer eso"). En ambos casos se fuerza una ejecución adicional del proceso 2.
La tabla de respuestas es el proceso 0, así que esta sección va también referida a ella.
Básicamente, Paguaglús mira cada entrada en la tabla hasta que esta se acaba. Suponiendo que haya alguna entrada, se asegurara de que el verbo y el nombre de la misma concuerden con la SL. El uso del carácter '_', tanto como verbo como como nombre, hará que case con cualquier palabra en la SL. Por tanto, entradas con el valor "_ _" (guión bajo - espacio - guión bajo) causaran la ejecución de dicha entrada independientemente de lo que haya en la SL.
Una vez en una entrada Paguaglús ejecutará cada condacto uno a uno; en caso de ser una condición, si se cumple, seguirá con el siguiente condacto. En caso contrario dejará de ejecutar la entrada actual y seguirá evaluando las siguientes entradas (si hay mas). Hay una excepción a esto, el comando QUIT, que en caso de fallar saldrá completamente de la tabla (esto no se muestra en el diagrama 2 por claridad).
Los condactos pueden dividirse en cinco tipos:
Puede parecer que QUIT actúa como una acción de tipo 4, pero es realmente una condición. El listado de condactos al final de este manual muestra de que tipo es cada uno.
Cada intérprete Glulx tiene un modo distinto de ejecutar una aventura incluida en un fichero ULX, así que os sugiero os miréis la documentación del mismo.
Aquí sigue una descripción detallada de cada condacto. Están divididos en grupos de acuerdo a su función dentro de Paguaglús; cosas como flags, objetos,. Etc. Y dan algunas pistas sobre su posible uso.
Se usarán algunas abreviaturas:
Tabla 1 - abreviaturas
Tabla 2- condiciones de localidad
Tabla 3 - condiciones de localidad de objeto
Tabla 4 - condiciones de valor de los flags
Estas condiciones permiten condicionar más la orden dada por el jugador, añadiendo adverbios, adjetivos, etc. Se recomienda que solo se use la palabra específica (o la ausencia de palabra usando "_") en caso de ser estrictamente necesario, para permitir más flexibilidad a la hora de que el jugador teclee la orden (y evitar el síndrome de la palabra exacta).
Tabla 5- condiciones de vocabulario
Las siguientes condiciones son para condiciones aleatorias. Puedes usarlas para poner una posibilidad de que el jugador caiga de un árbol durante un rayo en una tormenta, para que un puente se caiga, etc. No abuses de esta posibilidad, premite siempre al jugador evitar esas posibilidades para no caer en muertes súbitas e inexplicables que restan jugabilidad.
_ _ TIMEOUT MESSAGE 0(en la que el mensaje 0 dice "Despiértate dormilón")
Tabla 6- condiciones aleatorias
Tabla 7- acciones de posición de objetos
Las seis acciones siguientes son versiones automáticas de GET, DROP, WEAR, REMOVE, PUTIN y TAKEOUT. Son automáticas en el sentido de que no se necesita especificar el objeto, sino que se convierte el actual nombre (y adjetivo) de la SL actual en un objeto y lo trata.
La búsqueda se hace por un objeto buscado en diferentes localidades en un orden de preferencia determinado. Esta búsqueda priorizada permite a Paguaglús saber qué objeto esta implicado si existe mas de un objeto con el mismo nombre (si el adjetivo no esta especificado) dependiendo de si el objeto esta puesto, en las manos, en la localidad actual o en un contenedor.
Tabla 8- acciones automáticas
Tabla 9- acciones de objetos y flags
_ _ MOVE 38 ;Intenta mover al jugadorEsta capacidad puede ser usada para dar a los personajes una movimiento aleatorio en direcciones válidas, cambiando el verbo de la SL actual a un valor aleatorio de palabra de movimiento y usando MOVE para decidir si el personaje puede o no ir en esa dirección.
DESC ;Describe la nueva localidad.
_ _ LT 33 14 ;palabra de movimiento?
SYSMESS 7 ;"No puedo ir por ahí.."
DONE
_ _ SYSMESS 8 ;"No puedo hacer eso"
Tabla 10- acciones de flags
Tabla 11- acciones de flags relativos al jugador
Tabla 12 - acciones de modo de pantalla y formato
_ _ MES 10 ;"llevas "puede usarse para mostrarle al jugador el dinero que lleva.
PRINT 100
MESSAGE 11 ;" monedas de oro."
Tabla 13- acciones de escribir flags
Tabla 14- acciones de control de pantalla
Tabla 15- acciones de listado de objetos
Tabla 16- acciones de control
Tabla 17- acciones de salida de proceso
RAMLO _ COPYFF 30 255Puede utilizarse para mantener la puntuación actual, de modo que el jugador no pueda usar RAMSAVE/RAMLOAD como una manera de conseguir un 100%.
RAMLOAD 254
COPYFF 255 30
DESC
Tabla 18- acciones de grabación/carga de partida
Estas acciones pueden usarse para implementar un comando OOPS, común en otros sistemas para llevar el juego al punto anterior (generalmente a un fracaso o muerte), creando una entrada en el proceso 2 que automáticamente haga un RAMSAVE en cada turno.
Tabla 19- acciones de pausa
_ _ PARSE ;haz esto siemprehabrá una o mas entradas de llamada que serán algo como:
MESSAGE x ;"No te entiende"
DONE
word word lista de condactos ;Cualquier frase que el PSI entienda
_ _ MESSAGE x ;"No te entiende muy bien"
DECIR name SAME pos 38 ;Esta aquí el PSI?
PROCESS y ;Decodificarconversación
DONE ;la SL ha sido destruida, así que siempre DONE
DECIR name MESSAGE x ;"no esta aquí!"
DONE
Tabla 20- acciones del analizador de frases
Tabla 21- acciones varias
Tabla 22- acciones de estilos, gráficos y sonidos
El fichero fuente consiste en una serie de de secciones interrelacionadas describiendo la aventura:
Esta sección le dice al compilador cual va a ser el carácter que va a ser usado como la palabra nula. En Paguaglús dicho carácter se da por supuesto que es el guión bajo, subrayado (underline/underscore). Siempre debe ser el guión bajo, esta sección se ha mantenido por compatibilidad con el PAW. No se aceptará otro carácter.
Cada entrada en esta sección contiene una palabra (o los cinco primeros caracteres de una palabra), un numero de palabra y un tipo de palabra. Las palabras con igual tipo y valor son consideradas sinónimas.
Esta sección contiene mensajes usados por el interprete, que son numerados desde el numero 0. La descripción del intérprete, en capítulos anteriores, indica cuando son usados dichos mensajes. Adicionalmente pueden incluirse más mensajes a favor del jugador.
Esta sección contiene el texto de cualquier mensaje que el programador requiera para su aventura, partiendo del mensaje 0.
Esta sección, que tiene una entrada para cada objeto, contiene el texto que se usara como descripción de dichos objetos. Los objetos se numeran del 0 en adelante. El objeto 0 se da por supuesto que es una fuente de luz.
Esta sección tiene una entrada para cada una de las localidades del juego. La entradas se numeran de 0 en adelante. La localidad 0 es en la que empieza el juego.
Esta sección tiene una entrada por cada localidad y cada una puede estar bien vacía (nula) o bien con movimientos. Un movimiento consiste en un verbo de movimiento seguido de un numero de localidad (a la que se accede desde dicha localidad poniendo el verbo de movimiento).
Una típica entrada será:- SUR 6 ESTE 7 SALIR 6 NORTE 5
que significa que SALIR o SUR nos llevan a la localidad 6, ESTE a la localidad 7 y NORTE a la 5. si hay verbos sinónimos no es necesario repetirlos, así si E y ESTE son sinónimos bastará con poner uno de ellos.
Nota 1. Cuando la aventura este en juego sólo el verbo de la SL causará el movimiento.
Nota 2. Si un movimiento es ejecutado en la tabla de respuestas usando la acción GOTO, entonces puede no ser necesaria en la tabla de conexiones, a no ser que dicha salida pueda ser realizada por un PSI mediante la orden MOVE.
Esta sección tiene una entrada para cada objeto que especifica:-
1.La localidad inicial del objeto.
2.El peso del objeto.
3.Si el objeto es un contenedor.
4.Si el objeto es una prenda.
5.El nombre y adjetivo asociados con el objeto.
Estas secciones son el corazón del código de Paguaglús:
Cada entrada contiene un verbo y un nombre que casaran o no con la SL actual, seguidas de un numero determinado de condactos.
Ejecutado por Paguaglús tras la descripción de localidad.
Ejecutado por Paguaglús cada turno.
Procesos opcionales para ser usados por el programador a los que se puede llamar con la acción PROCESS.
El fichero fuente consiste en una serie de secciones que deben estar presentes en el orden correcto. Cualquier cosa tras un punto y coma que no sea parte de un texto es ignorada, considerándose un comentario.
Las líneas en blanco sólo se permiten en las tablas de procesos.
En las definiciones del fichero fuente habrá:
1.w-s significa espacio en blanco, es decir, espacios o el carácter TAB (tabulador)
2. Las cosas que vayan entre corchetes [ ] son opcionales.
3.EOL significa Fin de Linea
La sección de control consiste en dos lineas tal que así: /CTL [comentario] EOL NULLWORD [comentario] EOL
Nótese que NULLWORD es el carácter que se usará después como palabra nula. Debe ser obligatoriamente el carácter de guión bajo "_". Esta sección se mantiene por compatibilidad con el PAW.
La sección de vocabulario empieza con la linea: /VOC [comentario] EOL
y puede ir seguida de cualquier numero de lineas tal que así: [w-s] PALABRA w-s VALOR w-s TIPO_PALABRA [w-s[;comentario]] EOL
Notas
1.sólo los 5 primeros caracteres de la palabra son tenidos en cuenta
2.Son convertidas a mayúsculas, solo A-Z y 0-9 son caracteres válidos en una palabra.
3.No se admiten palabras duplicadas
4.El valor esta en el rango 1-254
5.El tipo de palabra debe ser uno de estos: * VERB * NOUN * ADJECTIVE * ADVERB * PREPOSITION * PRONOUN * CONJUNCTION
[N del T: Por error en versiones anteriores de Paguaglús se puso CONJUGATION en lugar de CONJUNCTION. Aunque la correcta es CONJUNCTION y ya ha sido corregido se ha permitido CONJUGATION para que los juegos antiguos puedan compilarse]
6.En el intérprete los nombres <20 pueden ser usados como verbos si no hay verbo en la SL. Los verbos <14 son usados como verbos de movimiento.
La sección de mensajes del sistema empieza con la línea: /STX [comentario] EOL
La sección de mensajes empieza con la línea: /MTX [comentario] EOL
La sección de textos de objeto empieza con la línea: /OTX [commentario] EOL
La sección de textos de localidad empieza con la línea: /LTX [commentario] EOL
En cada sección cada entrada consiste en: /n [w-s [commentario]] EOL
seguido de cualquier numero de lineas de texto que no empiecen por /
Nota
1.n debe ser un numero consecutivo y empezar en 0
2.El límite en STX es 60-255
3.El límite en MTX es 1-255
4.El límite en OTX es 1-255
5.El límite en LTX es 1-252
Las lineas de texto deben contener solo caracteres ISO-8859-1 imprimibles.
El compilador une las lineas consecutivas no vacías con un espacio.
Por ejemplo: Yo soy grande. Como tu.
Será escrito por el intérprete : Yo soy grande. Como tu.
El compilador convierte cualquier linea en blanco en saltos de linea. Yo soy grande.
Como tu.
Será escrito como: Yo soy grande. Como tu.
Del mismo modo: Yo soy grande.
Como tu.
Será escrito como: Yo soy grande.
Como tu.
La sección de conexiones empieza con la línea:- /CON [comentario] EOL
Cada entrada consiste en:- /n [w-s [comentario]] EOL
seguida de cualquier numero de lineas: [w-s] PALABRA w-s LOCNO {w-s[;comentario]] EOL
Nótese:
1.Debe haber el mismo número de entradas que en LTX
2.n debe empezar por 0 y ser consecutivo
3.PALABRA debe estar en el vocabulario como verbo (o nombre < 20).
4.LOCNO debe estar en LTX.
La definición de objetos empieza con la línea: /OBJ [comentario] EOL
Cada línea consiste en:- /n w-s LN w-s WT w-s CONT w-s WR w-s NOMBRE w-s ADJETIVO [w-s[;com]] EOL
Nótese
1.n debe empezar por cero y ser consecutivo
2.Debe haber el mismo numero de entradas que en OTX
3.LN es la localidad de el objeto cuando el juego comienza y debe existir en LTX, o ser 252-254, WORN, CARRIED o el carácter NULLWORD.
252 y el carácter NULLWORD indican 'no creado'
253 y WORN significan 'puesto'
254 y CARRIED significan 'llevado'
4.WT es el peso del objeto en el rango 0-63.
5.CONT especifica si el objeto es un contenedor. Puede ser Y o la NULLWORD.
6.WR especifica si el objeto es una prenda. Puede ser Y o la NULLWORD.
7.NOMBRE es un nombre del vocabulario que refiere el objeto o la NULLWORD.
8.ADJETIVO es un adjetivo en el vocabulario o la NULLWORD.
9.Si un objeto empieza estando 'puesto' entonces es obligatorio que sea prenda (WR=Y)
10.No puedes especificar un adjetivo si no especificas un nombre.
La sección de procesos consiste en un numero de tablas que empiezan por la línea: /PRO [w-s] n [w-s[comentario]] EOL
Nótese
1.n es el número de proceso, debe ser consecutivo y empezar por 0
2.Debe siempre especificarse un mínimo de 3 procesos, del 0 al 2.
3.Las líneas en blanco entre entradas o w-s son ignorados.
Cada entrada empieza con: V w-s N w-s PALABRA_CLAVE [w-s PARAM1 [w-s PARAM2]] [w-s[;comentario]] EOL
Seguida de cualquier numero de :- w-s PALABRA_CLAVE [w-s PARAM1 [w-s PARAM2 ]] [w-s[;comentario]] EOL
Nótese
1.V debe ser un verbo en el vocabulario, un nombre <20 o la null word.
2.N debe ser un nombre en el vocabulario o la null word.
3.PALABRA_CLAVE debe ser una CONDICION o ACCIÓN.
4.Cualquier cosa que empiece en la columna uno es considerado que es el principio de la siguiente entrada.
Las CONDICIONES y ACCIONES y sus parámetros son:-
Condiciones
Acciones
AT
locno
INVEN
NOTAT
locno
DESC
ATGT
locno
QUIT
ATLT
locno
END
PRESENT
objno
DONE
ABSENT
objno
OK
WORN
objno
ANYKEY
NOTWORN
objno
SAVE
CARRIED
objno
LOAD
NOTCARR
objno
TURNS
CHANCE
porcentaje
SCORE
ZERO
flagno
CLS
NOTZERO
flagno
DROPALL
EQ
flagno
valor
AUTOG
GT
flagno
valor
AUTOD
LT
flagno
valor
AUTOW
ADJECT1
adjective
AUTOR
ADVERB
adverb
PAUSE
valor
TIMEOUT
GOTO
locno
ISAT
objno
locno+
MESSAGE
mesno
PREP
preposition
REMOVE
objno
NOUN2
noun
GET
objno
ADJECT2
adjective
DROP
objno
SAME
flagno
flagno
WEAR
objno
NOTEQ
flagno
valor
DESTROY
objno
NOTSAME
flagno
flagno
CREATE
objno
ISNOTAT
objno
locno+
SWAP
objno
objno
PLACE
objno
locno+
SET
flagno
CLEAR
flagno
PLUS
flagno
valor
MINUS
flagno
valor
LET
flagno
valor
NEWLINE
flagno
SYSMESS
smesno
COPYOF
objno
flagno
COPYOO
objno
objno
COPYFO
flagno
objno
COPYFF
flagno
LISTOBJ
RAMSAVE
RAMLOAD
flagno
BELL
ADD
flagno
flagno
SUB
flagno
flagno
PARSE
LISTAT
locno+
PROCESS
prono
MES
mesno
MODE
valor
TIME
valor
valor
DOALL
locno+
PROMPT
smesno
WEIGH
objno
flagno
PUTIN
objno
locno
TAKEOUT
objno
flagno
NEWTEXT
ABILITY
valor
valor
WEIGHT
flagno
RANDOM
flagno
WHATO
RESET
locno
PUTO
locno+
NOTDONE
AUTOP
AUTOT
MOVE
TRANSCRIPT
value
PAPER
value
CHARSET
value
PICTURE
value
GRAPHIC
value
BEEP
value
value
SOUND
value
Tabla 23- condiciones y acciones con sus parámetros
Nótese
1.flagno y valor están en el rango 0-255.
2.porcentaje esta en el rango 1-99.
3.objno debe estar definido en OTX.
4.mesno debe estar definido en MTX.
5.smesno debe estar definido en STX.
6.prono debe ser el numero de una tabla de procesos
7.locno debe estar definido en LTX.
8.locno+ debe estar definido en LTX o ser 252-255 o la null word, 'WORN', 'CARRIED' o 'HERE'.
9.adjective debe ser un adjetivo en el vocabulario o la null word
10.adverb debe ser un adverbio en el vocabulario o la null word
11.preposition debe ser una preposición en el vocabulario o la null word
12.noun debe ser un nombre en el vocabulario o la null word
Para compilar un fichero fuente en formato de Paguaglús, ejecuta el siguiente comando: > pgc unidad:\ruta\al\fichero\fuente.sce
Si el compilador encuentra el fichero fuente, lo lee y si no hay errores genera el fichero "unidad:\ruta\al\fichero\fuente.ula" en el mismo directorio donde se encuentre el fuente.sce. Este nuevo archivo es un archivo de texto con el código ensamblador completo de tu nueva aventura. Por sí sólo no es jugable, hay que ensamblarlo para generar un ejecutable de máquina Glulx que se pueda jugar en cualquier(*) intérprete de esta plataforma. Ese es el cometido del ensamblador glulxa.
Si se quiere y se tienen los conocimientos precisos para ello, este fichero en ensamblador se puede retocar como se desee (aunque no se recomienda, porque es muy fácil equivocarse y que el juego no funcione).
El programa glulxa.exe, que forma parte de la distribución de Paguaglús, es el encargado de convertir el fichero .ula generado por el compilador en un ejecutable de máquina Glulx que se pueda jugar en cualquier intérprete de este sistema. Para realizar esta conversión, es decir, ensamblar el juego, se debe introducir el siguiente comando: > glulxa -i entrada.ula -o salida.ulx
donde "entrada.ula" es el nombre del fichero que generó el compilador, y "salida.ulx" es el nombre con el que se creará el fichero compilado. Normalmente no debería haber errores de ensamblado, porque se supone que el compilador genera código ensamblador correcto.
En el código ensamblador que se genera se incluyen en los lugares adecuados los archivos de librería .pgl que contienen las rutinas de tiempo de ejecución del juego, el "intérprete PAW". Si quieres hacer modificaciones al intérprete para todos tus juegos, es mejor que lo hagas en esas rutinas de tiempo de ejecución, que se encuentran en el directorio (carpeta) "pgl" que está en el lugar donde esté el compilador (es decir, si tu compilador pgc.exe está, por ejemplo, en C:\WINDOWS\COMMAND, las rutinas de tiempo de ejecución seguramente estén en C:\WINDOWS\COMMAND\PGL), y así tus cambios se darán para todos tus juegos.
Al igual que se indicó antes, sólo es recomendable tocar estos archivos si se tienen los conocimientos necesarios (básicamente, ensamblador de Glulx y sintaxis de los archivos .ula para glulxa).
A menudo el compilador parará en medio del proceso de compilación, dándote algún mensaje indicador del error que ha encontrado, así como del número de línea donde se dio cuenta de que había tal error. Especifico "donde se dio cuenta" porque muchas veces lo que ocurre es que malinterpreta el error, lo toma por otra cosa, y no es hasta varias líneas después que se da cuenta de que existe un error. Por eso es conveniente buscar el error en la línea indicada, y si allí no se encuentra, buscarlo en las líneas anteriores.
Existen básicamente tres tipos de errores: * Errores léxico-sintácticos: se encontró un carácter o palabra que no debería estar en ese contexto. * Errores semánticos: se encontró una palabra o valor que está fuera del rango permitido en esa posición. * Errores generales: otros errores que no son ninguno de los anteriores, y que generalmente no se deben al código fuente, sino a otras circunstancias como falta de recursos, por ejemplo.
A continuación se listan todos los errores que el compilador puede darte, clasificados en esas tres categorías:
"Error sintáctico: se esperaba XXXXX en la línea NNNNN."
donde XXXXX puede ser "/ctl", "/voc", "/otx", "/ltx", "/con", "/stx", "/mtx", "/obj", "/pro", "_", "una palabra", "un número", "/número", "final de fichero".
Se ha encontrado un símbolo del lenguaje en el lugar donde debería aparecer otro. Busca secciones que te falten o que estén mal escritas.
"Error de vocabulario. Palabra duplicada en línea NNNNN."
Has repetido la misma palabra con la misma función. Elimina una de las repeticiones.
"Error semántico. El tipo de palabra no es válido en línea NNNNN."
Has escrito mal un tipo de palabra. Repásalo, y recuerda que una palabra puede ser: adverb, verb, pronoun, adjective, noun, preposition o conjunction.
"Error semántico. Texto no consecutivo en línea NNNNN."
Te has saltado un número de texto en una de las secciones de textos (/STX, /MTX, /LTX, /OTX). Recuerda que en cada una de ellas los textos se deben empezar a numerar con el 0 y ser consecutivos.
"Error semántico. Demasiados textos en línea NNNNNN."
Has intentado definir más textos de los que el sistema permite. Este error es poco probable que salga, puesto que el límite de mensajes es de más de dos mil millones (excepto en el caso de las localidades, que como máximo puede ser 251, y de los objetos, que como máximo puede ser 255).
"Error semántico. pocos textos de sistema en línea NNNNN."
Has olvidado poner uno o más textos de sistema. Recuerda que en Paguaglús deben existir como mínimo los 60 primeros mensajes del sistema.
"Error semántico. Conexiones desordenadas. Línea NNNNN."
En la sección /CON deben aparecer todas las localidades, empezando por la 0 y en orden, aunque no tengan conexiones con otras. Repásalo.
"Error semántico. "XXXXX" no es una dirección. Línea NNNNN."
En la sección de conexiones (/CON), has intentado conectar una localidad con otra por medio de una palabra que no es de movimiento. Seguramente te habrás confundido al escribirla. Repásalo.
"Error semántico. "XXXXX" no es un valor válido para la posición. Línea NNNNN."
En la sección de definición de objetos (/OBJ), has intentado darle a un objeto una posición inicial no válida. Recuerda que tiene que ser un número de localidad válido, o bien la palabra CARRIED, o bien la palabra WORN, o bien un guión bajo ("_") para indicar que el objeto no está creado al inicio del juego.
"Error semántico. Se encontró "XXXXX" en lugar de "y", "Y" o "_". Línea NNNNN."
Recuerda que en la sección de definición de objetos (/OBJ), para los atributos de "contenedor" y "prenda", los únicos valores válidos son los mencionados.
"Error semántico. "XXXXX" no es una palabra del vocabulario. Línea NNNNN."
En la sección de definición de objetos (/OBJ), se ha intentado poner como nombre o adjetivo de un objeto una palabra que no existe en el vocabulario. Si te has confundido al escribirla, corrígela. Si te habías olvidado de incluirla en la sección /VOC, ponla.
"Error semántico. "XXXXX" no es un nombre del vocabulario. Línea NNNNN."
En la sección de definición de objetos (/OBJ), se ha intentado poner como nombre de un objeto una palabra que, si bien existe en el vocabulario, no está definida como nombre (noun). Si te has confundido al escribirla, corrígela. Si te habías olvidado de incluirla en la sección /VOC, ponla.
"Error semántico. "XXXXX" no es un adjetivo del vocabulario. Línea NNNNN."
En la sección de definición de objetos (/OBJ), se ha intentado poner como adjetivo de un objeto una palabra que, si bien existe en el vocabulario, no está definida como adjetivo (adjective). Si te has confundido al escribirla, corrígela. Si te habías olvidado de incluirla en la sección /VOC, ponla.
"Error semántico. Número de objeto no válido u orden incorrecto. Línea NNNNN."
En la sección de definición de objetos (/OBJ), se ha encontrado un número de objeto que no corresponde con el orden, o bien un número demasiado alto de acuerdo con los textos de objeto definidos en la sección /OTX. Recuerda que en la sección de objetos deben aparecer tantos como textos se hayan definido, empezando por el 0 y en orden ascendente hasta el último. Repásalo.
"Error semántico. "XXXXX" no es un condacto. Línea NNNNN."
Durante la compilación de un proceso se esperaba encontrar un nombre de condacto y se ha encontrado otra cosa. A menudo este error da como línea causante una en la que no se aprecia la falta. En este caso mira en las líneas anteriores y busca parámetros mal puestos o ausentes en otros condactos.
"Error semántico. Número de proceso no válido u orden incorrecto. Línea NNNNN."
Los procesos deben empezar por el número 0 (tabla de respuestas) y seguir consecutivamente (el 1, el 2, etc.). Posiblemente te hayas saltado un proceso. Repásalo.
"Error semántico. "XXXXX" no es un verbo del vocabulario. Línea NNNNN."
Durante la compilación de un proceso se esperaba encontrar un verbo al principio de una entrada y se ha encontrado otra cosa. A menudo este error da como línea causante una en la que no se aprecia la falta. En este caso mira en las líneas anteriores y busca parámetros mal puestos o ausentes en otros condactos.
"Error semántico. El valor debe estar entre 0 y 255. Línea NNNNN."
Se ha pasado como parámetro de un condacto un número fuera del rango de 0 a 255. Repásalo.
"Error semántico. El valor debe estar entre 1 y 99. Línea NNNNN."
Se ha pasado como parámetro de un condacto que esperaba un porcentaje un número fuera del rango de 1 a 99. Repásalo.
"Error semántico. Número de objeto no válido. Línea NNNNN."
A un condacto que recibe como parámetro un número de objeto se le ha pasado un número que no corresponde con un objeto definido. Repásalo y comprueba que el objeto al que se refiere se ha definido (en las secciones /OTX y /OBJ).
"Error semántico. Número de mensaje no válido. Línea NNNNN."
A un condacto que recibe como parámetro un número de mensaje se le ha pasado un número que no corresponde con un mensaje definido. Repásalo y comprueba que el mensaje al que se refiere se ha definido (en la sección /MTX).
"Error semántico. Número de mensaje del sistema no válido. Línea NNNNN."
A un condacto que recibe como parámetro un número de mensaje del sistema se le ha pasado un número que no corresponde con un mensaje del sistema definido. Repásalo y comprueba que el mensaje del sistema al que se refiere se ha definido (en la sección /STX).
"Error semántico. Número de proceso no válido. Línea NNNNN."
A un condacto que recibe como parámetro un número de proceso (PROCESS) se le ha pasado un número que no corresponde con un proceso definido. Repásalo y comprueba que el proceso al que se refiere se ha definido (como sección /PRO).
"Error semántico. Número de localidad no válido. Línea NNNNN."
A un condacto que recibe como parámetro un número de localidad se le ha pasado un número que no corresponde con una localidad definida. Repásalo y comprueba que la localidad a la que se refiere se ha definido (en la sección /LTX).
"Error: comando no válido, falta el fichero de entrada"
Al intentar ejecutar el compilador, éste no ha recibido un nombre de fichero como parámetro, o bien no se ha podido abrir el fichero.
"Error: no hay suficiente memoria. Línea NNNNN."
Al llegar a la línea NNNNN del archivo fuente, no se ha podido reservar memoria para seguir compilando. Puede indicar que la aventura es demasiado grande o que hay algún problema con el compilador.
"Error: error genérico."
Este tipo de error se da cuando hay algún problema interno con el compilador. Se sugiere que se informe a los desarrolladores.
Aquí comienza una serie de temas que son de difícil explicación en otros puntos dado que usan varias partes de PAW:
El parser da una pequeña lección de castellano.
Los Objetos serán mas flexibles después de leer esto.
Luz y Oscuridad da algo de luz sobre dicho asunto
PSIs añade algo de carácter a tus juegos.
El parser trabaja buscando en cada linea de ordenes del jugador palabras que estén en el vocabulario, extrayendo frases que puede convertir en sentencias lógicas (SL).
Cuando se extrae una frase, las tablas de respuestas y conexiones son examinadas para ver si la SL es reconocida. En caso contrario el SM 8 ("No puedo hacer eso") o el SM 7 ("No puedo ir en esa dirección") son mostrados dependiendo del valor del verbo (>13 o no). Después se solicita nuevas órdenes.
También se solicitan nuevas ordenes si alguna acción falla de alguna manera (por ejemplo, al intentar coger un objeto demasiado pesado), o si el autor lo fuerza con una acción NEWTEXT. De otro modo los resultados podrían ser catastróficos para el jugador, por ejemplo, en el caso de la orden COGE EL HACHA Y ATACA AL TROLL probablemente no se quiera atacar al troll si no se ha conseguido caer el hacha.
Si la SL se ejecuta con éxito entonces otra frase es extraída o un nuevo texto es solicitado si no hay mas texto en el buffer.
Las frases están separadas por las conjunciones ("Y" y "ENTONCES" habitualmente) y por cualquier signo de puntuación.
Se puede usar un pronombre ("LO", normalmente) para referirse al nombre/adjetivo usado en la orden anterior, incluso si ha sido en otra entrada anterior del jugador. Los nombres cuyas palabras correspondientes tengan valores menores de 50 se consideran nombres propios y no afectan a este pronombre. Sin embargo, debido a una limitación del intérprete de Paguaglús, el jugador debe escribir el pronombre separado del verbo al que acompañe, así: "SACA LA ESPADA Y BLANDE LA" (nótese que "LA" está separado por un espacio de "BLANDE"). Se espera poder resolver esta inconveniencia en alguna versión del futuro cercano de Paguaglús.
El formato de la SL es el siguiente: Verbo(Adverbio)(Nombre1(Adjetivo1))(preposición)(Nombre2(Adjetivo2))
donde los tipos entre paréntesis son opcionales, es decir, la frase mínima es un verbo (o un nombre convertible a verbo, que es un nombre cuyo numero es <20, el cual si no hay verbo en la frase será convertido a verbo, por ejemplo. NORTE). Si se omite el verbo la SL entenderá que el verbo que se usó para la anterior SL es el correcto, es decir, COGER ESPADA Y ESCUDO funcionará correctamente. El pronombre actual será reemplazado por ESPADA en dicho ejemplo. No cambiará hasta que el verbo o nombre convertible cambie.
Nótese que la frase no tiene por que ser estrictamente escrita por el jugador en este formato. Por ejemplo: COGE LA ESPADA PEQUEÑA RAPIDAMENTE RAPIDAMENTE COGE LA ESPADA PEQUEÑA RAPIDAMENTE LA ESPADA PEQUEÑA COGE
Son ejemplos equivalente que producen la misma SL, aunque la ultima opción es rara de encontrar en un castellano que no sea lírico.
Un frase real puede ser : COGE TODO. ABRE LA PUERTA Y VE AL SUR, ENTONCES COGE EL CUBO Y MIRA DENTRO DE E L.
Se convertirá en cinco SL: COGE TODO ABRE PUERTA (porque LA no está en el vocabulario) SUR (porque VE y AL no están en el vocabulario) COGE CUBO MIRA DENTRO (preposición) CUBO (de EL, pronombre)
Nótese que DOALL no generará el objeto descrito por el nombre 2 (Adjetivo 2) de la SL. Eso facilita un metodo simple de implementar EXCEPTO. Por ejemplo, COGE TODO EXCEPTO EL PEZ. Tiene el también el efecto secundario de no permitir PON TODO EXCEPTO EL PEZ EN EL CUBO, dado que tiene tres nombres.
Los guiones de subrayado (_) en los textos son convertidos durante el juego en el último objeto referenciado por GET, DROP, DESTROY, etc. Esto es principalmente debido al hecho de que aunque GET, DROP, etc. indican su éxito (o fallo) pueden ser usados para examinar objetos y otros informes automáticos. El flag 53 controla el modo en el que los objetos son mostrados en las acciones LISTOBJ y LISTAT. Si el flag vale 64 (es decir, el bit 6 está activado) los objetos serán listados sin saltos de linea entre ellos, formando una frase correcta en castellano.
El formato es el siguiente:
SM53 ("nada") - solo puede aparecer con LISTAT
objeto SM48(".")
objeto SM47(" y ") objeto SM48(".")
objeto SM46(", ") objeto SM47 (" y ") objeto SM48(".")
Además, el bit 7 del flag 53 se activará (el flag valdrá mas de 127) si se mostro al menos un objeto. Esto te permite decidir si se quiere añadir una acción NEWLINE.
Una acción LISTAT generalmente irá precedida de un mensaje.
La descripción de objeto es construida a partir de la descripción completa dada en la tabla de textos de objeto. El formato preferido para dicha descripción es: Artículo.indefinido nombre (adjetivo) . texto extra.
donde , el artículo indefinido es "Un, Una, Algunos, etc.", y los adjetivos y nombres tienen letras minúsculas (por ejemplo "Una llave pequeña" o "Una naranja. Mas bien podrida").
Paguaglús extrae una descripción del objeto de dos modos:
1.Para GET, DROP etc (es decir, "_") el artículo indefinido se salta, y la descripción es escrita hasta el primer punto y seguido. Por ejemplo "He cogido: llave pequeña"
2.Para una lista compuesta de objetos se cambia la letra del artículo indefinido a minúsculas. Y la descripción es escrita hasta el primer punto y seguido. Por ejemplo: "En la bolsa hay una llave pequeña".
Obviamente, si no usamos "_" o listas compuestas, en tal caso se es libre de escribir los objetos como uno quiera.
[N. del A.: la descripción dada corresponde al comportamiento del PAW PC original. Sin embargo, en Paguaglús en ambos casos se elimina la primera palabra de la descripción del objeto. Se espera corregir esta inconveniencia para una versión próxima de Paguaglús.]
[N. del T.: alguna facilidad que tiene el lenguaje inglés, como que el artículo indefinido sea neutro y se use igual en femenino como en masculino, no la tiene el castellano. Así nos vemos obligados a poner los mensajes de GET, DROP etc. al estilo del punto 1 anterior o bien a poner el artículo indefinido en minúsculas para que Paguaglús entienda que no hay artículo indefinido y muestre todo el texto del mensaje (hasta el punto y seguido) "Coges una llave pequeña").]
Importante: Si un objeto va a ser un contenedor, debe haber una localidad sin usar con el mismo numero que el objeto, dado que Paguaglús la usará como "dentro de" de dicho objeto. Por ejemplo el objeto cuyo numero es 4 si es un contenedor obliga a crear la localidad 4 y dejarla sin usar como localidad normal.
La oscuridad es algo común en las aventuras de hoy en día, usado correctamente puede dar cierta sensación de realismo.
En Paguaglús, se puede 'crear' oscuridad dando al flag 0 cualquier valor distinto de cero. Esto debe hacerse cuando el jugador se mueve dentro y fuera de 'la oscuridad', es decir, el movimiento debe hacerse con un GOTO en la tabla de respuestas para permitir la ejecución de la acción CLEAR y SET.
Si al jugador se le va a dar una fuente de luz entonces el objeto 0 es la mejor manera de hacerlo. Una fuente de luz no tiene por que ser una antorcha o lámpara, con un poco de imaginación puede ser unas gafas de infla-rojos o un haz láser.
Pongamos por ejemplo la creación de un ciclo de día y noche, sobre 24 rodajas de tiempo que pongamos que equivalen a una hora.
Las entradas necesarias en el proceso 2 son: _ _ EQ 5 0 ;Fin de ciclo LET 5 24 ;iniciar de nuevo el ciclo
_ _ EQ 5 18 ;Puesta de sol SET 0 MESSAGE x
_ _ EQ 5 6 ;Salida del sol CLEAR 0 MESSAGE y
Importe: si parte del juego es bajo tierra o dentro de un edificio no olvides comprobar si el jugador puede realmente ver si sale el sol o se pone desde donde está, antes de poner los mensajes.
Lo mas importante a recordar es que un personaje (o PSI) es una palabra en el vocabulario (habitualmente un nombre con valor inferior a 50 para que sea nombre propio), algunos flags, una serie de mensajes y algunas entradas en una o mas tablas de procesos. Un flag guarda donde están, los mensajes dan información sobre sus movimientos y acciones y las tablas de procesos lo atan todo junto.
Bien, imaginemos un personaje llamado Gervasio que puede moverse de manera independiente . Es descrito en el vocabulario como GERVA (palabra con valor 25, nombre). El flag 20 contiene su localidad actual. El proceso 3 llevara toda conversación que se pueda tener con él, mientras que el process 4 manejará sus movimientos y acciones. Las siguientes entradas le permitirán moverse cuando tu le pidas que lo haga. Tras un corto tiempo se 'aburrirá' y se desvanecerá en una nube de humo.
Mensaje 1
Gervasio no parece entender lo que le dices.
Mensaje 2
¡No hay nadie aquí con ese nombre!
Mensaje 3
Gervasio contesta "Hola"
Mensaje 4
Gervasio va por ese camino como si no tuviera otra cosa que hacer.
Mensaje 5
Gervasio el mago está aquí.
Mensaje 6
Gervasio ignora 'educadamente' lo que dices.
Mensaje 7
Gervasio gira su rostro para mirarte y en su profunda voz anuncia: "Estoy cansado de todo esto, me voy a un juego mas grande" y con un "puff" desaparece en medio de una nube de humo azul.
Tabla 24- mensajes ejemplo del PSI
Primero: la presencia de Gervasio en la localidad debe anunciarse, así que en el proceso 1, que es llamado tras la descripción de cada localidad, comprobamos si está aquí (es decir, que el flag 20 es igual al flag 38).
Nótese que nos aseguramos que no estamos en la localidad 0 porque es la localidad inicial de presentación y en ese momento seguro que el flag 20 y el 38 valen los dos 0. _ _ SAME 20 38 ;Comprobar que Gervasio está aquí NOTAT 0 ;No estamos en la localidad 0 MESSAGE 5 ;Decir que Gervasio está aquí
Para manejar conversaciones con Gervasio necesitamos dos entradas en la tabla de respuestas tal que así: - DECIR GERVA PREP A ;Esto puede omitirse para ; permitir que las sentencias cortas ; verbo+nombre sean entendidas
SAME 20 38 ; Asegurarnos de que Gervasio está aquí PROCESS 3 ; Manejar conversación DONE ; Prevenir que se ejecuten mas acciones c on la ; SL que se le dice al jugador
DECIR _ PREP A ;de nuevo opcional MESSAGE 2 ; no hay nadie con ese nombre DONE
Las siguientes entradas en el proceso 3: _ _ PARSE ;Esta orden siempre se ejecuta para convertir ; Las ordenes de entrada en una SL MESSAGE 1 ;PARSE llega aquí si falla al tratar de formar SL DONE ;Nótese que la SL se ha corrompido y que no ; ; debe ejecutarse mas en la tabla
HOLA _ MESSAGE 3 ;Asumiendo que HOLA es un verbo del Vocabulario DONE
_ _ LT 34 14 ;se le ha dado una orden de movimiento a Gervasio? MOVE 20 ; comprobar que hay una salida en esa dirección MESSAGE 4 ;Decirle al jugador que lo hizo si la había DONE
_ _ MESSAGE 6 ;Te ignora
Obviamente harían falta muchas más entradas para dar a Gervasio la apariencia de alguien que entiende el habla, pero con unas pocas entradas inteligentes puede dar una amplia variedad de respuestas.
Finalmente; para dar a Gervasio una oportunidad de desaparecer cuando se aburra, necesitamos una entrada en el proceso 4 tal que: _ _ EQ 20 2 ;En la localidad 2? CHANCE 10 ;10% posibilidad SET 20 ;La localidad 255 no existe AT 2 ;estamos donde el estaba? MESSAGE 7 ;PUFF! - Decir al jugador que desparece
Y una entrada en el proceso 2 para llamar regularmente al proceso 4.
De este modo un personaje convincente puede ser construido. Un PSI añade una gran sensación de realismo a los juegos, especialmente si se requiere interacción con él.
SM0 - se usa en lugar de la descripción de localidad cuando esta oscuro.
SM1 - es mostrado por LISTOBJ si hay al menos un objeto presente.
SM2 to SM5 - son los cuatro prompt de la entrada de ordenes del jugador que son mostrados aleatoriamente a no ser que el flag 42 tome el valor de un numero de mensaje válido.
SM6 - es mostrado por el parser cuando es incapaz de entender nada en la orden del jugador.
SM7 - es mostrado si no se realizo acción (o se ejecuto NOTDONE) en la tabla de respuestas y el verbo es < 14.
SM8 - es mostrado si no se realizo acción (o se ejecuto NOTDONE) en la tabla de respuestas y el verbo es > 13.
SM9 to SM11 - son mostrados por la acción END.
SM12 - mostrado por la acción QUIT.
SM13 y 14 - son mostrados por la acción END.
SM15 - mensaje para la acción OK.
SM16 - mensaje para la acción ANYKEY.
SM17 to SM20 - Son los mensajes para la acción TURNS.
SM21 and SM22 - Son los mensajes para la acción SCORE.
SM23 and SM29 - son los primeros de muchos mensajes producidos por acciones de manipulación de objetos.
SM30 - La respuesta positiva esperado por END y QUIT.
SM31 - La respuesta negativa esperado por END y QUIT.
SM32 - Se produce cuando se ha llenado la pantalla de texto.
SM33 - el carácter del input.
SM34 - libre.
SM35 - Mostrado cuando ocurre un timeout.
SM36 to SM45 - son mas mensajes producidos por las acciones de manipulación.
SM46 - el enlace entre los objetos de una lista de objetos.
SM47 - el enlace final entre los dos últimos objetos de una lista de objetos.
SM48 - La terminación de una lista de objetos (mostrada por LISTOBJ y LISTAT, así que cuidado).
SM49 and SM50 - más mensajes de objetos.
SM51 - terminación para las frases compuestas de PUTIN/TAKEOUT (y AUTOP/AUTOT).
SM52 - mensaje de último objeto.
SM53 - mensaje para la acción LISTAT si no hay objetos que listar.
SM54 a SM60 son mensajes usados por las acciones SAVE y LOAD.
Los flags normales están libres para el uso en los juegos. Los flags de auto-decremento (2 a 10)están libres para uso, pero se debe estar seguro de para qué se usan. Otros flags solo deberían ser modificados usando la acción adecuada, o siendo muy cuidadoso con sus contenidos.
flag 0 Cuando no es cero indica que el juego está oscuro (ver también el objeto 0).
flag 1 Guarda la cantidad de objetos que el jugador lleva (no puestos).
Los siguientes nueve flags son decrementados si no valen 0 por Paguaglús:
flag 2 Cuando se describe una localidad.
flag 3 Cuando se describe una localidad y esta oscuro (flag 0 no vale 0).
flag 4 Cuando se describe una localidad y esta oscuro (flag 0 no vale 0) y el objeto 0 esta ausente.
flag 5 a 8 Cada turno (es decir, cada frase / timeout).
flag 9 Cada turno que esta oscuro.
flag 10 Cada turno que esta oscuro y el objeto 0 esta ausente.
flag 11 a 28 están libres para tus propios juegos.
flag 29 guarda los indicadores de control de gráficos en la versión para Spectrum de PAW.
flag 30 La puntuación.
flag 31/32 (LSB/MSB) guarda el numero de turnos que lleva jugando el jugador (realmente es el numero de frases extraídas del jugador).
flag 33 guarda el verbo de la SL actual.
flag 34 guarda el primer nombre de la SL actual.
flag 35 guarda el adjetivo de la SL actual.
flag 36 guarda el adverbio de la SL actual.
flag 37 guarda el numero máximo de objetos que el jugador puede llevar (inicialmente 4). Se cambia con la acción ABILITY.
flag 38 guarda la localidad actual del jugador.
flag 39 guarda la linea superior de la pantalla en la version Spectrum de PAW.
flag 40 guarda el modo de pantalla, se cambia con la acción MODE.
Bit 0. Impide que se borre la pantalla en un DESC.
flag 41 guarda la linea que separa grafico de texto en la version para Spectrum.
flag 42 guarda el prompt a usar (un numero de mensaje del sistema- 0 selecciona uno de cuatro mensajes aleatoriamente). Se cambia con la orden PROMPT.
flag 43 guarda la preposición de la SL actual.
flag 44 guarda el adjetivo para el segundo nombre de la SL actual.
flag 46 guarda el nombre para el pronombre de la SL actual.
flag 47 guarda el adjetivo para el pronombre de la SL actual.
flag 48 guarda la duración del timeout.
flag 49 guarda los indicadores de control del timeout.
Bit 7 - Activo si ocurrió un timeout el ultimo turno.
Bit 2 - Activado si el timeout puede ocurrir en ANYKEY.
Bit 0 - Activar para que el timeout solo pueda ocurrir al inicio del input.
Se cambia usando TIME (al igual que el flag 48), TIMEOUT comprueba el bit 7 de este flag.
flag 50 guarda el objeto para el bucle DOALL. Es decir, el value que sigue en DOALL.
flag 51 guarda el ultimo objeto referenciado por GET/DROP/WEAR/WHATO etc. Este es el numero del objeto actualmente referenciado que será escrito en lugar del guión bajo en los textos.
flag 52 guarda la fuerza del jugador (el máximo peso de los objetos llevados o puestos, inicialmente 10).
flag 53 guarda los indicadores de escritura de objetos.
Bit 7 -Activar si cualquier objeto se ha impreso como parte de LISTOBJ o LISTAT.
Bit 6 -Activar para forzar listado de objetos continuo. Es decir, LET 53 64 hará que Paguaglús liste los objetos todos en la misma linea formando una frase válida.
flag 54 guarda la localidad actual del objeto actualmente referenciado.
flag 55 guarda el peso del objeto actualmente referenciado.
flag 56 es 128 si el objeto actualmente referenciado es contenedor.
flag 57 es 128 si el objeto actualmente referenciado es prenda.
flag 58 & 59 no deben usarse, dado que pueden ser usados para extensiones de Paguaglús.
Los flags del 60 a 255 están disponibles para tu propio uso.
AT
locno
Cierto si el jugador esta en la localidad especificada.
NOTAT
locno
Cierto si el jugador no está en la localidad especificada.
ATGT
locno
Cierto si el jugador está en una localidad cuyo número es mayor que el especificado.
ATLT
locno
Cierto si el jugador está en una localidad cuyo número es menor que el especificado.
PRESENT
objno
Cierto si el objeto está en la localidad actual del jugador, puesto o llevado.
ABSENT
objno
Cierto si el objeto no está ni en la localidad actual del jugador, ni puesto ni llevado.
WORN
objno
Cierto si el objeto lo lleva puesto el jugador.
NOTWORN
objno
Cierto si el objeto no lo lleva puesto el jugador.
CARRIED
objno
Cierto si el objeto lo lleva el jugador (pero no puesto).
NOTCARR
objno
Cierto si el objeto no lo lleva el jugador, o bien lo lleva puesto.
ISAT
objno
locno+
Cierto si el objeto se encuentra en la localidad indicada.
ISNOTAT
objno
locno+
Cierto si el objeto no se encuentra en la localidad indicada.
ZERO
flagno
Cierto si el flag tiene el valor 0.
NOTZERO
flagno
Cierto si el flag no tiene el valor 0.
EQ
flagno
0-255
Cierto si el flag tiene el valor especificado.
NOTEQ
flagno
0-255
Cierto si el flag no tiene el valor especificado.
GT
flagno
0-255
Cierto si el flag tiene un valor mayor que el dado.
LT
flagno
0-255
Cierto si el flag tiene un valor menor que el dado.
SAME
flagno
flagno
Cierto si los dos flags tienen el mismo valor.
NOTSAME
flagno
flagno
Cierto si los dos flags tienen valores distintos.
ADJECT1
word
Cierto si el adjetivo del primer nombre de la SL es la palabra dada.
ADVERB
word
Cierto si el adverbio de la SL es la palabra dada.
PREP
word
Cierto si la preposición de la SL es la palabra dada.
NOUN2
word
Cierto si el segundo nombre de la SL es la palabra dada.
ADJECT2
word
Cierto si el adjetivo del segundo nombre de la SL es la palabra dada.
CHANCE
0-99
Posibilidad aleatoria de éxito
TIMEOUT
Ultima entrada del jugador paso en timeout
QUIT
Preguntar al jugador si desea terminar y actuar en consecuencia.
Tabla 25- resumen de las condiciones
GET
4
objno
Intenta coger el objeto.
DROP
4
objno
Intenta dejar el objeto.
WEAR
4
objno
Intenta ponerse el objeto.
REMOVE
4
objno
Intenta quitarse el objeto.
CREATE
5
objno
Intenta colocar el objeto en la localidad actual del jugador.
DESTROY
5
objno
Intenta colocar el objeto en la localidad 255 (objeto inexistente).
SWAP
5
objno
objno
Intercambia las posiciones de los dos objetos.
PLACE
5
objno
locno+
Pone el objeto indicado en la localidad indicada.
PUTO
5
locno+
Pone el objeto actualmente referenciado en la localidad indicada.
PUTIN
4
objno
locno
Intenta meter el objeto en el contenedor correspondiente a la localidad.
TAKEOUT
4
objno
locno
Intenta sacar el objeto del contenedor correspondiente a la localidad.
DROPALL
5
Mueve todos los objetos que lleve el jugador a la localidad actual del mismo.
AUTOG
4
Saca de la SL el objeto referenciado y trata de cogerlo.
AUTOD
4
Saca de la SL el objeto referenciado y trata de dejarlo.
AUTOW
4
Saca de la SL el objeto referenciado y trata de ponérselo.
AUTOR
4
Saca de la SL el objeto referenciado y trata de quitárselo.
AUTOP
4
locno
Saca de la SL el objeto referenciado y trata de meterlo en el contenedor correspondiente a la localidad.
AUTOT
4
locno
Saca de la SL el objeto referenciado y trata de sacarlo del contenedor correspondiente a la localidad.
COPYOO
5
objno
objno
Pone el segundo objeto en la misma localidad que el primero.
COPYOF
5
objno
flagno
Copia posición del objeto a flag.
COPYFO
5
flagno
objno
Pone el objeto en la localidad dada por el flag.
WHATO
5
Convierte Nombre1(Adjectivo1) en objeto actual.
WEIGH
5
objno
flagno
Peso de los objetos es almacenado en flag.
SET
5
flagno
Da al flag el valor 255.
CLEAR
5
flagno
Da al flag el valor 0.
PLUS
5
flagno
0-255
Sumar valor a flag.
MINUS
5
flagno
0-255
Restar valor a flag.
LET
5
flagno
0-255
Da al flag el valor indicado.
ADD
5
flagno1
flagno2
Los contenidos de flag 1 son sumados a flag 2.
SUB
5
flagno1
flagno2
Los contenidos de flag 1 son restados de flag2.
COPYFF
5
flagno1
flagno2
Da al flag 2 el valor del flag 1.
RANDOM
5
flagno
Poner a un valor aleatorio de 0 a 99.
MOVE
5
flagno
Ajusta el valor del flag de acuerdo al verbo de la SL y las conexiones de la localidad (permite movimientos de PSIs).
GOTO
5
locno
Mueve al jugador a la localidad indicada.
WEIGHT
5
flagno
El peso de los objetos llevados y puestos es puesto en el flag.
ABILITY
5
0-255
0-255
Indica el peso y máximo numero de objetos del jugador.
MODE
5
0-255
Controla si se limpia la pantalla antes de describir las localidades: con 0 limpia, con otro valor no.
PROMPT
5
sysno
Texto en el input, 0 es aleatorio.
TIME
5
0-255
0-255
Controla las opciones y el tiempo del temporizador.
5
flagno
Muestra valor del flag.
TURNS
5
Muestra los turnos consumidos por el jugador.
SCORE
5
Muestra la puntuación obtenida por el jugador.
CLS
5
Limpia la pantalla de texto.
NEWLINE
5
Imprime un retorno de carro.
MES
5
mesno
Mensaje sin nueva linea.
MESSAGE
5
mesno
Mensaje con nueva linea.
SYSMESS
5
sysno
Mensaje del sistema sin nueva linea.
LISTOBJ
5
Lista los objetos de la localidad actual.
LISTAT
5
locno+
Lista objetos en una localidad especificada.
INVEN
3
Imprime el inventario del jugador.
DESC
1
Imprime la descripción de la localidad actual.
END
2
Sale de tabla para reiniciar el juego.
DONE
3
Sale de la tabla indicando que se ha hecho algo y que ya se ha terminado el procesamiento de la orden.
NOTDONE
3
Sale de la tabla indicando que no se ha terminado el procesamiento de la orden.
OK
3
Imprime VALE y ejecuta un DONE.
SAVE
1
Guarda la partida en disco.
LOAD
1
Carga la partida de disco.
RAMSAVE
5
Graba la partida en memoria.
RAMLOAD
5
flagno
Carga la partida de la memoria.
ANYKEY
5
Espera la pulsación de una tecla.
PAUSE
5
0-255
Pausa el programa por n/50 segundos.
PARSE
5
Convierte las ordenes del jugador en una SL valida.
NEWTEXT
5
Fuerza la perdida de las frases que queden del jugador.
PROCESS
5
prono
Ejecuta sub-procesos.
DOALL
5
locno+
Genera Nombre y adjetivo para cada objeto de la localidad.
RESET
1
locno
Mueve el jugador y los objetos presentes, reinicia los demás a su posición de inicio. Usar para encadenar juegos con LOAD.
TRANSCRIPT
5
0-255
Activa o desactiva la transcripción de la partida a disco.
EXTERN
5
0-255
Ejecuta un comando externo (no implementado).
PAPER
5
0-255
Pone el color de fondo de la ventana gráfica.
CHARSET
5
0-255
Cambia el estilo del texto.
PICTURE
5
0-255
Muestra un gráfico.
GRAPHIC
5
0-255
Activa o desactiva los gráficos.
BEEP
5
0-255
0-255
Hace sonar un efecto.
SOUND
5
0-255
Activa o desactiva el sonido.
Tabla 26- resumen de las acciones