! INFSP Version

Módulo zn.h 2.1 para Inform
(C) El Presi (Enrique D. Bosch) [kifcu@confluencia.net]
Puede distribuirse libremente bajo licencia GNU LGPL

Esto es un móduluo para aventuras conversacionales realizadas con Inform e
InformatE 6/10E o 6/7E, es biplataforma, puede compilarse tanto para la
máquina Z como para Glulx.

La función de este módulo es añadir una extensión a la orden 'z' o 'esperar'
de modo que después de esta se puede especificar el número 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 más que
hace la librería en cada turno.

zn.h extiende la gramática de 'z' o 'esperar' para que acepte números como
parámetro (variable uno) y define una nueva acción 'zn' (función 'znsub').
Si se especifica 'z' o 'esperar' sin parámetro funciona igual que siempre,
es decir, pasa un solo turno.

Debe incluirse después de SpanishG.h

A partir de la versión 2.0, a petición del Clérigo Urbatain, se añade
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 versión 2.1 se refresca la barra de estado en cada turno
en el modo interactivo.

En este módulo se declara el objeto zn_conf que contiene como propiedades
los parámetros de funcionamiento:

zn_conf.tiempo=x       x es un entero que expresa el tiempo de espera en
                       décimas 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: según el "Designers Manual" de Inform no todos
                       los intérpretes Z soportan la funcionalidad de espera
                       de tiempo y en algunos el valor se toma como segundos
                       en lugar de décimas 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 acción esperar, y el juego continúe 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 acción de pasar todos los turnos especificados. El
                       valor por defecto es false. Cuando zn_conf.tiempo es
                       cero zn_conf.parar no tiene ningún efecto, con
                       zn_conf.tiempo cero no tiene sentido abortar el paso
                       de turnos que es prácticamente instantáneo (excepto
                       cuando se especifican muchos turnos y la máquina no
                       es muy rápida).
                       

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 ningún efecto cuando zn_conf.tiempo es cero.

zn_conf.max_turnos=a   a es un entero que limita el número turnos que se
                       pueden esperar como máximo, hay que tener en cuenta
                       que con un número de turnos del orden de 1000 o más
                       el proceso puede llevar varios segundos o incluso
                       minutos, dependiendo del hardware, del tamaño de la
                       aventura y del intérprete. El valor tope impuesto por
                       Inform es 10000, que es el número más alto que
                       devuelve la claúsula 'number' de la gramática, si se
                       pune uno mayor se obtendrá siempre 10000 de modo que
                       el límite real debe ser 9999 y asi, si se obtiene
                       10000 es que se ha introducido 10000 o mayor.


Estos parámetros, por supuesto pueden modificarse en tiempo de ejecución en
cualquier parte del programa principal.

Así mismo en esta versión 2.0 se ha ampliado la gramática de la acción zn
para que entienda cosas como:

espera 10 turnos
espera un turno
espera trece turnos

zn.h es autocontenido, es decir, que no depende de ningún otro módulo,
implementa a bajo nivel todas la rutinas para su funcionamiento, no necesita
el módulo BajoNivel.h, por ejemplo.

Los mensajes que genera el módulo están agrupados y separados de la rutina
de acción, se encuentran en la función 'zn_msg' de modo que redefiniendo
esta función se pueden personalizar los mensajes.


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

object zn_conf (con las propiedades mencionadas arriba)
zn             (acción)
znsub          (función de acción)
zn_true        (función)
zn_barrita     (función)
zn_msg         (función)
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 Clérigo Urbatain y a JSJ por sus buenas
sugerencias y realimentación. A Adam Cadre y Sirrus, autor y traductor
respectivamente de I-0. Y en general a todos los que están de alguna manera
en el mundo de las conversacionales.
