! INFSP Edition ****** PNJPUERTAS. DOCUMENTACION. *************************** Una libreria para InformATE complementaria a PNJMovil para la codificación sencilla de puertas utilizables por los PNJs. Escrita por Jævius. **** INTRODUCCION PnjPuertas surge a raiz de la traducción de la libreria puertas de L. Ross Raszewski, mediante la que ya se simplificaba notablemente el manejo de las puertas en los programas Inform. La idea es adaptar el metodo utilizado por dicho autor en su clase "connect" haciendolo compatible con la librería PNJMovil y con los personajes moviles que esta genera. Se consigue así simplificar dos tareas a un tiempo; la programación de las puertas utilizables por el jugador y la correcta implementación de estas en relacion a los "PNJmoviles" que las utilicen en el juego. La libreria está diseñada para el manejo de los siguientes tipos de puertas: * Con llave (y por tanto, dotadas de cerradura) * Sin llave y con cerrojo o pestillo. * Sin llave y sin cerrojo. Los dos primeros tipos pueden definirse de modo que la cerradura o pestillo se encuentre solo a uno de los lados de la puerta (y solo pueda abrirse-cerrarse desde este lado)o a ambos. * Portales del tipo de arcos, dinteles o similar que no tengan puerta propiamente dicha. (No dotandolos del atributo abrible y si del abierto) La libreria en este caso describirá cuando un personaje entra o sale por ellos. **** UTILIZACION DE LA LIBRERIA La utilización de la librería requiere los siguientes pasos: * Incluirla detrás de la inclusión de PNJMovil (dado que utiliza a ésta) < Include "PNJPuertas"; > * Definir las puertas en el modo que analizamos en la sección siguiente derivandolas de la clase PNJPuerta. < PNJPuerta Mipuerta "Mi propia puerta" ...> * En la rutina Inicializar hacer una llamada a IniciarPuertas < IniciarPuertas(); > **** DEFINICION DE UNA PNJPUERTA La definicion de una PNJPuerta se realiza conforme la siguiente estructura básica: PNJpuerta name "nombre" habitacion_uno with name '...', ! la libreria ya define el nombre por defecto 'puerta', por lo ! que aquí debe definirse el especifico o característico de la ! puerta en cuestion. Debe tenerse en cuenta que a un mismo lugar ! pueden dar varias puertas y el nombre servirá para poder ! diferenciarlas al referirse el jugador a ellas. Si creamos ! una puerta roja, el nombre definido en nuestro codigo deberá ! ser 'roja'. description"...", ... !aqui pueden incluirse todas aquellas !propiedades que se estime oportuno... si_abierta, si_cerrada, !reaccionar_antes, etc e_to habitacion_uno, w_to habitacion_dos, !Esta es la gran ventaja de la libreria DOORS original. La !creación de una puerta en dos localidades se simplifica indicando !la direccion hacia la que enlaza y la habitación con la que !lo hace. Debe recordarse tambien la libreria PNJMovil exige !que las puertas se incluyan dentro de una de las dos !habitaciones a las que conduce, y no olvidar definir las !conexiones de dirección de ambas localidades para enlazarlas !con la puerta. lado_cierre habitacion_uno, !mediante esta propiedad se situa desde donde será accesible !la cerradura o pestillo. En caso de no definirse la !propiedad, será accesible desde ambos lados de la puerta. with_key millave, !si se quiere que tenga llave. La libreria incluye en este !caso en la descripcion la cerradura en el lado visible en su !caso. has... !la libreria define las puertas con los atributos puerta y !estatico, por lo que no deberán volverse a definir. !Podrán utilizarse ahora: *openable.- existe la "puerta fisica" para abrirse o cerrarse *lockable.- si existe llave la libreria describe la cerradura, y si no el pestillo en el lado adecuado. *otras para definir su situación inicial, como como open, locked, etc. Además la librería define la propiedad BLOQUEADA, que por defecto tendrá el valor false, para permitir, si se activa a true que la puerta no pueda abrirse ni cerrarse por nadie hasta que no se desbloquee. (La idea es permitir atascar las puertas con un objeto por otro lado, o con silicona en la cerradura, o cualquier otra perrada que se os ocurra!!!) **** COMPORTAMIENTO DE LOS PNJMOVILES Las puertas definidas tal como hemos visto son funcionales tanto para el jugador como para los pnjs, pero todavía es necesario determinar que pasa con la puerta despues que un PNJ la atraviese (si puede). Para ello he definido una nueva propiedad en estos para controlar su comportamiento posible. Esta propiedad podrá incluirse en los PNJMovil opcionalmente, ya que por defecto la libreria, en caso de no definirse considera su comportamiento aleatorio. La propiedad es TRAS_ABRIR, y podrá contener alguna de las siguientes constantes: *DEJA_ABIERTO.- tras atravesar una puerta la deja abierta aunque pudiera cerrarla. *DEJA_CERRADO.- la cierra, pero sin echar la llave o el pestillo aunque pueda. *DEJA_CERRADO_CON.- la cierra y con llave (si la tiene en sus posesiones) o con pestillo (si la puerta lo tiene y es accesible desde donde está el pnj) *DEJA_ALEATORIO.- por defecto si no se define, cualquiera de los tres anteriores. (Debe tenerse en cuenta que esta propiedad puede cambiarse durante el juego, para obtener distintos comportamientos depende del momento. Por eso existe tambien como constante.) *NO_PUEDE_ABRIR.- definida para pnjs como animales u otros bichos que no tengan porqué acceder a abrir o cerrar una puerta. **** CODIGO DE EJEMPLO. Para más claridad, incluiremos el codigo de definición de una puerta de ejemplo. Partiremos de dos habitaciones, un pasillo y una mazmorra comunicadas en dirección Norte-Sur y separadas por una puerta de hierro. La puerta solo se puede abrir desde el pasillo ( está feo que las celdas se abran desde dentro!) y por supuesto con la correspondiente llave. Include "PNJMovil"; Include "PNJPuertas"; .... lugar pasillo "El pasillo" with description "Humedo y sombrio, solo el ritmico repiqueteo de las goteras rompe el silencio de este pasillo que conduce a las celdas de la prisión.", s_to puerta_hierro; lugar celda "La celda" with description "¡Pobre del condenado a pudrirse entre estos muros! La fria piedra de las paredes de la mazmorra, la oscuridad que reina en su interior sin un hueco por el que ver la luz del día te hace estremecerte de pensar lo que sería estar encerrado en su interior.", n_to puerta_hierro; PNJPuerta -> puerta_hierro "puerta de hierro" with name 'hierro', description "Una solida puerta de hierro, mugrosa y oxidada por el tiempo y la humedad de estas estancias.", n_to pasillo, s_to celda, lado_cierre pasillo, with_key llave_celda, has female openable ~open lockable; Object llave_celda "llave de la celda" with name 'llave', description "Pequeña y de hierro como la puerta a la que abre.", has female; ... [Initialise; IniciarPuertas(); ... ]; (Creo que el ejemplo me ha salido algo tetrico.) **** Espero que la librería sea de utilidad y que contribuya a que pronto tengamos muchas aventuras en informATE (¡Aunque no usen esta librería!) En cuanto a los términos legales, esta librería es de dominio público, por lo que podeis utilizarla, entera o por trocitos como os apetezca, agradeciendoos eso sí, que citarais la fuente (o sea a mi !) en futuras modificaciones y que me hagais llegar los comentarios o sugerencias que merezca. Agradecer especialmente el excelente trabajo realizado por Zak McKracken en su traducción al español del Inform y de la libreria PNJMovil a la que intento complementar, sin el cual, evidentemente no estaría yo haciendo estas cosas. *************************