BETA 2
=============================================

Incluido txtpaws 0.9

Incluido mppsdk.dll en el paquete (requerida por WinGlulxe para tocar ficheros MOD)


BETA 1
=============================================


INDIRECCION

La indireccin es una caracterstica de Supergls por la cual un parmetro de un 
condacto, en lugar de tener un valor fijo, pasa a tener el valor del flag que se indica.

La in direccin se indica en Supergls anteponiendo el carcter @ (arroba) al parmetro en cuestin.

Todo esto se ver mejor con un ejemplo: 

Sabemos que 

PLACE 4 12

Coloca el objeto 4 en la localidad 12

Sin embargo, el condacto

PLACE 4 @38

Coloca el objeto 4 en la localidad cuyo numero esta contenido en el flag 38 (lo cual viene a ser en la localidad actual).

Lo que hace Supergls es que cuando se encuentra con una arroba, inmediatamente substituye dicho parmetro por el valor del flag indicado, y despus ejecuta el condacto.

As, si el flag 38 vale 1 al encontrarse con PLACE 4 @38 Supergls substituye @38 por 1, y ejecuta PLACE 4 1, pero si  el flag 38 contiene 12 al encontrrselo Supergls ejecutara PLACE 4 12.

Esto mismo puede utilizarse para cualquier parmetro que deseemos cuyo valor deba ser un numero (ya sea flagno, locno, objno, etc.).

Indirecciones dobles o mas all NO estn permitidas, es decir, no es vlido

PLACE 4 @@10 (Que supuestamente sera colocar el objeto 4 en la localidad cuyo numero esta incluido en el flag cuyo nmero esta en el flag 10)

--------------------------------------------------------------------------------------------------------------

PLUGINS

Superglus tiene la posibilidad de conectar plugins, pudiendo estos plugins ser librerias de uso general o nuevos condactos. En principio no se va a describir aqu como programar nuevos plugins porque requiere conocer el ensamblador de glulx, pero si que debis saber que si se echa de menos cualquier condacto se puede pedir, si es factible yo lo hago,  y aadirlo simplemente con poner un fichero en una carpeta, sin modificar el compilador ni nada.

Para activarlos basta con poner los ficheros .plu en la carpeta pgl (cuidado, no en la carpeta plugin).

-----------------------------------------------------------------------------------------------------------

EL DEBUGGER DE SUPERGLUS

Supergls incluye un condacto adicional llamado DEBUG, que puede tomar un valor de cero o cualquier otro distinto de cero. Si toma el valor de cero el sistema de debug queda desactivado, en caso contrario esta activado. Por defecto esta desactivado.

As, si queremos tener habilitada la posibilidad de debug en una aventura deberemos incluir en cualquier sitio que seguro vaya a ejecutarse el condacto DEBUG 1, y a partir de ah podr accederse al debugger.

Es importante recordar quitar la orden DEBUG 1 de aquellas aventuras que vayan a ser preparadas para distribuirse al publico, para que los jugadores no puedan hacer debug.

Como usar el debugger

Una vez activado el debugger su uso es bastante sencillo, permitiendo ver y cambiar los flags de Supergls. Si desde la lnea de comandos ponemos:

@flag		(substituyendo la palabra flag por un numero de flag)

Supergls nos devolver el valor actual de dicho flag, y no correr turno.

Si ponemos:

@=valor (substituyendo valor por un numero)

Supergls asignar al ltimo flag que hemos consultado dicho valor. Si no se hubiera consultado ningn flag anteriormente se tomar por defecto el flag 0.

As, esta es una secuencia normal en un debug:

>@100
Flag 100 = 0
>@=20
Asignado valor.
>@100
Flag 100 = 20
----------------------------------------------------------------------------------------------------------------
TRANSCRIPT

Se denomina transcript al copiado de una partida a un fichero de texto (es decir, lo mismo que aparece en pantalla, incluidas las rdenes del jugador, es grabado en un fichero). 

       Suele usarse para enviar informes sobre errores en el juego al programador, indicndole el ejemplo de cuando y donde ocurre.
       
       Para activar dicha capacidad Supergls tiene el condacto TRANSCRIPT, que de tener como parmetro 0 deshabilitar el transcript, y de tener cualquier otro valor lo habilitar).
------------------------------------------------------------------------------------------------------       
EL CONDACTO WRITE

WRITE texto

El condacto write se limita a escribir en pantalla el texto que se incluye entre comillas en el cdigo, escribiendo as de manera ms cmoda los mensajes de la aventura. Write soporta todas las secuencias de escape de los mensajes, como todos los textos de Supergls. La nica limitacin es la de incluir el texto en una sola lnea, y entrecomillado.
----------------------------------------------------------------------------------------
SECUENCIAS DE ESCAPE

Se denomina secuencia de escape a un carcter especial que, al ser incluido en un texto en Supergls, es substituido por algo antes de ser escrito. La secuencia de escape por defecto de Supergls, heredada de Paguagls, es el guin bajo o subrayado (_), que es substituido por la descripcin del objeto referenciado por la orden actual.

Adems, Supergls incluye los siguientes:

* * --> Es substituido por el mensaje cuyo nmero est en el flag 11.
* | --> Es substituido por el mensaje del sistema cuyo nmero est en el flag 11.
* # --> Es substituido por la descripcin del objeto cuyo nmero  est en el flag 11.
* @ --> Es substituido por la descripcin de la localidad cuyo nmero est en el flag 11.
* ^ --> en su lugar se ejecuta el proceso correspondiente al valor del flag 11. Esto da una enorme potencia dado que dentro de de dicho proceso podramos perfectamente escribir otras cosas, permitiendo as mensajes complejos montados en tiempo de ejecucion. Por ejemplo podriamos poner Coges ^, y en el proceso correpondiente comprobar si es masculino o femenino para poner el articulo correcto del objeto, o poner descripciones aleatorias del objeto (Coges rapidamente el pez, Coges el pez, Coges el escurridizo pez, Coges el dichoso pez). En fin, multiples posibilidades aun por descubrir
------------------------------------------------------------------------------------------

ATRIBUTOS DE OBJETO

Los objetos en Supergls tienen una serie de valores llamados atributos. Dichos atributos estn numerados del 0 al 63, pueden tener un valor de 0 o de 1 y algunos de ellos tienen un valor prefijado.

Y para que vale un atributo?

Pues la idea de los atributos es precisamente, asignar atributos a los objetos, pudiendo as darles caractersticas especiales.

En concreto los atributos 0, 1 y 2 estn respectivamente asignados a objetos con luz, prenda y contenedor en ese orden. Es decir: si un objeto tiene activado el atributo 0 quiere decir que puede dar luz, si un objeto tiene activado el atributo 1 quiere decir que es una prenda y si tiene el 2 quiere decir que es un contenedor (ntese que por tanto no slo el objeto 0 es una fuente de luz, como en Paguagls). Nada impide que un objeto tenga activados dos o mas atributos (por ejemplo una mochila es una prenda y un contenedor al tiempo, y un casco de minero es una prenda que da luz).

A partir del atributo 3 estn libres para el uso del autor. Por ejemplo podramos usar el atributo 60 para indicar que un objeto se puede doblar, y el 61 para guardar si el objeto esta doblado. As podramos tener por ejemplo lo siguientes objetos:

Una barra de hierro (no se puede doblar)
Un clip (se puede doblar y por defecto esta doblado)
Un folio (se puede doblar y por defecto no esta doblado).

Y luego haramos:

DOBLAR _ 	OZERO @51 60
	         	WRITE No puedes doblar _
		DONE

DOBLAR _	ONOTZERO @51 60
		ONOTZERO @51 61
		WRITE Me temo que _ ya est doblado.
		DONE

DOBLAR _ 	ONOTZERO @51 60
		OZERO @51 61
		WRITE Doblas _.
		OSET @51 61
		DONE

DESDOB _ 	OZERO @51 60
	         	WRITE No puedes desdoblar _
		DONE

DESDOB _	ONOTZERO @51 60
		ONOTZERO @51 61
		WRITE Desdoblas _.
		DONE

DESDOB _ 	ONOTZERO @51 60
		OZERO @51 61
		WRITE Me temo que  _ ya esta desdoblado.
		OSET @51 61
		DONE

Explicacin de los condactos de manejo de atributos:

OZERO objno atrno

Condicin cierta si el objeto referenciado tiene a cero (sin activar) el atributo indicado por atrno. Si el atributo indicado est fuera de rango (0-63) OZERO no se cumple en ningn caso.

ONOTZERO objno atrno

Condicin cierta si el objeto referenciado tiene a uno (activado) el atributo indicado por atrno. Si el atributo indicado est fuera de rango (0-63) ONOTZERO no se cumple en ningn caso.

OSET objno atrno
Activa el atributo indicado en el objeto indicado, independientemente de su valor anterior. Si el nmero de atributo est fuera de rango la orden es ignorada.

OCLEAR objno atrno
Desactiva el atributo indicado en el objeto indicado, independientemente de su valor anterior. Si el nmero de atributo est fuera de rango la orden es ignorada.
Aunque en principio los indicadores 3 en adelante estn libres para el usuario se ha llegado a la convencin de que los indicadores hasta el 31 no deben ser usado ms que por las posibles libreras bases, permitiendo as que existan libreras base con soporte de otros atributos estndar a nivel de librera base. Los atributos 32 a 63 son los que deberis usar en vuestras aventuras. 

En principio usar los atributos 3 a 31 no debe ser un problema, pero es posible que vuestro programa no funcione bien en futuras versiones de la librera base. En caso de extrema necesidad y de que se necesite usar uno de esos atributos por tener ocupados los dems

En la definicion de objetos del fichero .SCE o .TXP se definen los atributos en dos bloques de 32 caracteres 1 o 0. El primero es el atributo 0, el ultimo el 63, as:

/0        CARRIED 1        ANTORCHA   _ 10000000000000000000000000000000 00000000000000000000000000000000

En este ejemplo la antorcha tiene el atributo 0 a 1, y el resto a 0, lo cual quiere decir que es un objeto fuente de luz, que no es prenda y que no es contenedor.

En realidad se podria haber decidido que se pusieran los 64 caracteres juntos, pero se ha partido en dos bloques para mas claridad.
----------------------------------------------------------------------------------------------------------

CONDACTOS ADICIONALES DE LUZ

Supergls incluye dos condactos adicionales para el control de la luz, dada la complejidad que supone dicho control ante la posible presencia de varios objetos fuente de luz.

ISLIGHT

Condicin que se cumple en cualquier caso que haya luz presente, bien porque haya luz en la habitacin (flag 0 = 0), bien porque haya algn objeto fuente de luz presente (objetos con el atributo 0 activado).

ISNOTLIGHT

Condicin que se cumple en caso contrario (flag 0 > 0) y no hay ningun objeto fuente de luz presente.


--------------------------------------------------------------------------------------------------

* CONDACTOS ADICIONALES DE CONEXIONES (plugin exitlib)

SETEXIT dirno locno

Asigna un nuevo valor a determinada conexin. Dirno indica el numero de la direccin correspondiente y locno a la localidad a la que se acceder a partir de ahora en dicha direccin desde la localidad actual. No es necesario que existiera una conexin en determinado sentido para cambiarle el valor, si se hace con una conexin que no exista lo que ocurrir es que existir una nueva salida.

No har nada si el valor de dirno no es vlido.  Si la localidad de destino no existe tampoco hace nada.

	
CLEAREXIT dirno

Borra una conexin determinada, aquella cuyo verbo de direccin tenga el valor dirno. No har nada si el valor de dirno no es vlido.


GETEXIT dirno flagno

Copia en el flag indicado el numero de localidad al que lleva la direccion indicada por dirno, o bien 255 si dicha conexin no existe.

Nota: En principio tanto SETEXIT como CLEAREXIT como GETEXIT trabajan slo con la localidad actual, aunque desde luego es posible engaarlas cambiando el valor del flag 38 antes de ejecutarlas y volviendo despues a dejarlo como estaba. Por ejemplo, si queremos destruir la entrada a una cueva cuando alguien toca un cuerno que produce un alud, pongamos que el verbo ENTRAR es el 6, que la localidad donde tocamos es la 12 y que la que tiene la conexin ENTRAR es la 23:

- TOCAR CUERNO 	AT 12
GOTO 23
CLEAREXIT 6
GOTO 12
WRITE El cuerno provoca un terrible alud del otro lado de la montaa
DONE

EXITS locno mesno

La orden exits es una rden bastante compleja en su preparacin. EXITS genera la lista de salidas de la localidad indicada. Para ello es necesario que se creeen una serie de mensajes en la tabla de mensajes:

El mensaje mesno debe ser un texto similar a "Salidas:", el mesno+1 algo como "No veo salidas" y a partir del mesno+2 los mensajes correspondientes al verbo 0 de direccion, luego el verbo 1, etc. Por ejemplo si el verbo 'norte' es el n 7 en el vocabulario deber ponerse en el mensaje mesno+2+7 el texto "al norte" y si 'subir' es el n 3 debera ponerse en el mensaje mesno+2+3 el texto "arriba". Exits usa los mensajes del sistema 46, 47 y 48 para construir una frase valida del tipo: "Salidas visibles: al norte y arriba."

----------------------------------------------------------------------------------------------

* ONEG

ONEG objno atrno

ONEG es un condacto plugin que se ha aadido como tal dado que se olvid aadirlo como condacto interno, lo que hace es invertir el valor de un atributo dado de un objeto dado. Es decir, si vale 1 lo pone a 0 y viceversa.


-----------------------------------------------------------------------------------------------


* BSET, BCLEAR, BNEG, BZERO y BNOTZERO

Otro grupo de condactos plugin, que manejan los flags a nivel de bit, la sintaxis de todos es 

CONDACTO flagno bitno

BSET activa el bit
BCLEAR lo pone a 0
BNEG lo invierte
BZERO es una condicion que se cumple si el bit esta a 0
BNOTZERO es una condicion que se cumple si el bit esta a 1

En cualquier caso si el n de bit no esta en el rango 0-31 las acciones son ignoradas y las condiciones no se cumplen.

------------------------------------------------------------------------------------------------------

* CARACTERES POR PALABRA

Superglus soporta 10 caracteres por palabra de vocabulario, en lugar de 5. Esto evitar que palabras que empiecen igual no puedan crearse en el vocabulario. Cuidado con aventuras que estn ya hechas para Paguaglus porque lo mismo se ha definido ANTOR en lugar de ANTORCHA y deja de funcionar (por poner un ejemplo).

------------------------------------------------------------------------------------------------------------------------

* En caso de escribir un mensaje no existente mediante indireccion se avisa de ello

------------------------------------------------------------------------------------------------------------------------




