Mdulo zn.h 2.1 para InformatE 6/7E o 6/10E
(C) El Presi (Enrique D. Bosch) [kifcu@confluencia.net]
Puede distribuirse libremente bajo licencia GNU LGPL

Esto es un mduluo para aventuras conversacionales realizadas con Inform e
InformatE 6/10E o 6/7E, es biplataforma, puede compilarse tanto para la
mquina Z como para Glulx.

La funcin de este mdulo es aadir una extensin a la orden 'z' o 'esperar'
de modo que despus de esta se puede especificar el nmero de turnos que
se quiere que pasen.

Ejemplo: 'z 10' hace que pasen 10 turnos con esa sola orden.

Tal y como funciona dicha orden en el juego "Interestatal 0" de Adam Cadre
(de donde saque la idea).

Por supuesto en cada uno de los turnos que pasan se ejecutan las rutinas
daemon, relojes y cada_turno de los objetos y unas cuantas cosas ms que
hace la librera en cada turno.

zn.h extiende la gramtica de 'z' o 'esperar' para que acepte nmeros como
parmetro (variable uno) y define una nueva accin 'zn' (funcin 'znsub').
Si se especifica 'z' o 'esperar' sin parmetro funciona igual que siempre,
es decir, pasa un solo turno.

Debe incluirse despus de Gramatica.h

A partir de la versin 2.0, a peticin del Clrigo Urbatain, se aade
retraso o pausa entre un turno y el siguiente, de modo que da tiempo a ver
los eventos que se puedan producir en el juego y existe la posibilidad de
detener la espera pulsando cualquier tecla. Es el modo interactivo.

A partir de la versin 2.1 se refresca la barra de estado en cada turno
en el modo interactivo.

En este mdulo se declara el objeto zn_conf que contiene como propiedades
los parmetros de funcionamiento:

zn_conf.tiempo=x       x es un entero que expresa el tiempo de espera en
                       dcimas de segundo entre un turno y el siguiente, por
                       defecto es cero (no hacer pausa), si es mayor que
                       cero, entonces a cada turno se escribir un mensaje
                       indicando que pasa otro instante.  
                       Nota: segn el "Designers Manual" de Inform no todos
                       los intrpretes Z soportan la funcionalidad de espera
                       de tiempo y en algunos el valor se toma como segundos
                       en lugar de dcimas de segundo.


zn_conf.parar=y        y puede ser 'true' o 'false', indica si se debe
                       permitir que al pulsar una tecla se aborte totalmente
                       la accin esperar, y el juego contine justo en el
                       turno en el que se ha quedado, en caso de estar
                       desactivada si se pulsa una tecla solo se aborta la
                       espera de ese turno pasando al siguiente pero no toda
                       la accin de pasar todos los turnos especificados. El
                       valor por defecto es false. Cuando zn_conf.tiempo es
                       cero zn_conf.parar no tiene ningn efecto, con
                       zn_conf.tiempo cero no tiene sentido abortar el paso
                       de turnos que es prcticamente instantneo (excepto
                       cuando se especifican muchos turnos y la mquina no
                       es muy rpida).
                       

zn_conf.no_barra=z     z 'true' o 'false', desactiva la barrita de actividad
                       mostrada cuando zn_conf.tiempo es mayor que cero,
                       esta barrita tiene por objeto, cuando el scroll ha
                       sobrepasado la pantalla, que se muestre la actividad
                       de que est pasando tiempo, de otro modo, parece que
                       el juego est "congelado" porque se sobreponen los
                       mensajes del "Pasa otro instante". Por defecto la
                       barrita est activada (zn_conf.no_barra a false). No
                       tiene ningn efecto cuando zn_conf.tiempo es cero.

zn_conf.max_turnos=a   a es un entero que limita el nmero turnos que se
                       pueden esperar como mximo, hay que tener en cuenta
                       que con un nmero de turnos del orden de 1000 o ms
                       el proceso puede llevar varios segundos o incluso
                       minutos, dependiendo del hardware, del tamao de la
                       aventura y del intrprete. El valor tope impuesto por
                       Inform es 10000, que es el nmero ms alto que
                       devuelve la clasula 'number' de la gramtica, si se
                       pune uno mayor se obtendr siempre 10000 de modo que
                       el lmite real debe ser 9999 y asi, si se obtiene
                       10000 es que se ha introducido 10000 o mayor.


Estos parmetros, por supuesto pueden modificarse en tiempo de ejecucin en
cualquier parte del programa principal.

As mismo en esta versin 2.0 se ha ampliado la gramtica de la accin zn
para que entienda cosas como:

espera 10 turnos
espera un turno
espera trece turnos

zn.h no es autocontenido, es decir, que no depende de ningn otro mdulo,
implementa a bajo nivel todas la rutinas para su funcionamiento, no necesita
el mdulo BajoNivel.h, por ejemplo.

Los mensajes que genera el mdulo estn agrupados y separados de la rutina
de accin, se encuentran en la funcin 'zn_msg' de modo que redefiniendo
esta funcin se pueden personalizar los mensajes.


Identificadores usados en zn.h, para evitar colisiones con otros mdulos o
con el programa principal:

object zn_conf (con las propiedades mencionadas arriba)
zn             (accin)
znsub          (funcin de accin)
zn_true        (funcin)
zn_barrita     (funcin)
zn_msg         (funcin)
ZN_PRESENTE    (constante) [informa de que zn.h est presente (incluido)]

Agradecimientos:

A Zak, por resolver mis innumerables dudas y por supuesto por la tarea
realizada con InformatE. A Clrigo Urbatain y a JSJ por sus buenas
sugerencias y realimentacin. A Adam Cadre y Sirrus, autor y traductor
respectivamente de I-0. Y en general a todos los que estn de alguna manera
en el mundo de las conversacionales.
