Un PSI consiste principalmente en una colección de mensajes, banderas y entradas en tablas de procesos. Verás que con unas pocas entradas simples se pueden crear efectos sorprendentemente reales.
La creación de un complejo PSI puede tomar mucho más tiempo, pero en general sigue los mismos principios que los que vamos a hacer con los nuestros: un pajarito y un perrito.
El pájaro se pone para complicar el escenario de la siguiente manera: cogerá el billete al principio del juego (normalmente se le daría una localidad no usada como contenedor de los objetos que lleve el pájaro, pero nosotros usaremos la localidad 252, puesto que solamente tenemos un PSI que puede tener un objeto).
De modo que el jugador debe convecner al pajarito para que deje caer el billete. El intentar quitárselo o cogerlo dará el mensaje "No puedo hacer eso", y hará que el pajarito se vaya volando hacia otra parte.
El pajarito también darála paliza volando entre el pabellón de música y una ramita del árbol, y esto lo hará a intervalos regulares. La única manera de convencer al pajarito para que deje caer el billete de autobús es dejar caer el emparedado en la misma localidad.
Lo primero que hay que hacer es ir a la tabla de Objetos Inicialmente En (la tabla I) y cambiar el objeto 4 a no creado, es decir, darle al objeto 4, que es el billete, el valor de 252.
Esto hace que el objeto no exista como objeto, porque lo lleva el pajarito en el pico.
En el vocabulario insertamos también los nombres pajarito o pájaro y perro. Supondremos que el pájaro es 22 y el perro es 21, perro=21, pájaro=22, porque sus valores como palabras serán usados para poner las entradas en el orden correcto en las tablas de procesos.
Después, insertamos los siguientes mensajes. Podemos usar tinta verde (en MODO EXTENDIDO, CAPS SHIFT + 4) para los mensajes, no olvidando volver a poner tinta blanca al final (MODO EXTENDIDO, CAPS SHIFT + 7).
MODO EXTENDIDO + CAPS SHIFT + NUMERO = EL COLOR DE LA TINTA
El pajarito deja caer el billete para coger el emparedado
El pajarito se lleva velozmente el billete
El pajarito me ignora
Un pajarito anda rondando por aquí
El pajarito tiene un billete en su pico
Un prqueño pajarito se posa en la hierba
El pajarito está ahora en la rama del árbol
El pajarito ve al perro y sale pitando
El pajarito se va
El llamar a otro proceso hace que PAW guarde en memoria dónde estaba en el momento de ser llamado, y continuaráa actuando en la misma forma en que lo estaba haciendo. Por ejemplo, si se llamó desde una tabla de Respuestas, PAW tratará de hacer coincidir la Sentencia Lógica actual con cualquier otra entrada. Pero si es llamado desde una tabla de Procesos, sea la 1 o la 2, PAW sencillamente ejecutará cada entrada (ESTO ES MUY IMPORTANTE).
Por otra parte, cuando algo es DONE en el Proceso llamado, PAW volverá a la tabla original y continuará trabajando. Por lo tanto se pueden hacer acciones bastante complejas mediante el uso de los sub-procesos. Los usuarios que sepan algo de programación reconocerá fácilmente que son sencillamente sub-rutinas.
Cuando PAW está en un sub-proceso, es posible que sea llamado para actuar en otro sub-proceso (¿un sub-sub-proceso?), y así se puede continuar con sub-sub-sub hasta un valor de 10.
Es decir, las sub-rutinas pueden ser anidadas hasta un valor de 10. Si se intenta ir más lejos saldrá la frase "Limit Reached", o sea, Límite alcanzado.
En este momento no vamos a usar un sub-proceso muy complicado, solamente uno simple, y lo haremos para tener en cuenta todas las chorraditas del pájaro.
Usando [B] se comienza un nuevo sub-proceso y PAW autom&aacutE;ticamente te localizará el siguiente número libre. De momento deberíamos estar comenzando el proceso 3. Como solamente hay unas pocas entradas en la tabla, usaremos el mismo par de palabras ("_ PAJARO"), aun cuando hay que tener en cuenta que al escribir tu juego debes de usar otras palabras que te recuerden lo que hace cada entrada.
La bandera 11, será una bandera de "trabajo", porque contiene un valor que se usa solamente como comparación.
La bandera 12 llevará el número de la localidad actual del pájaro.
La bandera 5 es una bandera especial, porque si tiene un valor diferente de 0, disminuirá 1 cada vez que PAW ejecute una acción, es decir, cada vez que PAW revise la tabla de Procesos 2. Es lo que se llama una bandera auto-decreciente.
En este caso usaremos la bandera 5 para contar el número de turnos que han pasado en el juego. Un turno del juego es toda una vuelta del circuito grande en el diagrama 4, y de momento, esto pasa cada vez que el jugador teclea una frase.
El pajarito cambiará de localidad cada tres frases, lo que creará una especie de apariencia de acción independiente de lo que teclee el jugador.
Ahoira, vamos a insertar las siguientes entradas (sin los comentarios, como hicimos antes). En cada entrada
tenemos una explicación de su propósito y también explicaremos cada nuevo
condacto que se use:
Primero hay que determinar si el pájaro va a salir pitando. Esto pasará cuando la
bandera 5 tenga el valor 0 (empezará a contar desde 3). Entonces, si el bileete está en
la misma localidad que la del pájaro, será destruido (Puesto que la localidad 252 indica que
el pájaro lo tiene) y si el jugador está en la misma localidad que el pájaro, se le dirá
que el pájaro se ha llevado el billete.
Tienes que darte cuenta de que el pájaro sigue con sus ciclos de movimientos aunque el jugador no lo vea. De hecho, en el mundo de PAW un árbol se cae aunque no haya nadie para verlo. Así de real es.
_ | PAJARO | COPYOF | 4 | 11 | ;Copia la localidad del objeto 4 (el billete) a la bandera 11 |
SAME | 11 | 12 | ;y mira si está en la misma localidad que el pájaro | ||
ZERO | 5 | ;¿Va a volar el pájaro? | |||
DESTROY | 4 | ;El pájaro coge el billete | |||
SAME | 12 | 38 | ;¿Está el pájaro en la misma localidad que el jugador? | ||
MESSAGE | 7 | Díselo al jugador |
COPYOF: Es una acción que debe ser seguida por el número de un objeto y una bandera. Lo
que hace es que copia la localidad actual del objeto que se especifique, en la bandera especifica. La
usamos en esta situación para ver si el billete está en la misma localidad que el
pájaro.
SAME: Es una condición que compara el contenido de dos banderas, y que es favorable
o positiva si ambas son del mismo valor.
DESTROY: Es uan acción que pone un objeto especificado en la localidad 252 (localidad no creada).
Ahora vamos a crear dos posibles movimientos para el pájaro.
Si el pájaro está en el pabellón de música y la bandera 5 ha llegado a 0, entonces hay que mover el pájaro, setear la bandera 5 a tres otra vez y decirle al jugador que el pajaro se ha ido, si está en la misma localidad. Y lo mismo si el pájaro está en la rama.
_ | PAJARO | EQ | 12 | 8 | ;¿Está el pájaro en la rama? |
ZERO | 5 | ;¿Es tiempo de volar? | |||
LET | 12 | 5 | ;Mover el pájaro al pabellón | ||
LET | 5 | 3 | ;Tres frases antes de moverse | ||
AT | 8 | ;¿Está el jugador también aquí? | |||
MESSAGE | 14 | Dile que el pájaro ha volado |
_ | PAJARO | EQ | 12 | 5 | ;¿Está el pájaro en el pabellón? |
ZERO | 5 | ;¿Es tiempo de volar? | |||
LET | 12 | 8 | ;Mover el pájaro a la rama | ||
LET | 5 | 3 | ;Tres frases antes de moverse | ||
AT | 5 | ;¿Está el jugador también aquí? | |||
MESSAGE | 14 | Dile que el pájaro ha volado |
LET: Es una acción que también es seguida por una bandera y un valor. Y pone
ese valor en la bandera.
Ya hemos tenido en cuenta el vuelo del pájaro. Ahora vamos a poner sus llegadas, y si llega
a una localidad donde está el jugador, hay que decírselo.
_ | PAJARO | EQ | 5 | 3 | ;¿Acaba de volar el pájaro |
SAME | 12 | 38 | ¿Está en la localidad del jugador? | ||
AT | 5 | ;¿o en el pabellón de música? | |||
MESSAGE | 11 | ;Ha aterrizado en la hierba |
_ | PAJARO | EQ | 5 | 3 | ;¿Acaba de volar el pájaro |
SAME | 12 | 38 | ¿Está en la localidad del jugador? | ||
AT | 8 | ;¿o en la rama? | |||
MESSAGE | 11 | ;Ha aterrizado en la rama |
_ | PAJARO | EQ | 5 | 3 | |
SAME | 12 | 38 | |||
ISAT | 4 | 252 | ;¿El billete no ha sido creado? | ||
MESSAGE | 10 | ;Tiene el billete en su pico |
Finalmente, si el emparedado está en la misma localidad que el pájaro, el
pájaro dejará el billete para coger el emparedado. Esta entrada no tiene nada
que ver con la bandera 5, así que será buscada cada vez que PAW vaya al Proceso 2.
Por lo tanto, si el juegador deja caer el emparedado después de que el pájaro
haya llegado, la secuencia correcta aun se llevará a cabo.
_ | PAJARO | COPYOF | 2 | 11 | ;emparedado |
SAME | 11 | 12 | ;¿En la misma localidad que el pájaro? | ||
ISAT | 4 | 252 | ;¿Lleva el billete en el pico? | ||
COPYFO | 12 | 4 | ;Empieza a caer el billete | ||
SAME | 12 | 38 | ;¿Está el jugador también por allí? | ||
MESSAGE | 6 | ;Díselo |
Así completamos las rutinas de control del pajarito. Pero necesitamos una entrada
en el Proceso 2 para llamar a todas esas rutinas cada ciclo, así que busquemos en
la tabla 2 y pongamos la entrada que llama a todo el subproceso, es decir, la entrada
"madre".
_ PAJARO PROCESS 3
Ahora debemos asegurarnos de que el pájaro empieza en la localidad correcta y que el jugador sabe que el pájaro está ahí cuando la localidad se describe (o empezará a ver mensajes acerca de un pájaro dando la paliza sin haber tenido ninguna descripción de que existe tal pajaro).
Así que seleccionamos el Proceso 1 (que ya sabemos que se llama después de cada
descripción de localidad) y vamos a correfir la entrada existente con * *
poniéndole un [LET 12 8], lo cual hará que el &pájaro esté en
la rama al principio del juego. La entrada modificada debe de ser:
* | * | AT | 0 | ||
ANYKEY | |||||
LET | 12 | 8 | ;El pájaro está en la rama (localidad 8) | ||
GOTO | 2 | ||||
DESC |
_ | PAJARO | SAME | 12 | 38 | |
MESSAGE | 9 | ||||
ISAT | 4 | 252 | |||
MESSAGE | 10 |
COGER | BILLETE | SAME | 12 | 38 | ;¿Está el pájaro en la misma localidad? |
ISAT | 4 | 252 | ;¿Con el billete en el pico? | ||
CLEAR | 5 | ;Esto lo fuerza a volar | |||
NOTDONE | ;"No puedo hacer eso" |
NOTDONE: Es una acción similar a DONE, pero que engaña a PAW
pensando que no has hecho nada y por lo tanto hace imprimir el mensaje "No puedo hacer
eso".
Y ahora, vamos al momento de la verdad. Hay que probar el juego para ver si el
pájaro vuela del pabellón de música a la rama. Juega un rato para ver si el
pájaro continúa con su existencia vagabunda. Después trata de
dejar caer el emparedado en la misma localidad. Date cuenta de que si no coges el billete
antes de que el pájaro se pire, el pájaro lo cogerá otra vez.
Y menos mal que acabamos con el bendito pájaro. Es complicado, pero te enseñará un montón sobre PAW.
El jugador se puede desembarazar del maldito perro poniéndole la cadena y amarrándola al banco. Además, el jugador puede "hablar" al perro, lo cual le dará otro medio para desembarazarse de él, diciéndole que se SIENTE o que se QUEDE.
Antes de examinar las entradas en las tablas de Procesos y Respuestas., necesitamos
tener el control del perro por medio de las siguientes palabras en el vocabulario
y mensajes en la tabla de mensajes.
Verbos | Nombre | ||
ATAR | 34 | ||
DESATAR | 35 | ||
SENTAR | 36 | ||
QUEDAR | 36 | ||
VEN | 37 | AQUI | 37 |
Mensaje 15No se debe cambiar el color de este mensaje, y el que pongamos una raya baja en él tiene un propósito especial, del cual ya hablaremos más adelante.
El _ cae al suelo al pie del árbol
Los demás mensajes que hablen del perro pueden ser puestos de cualquier otro color, por ejemplo magenta (MODO EXTENDIDO, CAPS SHIFT + 3) no olvidando nunca volver al blanco al final de cada uno de ellos. El color del mensaje le permite al jugador saber exactamente a quién se refiere cada mensaje.
Mensaje 16
El perro me mira con amor
Mensaje 17
El perro está aquí
Mensaje 18
El perro me sigue moviendo la cola
Mensaje 19
El perro va arrastrando la correa
Mensaje 20
El perro está atado al banco con una cadena
Mensaje 21
Confiadamente, el perro me deja ponerle la correa alrededor del cuello
Mensaje 22
He amarrado el perro al banco
Mensaje 23
¿A quién se lo digo?
Mensaje 24
El perro se sienta tranquilo
Mensaje 25
He desatado al perro del banco
La bandera 13 contendrá la localidad actual del perro.
La bandera 14 contendrá varios indicadores:
0 si el perro está libre para andar por ahí 1 si el perro tiene la correa alrededor del cuello 2 si el perro está atado al banco 255 si el perro está sentado muy tranquilo
_ PERRO NOTSAME 12 38 ¿No está el perro donde está el jugador? LT 14 2 ;¿Todavía se puede mover? NOTAT 8 ;¿El jugador no está arriba del árbol? COPYFF 38 13 ;Mueve el perro a la localidad del jugador MESSAGE 18 ;y dile que lo atosigue
LT: Es una condición que es positiva o favorable si la bandera especificada
contiene un valor MENOR QUE el valor especificado. En este caso [LT 14 2] solamente será
positivo o acertado si la bandera 14 tiene un valor menos de 2.
Ahora vamos a la tabla de Procesos 2:
_ PERRO PROCESS 4
La entrada "_ Perro", (si usamos [P] para mirar la tabla), debe estar antes de la entrada del pajarito (si no es así es que has puesto las palabras del vocabulario de una forma diferente a como dijimos). Es para asegurar que el perro se mueva a la nueva localidad del jugador antes de que el pájaro sea comprobado.
Similarmente a como hicimos con el pájaro, se requieren entradas en la tabla de Procesos 1, para
informarle al jugador de que el perro anda por ahí rondando:
_ PERRO SAME 13 38 ;¿El perro está en la misma localidad? MESSAGE 17 ;Díselo al jugador EQ 14 1 ;¿Con la correa? MESSAGE 19 ;Sí diselo al jugador
_ PERRO SAME 13 38 EQ 14 2 ;¿Está el perro amarrado al banco? MESSAGE 20
_ PERRO SAME 13 38 GT 14 2 ;255 es mayor que 2, así que MESSAGE 24 ;Dile al jugador que el perro está sentado
Ahora, para que el perro asuste al pajarito, necesitamos una entrada extra en la tabla de Procesos 3. Pero debe ir delante de la entrada que decide que el pájaro deje caer el billete y después de la entrada que hace que el pájaro vuele. Así nos aseguramos que el pájaro volará con el billete si lo tiene y lo deja si no lo tiene.
Por lo tanto, necesitamos insertar otra entrada antes de la sexta. Usaremos [I _ PAJARO 6] para hacerlo.
_ PAJARO SAME 12 13 ;El pájaro y el perro están en la misma localidad LET 12 8 ;Sólo en el pabellón de música LET 5 3 ;Muévelo a la rama, espera 3 frases AT 5 ;¿Está el jugador en el pabellón de música? MESSAGE 13 ;Dile que el pájaro se ha ido
El último cambio en la tabla de Procesos es insertar un sub-proceso que luego llamaremos desde la tabla de Respuestas para que se haga cargo de hablar al perro. El mecanismo es muy simple. Si el jugador incluye una frase "(" ")" en su sentencia de INPUT, entonces el parser guardará memoria del lugar donde esté y seguirá descifrando la frase entre comillas.
Hay una acción llamada PARSE que instruye a PAW para que decodifique la cadena de palabras que el jugador haya tecleado, haciendo entonces la Sentencia Lógica. Lo lógico es hacer esto en un sub-proceso porque PAW tratará de buscar una similitud entre la nueva Sentencia Lógica y el resto de la frase.
Entonces comencemos una nueva tabla de Proceso (que debe ser la 5) e insertemos las siguientes entradas:
* * PARSE ;Convierte una cadena a SL MESSAGE 16 ;No es una frase válida, así que... DONE ;El perro no te entiende SIENTATE _ ZERO 14 ;¿El perro no está amarrado? SET 14 ;Ahora está sentado quieto MESSAGE 24 ;Díselo al jugador (si está en el mismo lugar que el perro) DONE VEN _ EQ 14 255 ;El perro debe estar sentado CLEAR 14 ;Ahora está normal MESSAGE 18 ;El perro te sigue DONE _ AQUI EQ 14 255 CLEAR 14 MESSAGE 18 DONE _ _ MESSAGE 16 ;Cualquier otra cosa
Recordad que PAW va buscando en toda la tabla de Procesos, y si no encuentra una igual a la que busca caerá en esta última entrada de "_ _".
PARSE: PARSE le permite a PAW continuar buscando condactos si no se encuentra una Sentencia
válida. Hay que tener cuidado aquí, puesto que la actual Sentencia Lógica puede estar
un poco enrevesada (el parser intentará sacar algún significado de todos modos) así que normalmente
se debe insertar algún mensaje como "Parece no entender" o algo similar, y después un DONE
para volver a la acción anterior.
Si se forma una Sentencia válida PAW empezará a buscar las siguientes entradas por una similar, como hacía en la tabla de Respuestas. PARSE debe ser solamente usada en un sub-rpceso que sea llamado desde la tabla de Respuestas, puesto que no tiene ningún significado en otra tabla.
Date cuenta de como las entradas VEN y AQUI se hacen cargo de una cantidad de frases que el jugador puede usar después de que el perro esté sentado, porque ambas tienen, una delante y otra detrás, la palabra comodín, o sea, la raya.
Y por último, la entrada "_ _" coge cualquier sentencia que se haya metido en la cadena y para la cual el perro no tenga ninguna respuesta específica.
Selecciona la tabla de Respuestas, para insertar algunas entradas extras que controlen el habla y el dejar caer
objetos del árbol.
La primera de todas es la entrada que hace que los objetos que se dejen en el árbol caigan al suelo.
Esto debe ir entre la entrada que se hace cargo de poner objetos dentro de la bolsa y la entrada normal de
"DEJAR _". Entonces [I PONER _ 1] nos situará en esa posición. La entrada es:
PONER _ AT 8 ;Que el jugador esté en la rama WHATO ;Ya hablaremos de ello LT 51 255 ;¿Es un objeto válido? EQ 54 254 ;¿Es un objeto que llevas encima? MESSAGE 15 ;Avisa que está al pie del árbol PUTO 7 ;La pone ahí DONE
WHATO: Es una acción que mira el primer nombre de la Sentencia Lógica actual
en la tabla Objeto-Palabra, y la convierte en el número de un objeto. Este número se pone entonces
en la bandera 51. La bandera 51 siempre contiene el número del último objeto que se ha
usado, o el último del que PAW tiene una referencia, y siempre que esté seteada, las banderas
asociadas (números 54 y 57) también se setean.
La bandera 54 lleva la localización actual del objeto. Es conveniente que mires el manual técnico para las banderas 51, 54 y 57.
PUTO: Es una acción que cambia de localidad al objeto últimamente tratado,
hacia la localidad que se especifique. O sea, es una acción que cambia el objeto de que se trate hacia
la nueva localidad especificada.
El Mensaje 15 contiene una raya. Siempre que PAW encuentra una raya en el texto (sea mensaje o sea localidad) la reemplaza con el objeto actual. Es decir, el mensaje se cambia para tener en cuenta el último objeto que se esté usando.
Ahora una entrada relativamente simple para que se haga cargo de: PONER LA CORREA AL PERRO.
PONER CORREA PREP ENCIMA ;Para estar seguros de que el jugador teclea eso NOUN2 PERRO CARRIED 5 ;Que el jugador tenga la correa SAME 13 38 ;Que esté en la misma localidad que el perro LET 14 1 ;Ahora el perro tiene la correa DESTROY 5 ;por lo tanto, el jugador no la puede tener MESSAGE 21 ;Se le dice DONE
Nosotros queremos que el juego entienda ambos, ATAR EL PERRO AL BANCO y ATAR LA CORREA AL BANCO puesto que son la misma cosa. Pero tenemos que correa y perro tienen diferente valor como palabras, así que la entrada ATAR PERRO irá primero en la tabla (puesto que su valor es más bajo que la correa). Por lo tanto, hay que convertir el Nombre en CORREA (55) y permitir que PAW lleve a cabo una entrada que equivalga a ATAR CORREA: Un sistema similar hay que utilizar para DESATAR.
Esto es bastante importante, y lo utilizarás en tus juegos con bastante frecuencia. Hay que poner las entradas:
ATAR PERRO LET 34 55 ;La bandera 34 es el Nombre de la SL ATAR CORREA PREP A NOUN2 BANCO AT 4 ;Donde está el banco SAME 13 38 ;El perro está aquí EQ 14 1 ;Tiene la correa puesta PLUS 14 1 ;Ahora atado al banco MESSAGE 22 ;Se informa al jugador sobre ello DONE ATAR _ NOTDONE ;Para asegurarse de que no pueda DESATAR PERRO LET 34 55 ;La bandera 34 es el nombre de la SL DESATAR CORREA AT 4 ;Donde está el banco EQ 14 2 ;Si ya está el perro atado CLEAR 14 ;La bandera indica que está libre MESSAGE 25 ;Díselo al jugador CREATE 5 ;Hay que volver a crear la correa GET 5 ;Dársela al jugador, cogerla DESATAR _ NOTDONE ;Es para asegurarse de que no pueda desatar otra
GET: Es una acción que si está seguida por un número de objeto, intenta coger
el objeto especificado.
Usamos estas acciones en vez de poner el objeto simplemente en 254, porque puede haber problemas debido al peso
o al demasiado número de objetos que se lleven, y entonces estos problemas deben de producir
información.
Finalmente pondermos las entradas que permitan hablar al perro. Hemos también incluido algunas entradas necesarias
para que se te permita hablar al pájaro, pero que él te ignore.
DECIR PERRO SAME 13 38 ;Que esté aquí PROCESS 5 ;Se le manda a esa tabla para que haga el trabajo DONE DECIR PAJARO SAME 12 38 MESSAGE 8 DONE DECIR _ MESSAGE 23 ;Que pregunte: ¿Quién? DONE
Como prueba final, ahora debes jugar la aventura intentando atar al perro, hablarle y todas esas chorradas. Por ejemplo, cuando estemos en el caminoi cerca del banco del parque, con la correa y el perro, intenta PONER LA CORREA AL PERRO y ATARLO AL BANCO.
Luego para desatarlo digamos:DESATA PERRO
Si estamos arriba del árbol con la bolsa, digamos PON TODO EN LA BOLSA y SUELTALA. BAJA y
MIRA DENTRO DE LA BOLSA.
Para hacer que el perro se siente teclea: DECIR AL PERRO "SIENTATE".
Para hacerle volver: DECIR AL PERRO "VEN AQUI".
¿Funciona?... Malegro.