! 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.