Es habitual en una aventura encontrarnos con la respuesta "No
puedes ir en esa dirección" o similar. Sin embargo, las aventuras
más profesionales amplian esa información, obteniendo respuestas
del tipo "No puedes ir al este. Las salidas posibles son norte
y sur.". Veamos como podemos hacer eso con el parser NMP.
Comenzaremos creando la rutina de salidas, trabajo que es muy fácil con NMP: Primeramente debemos crearnos una serie de mensajes en la tabla
de mensajes número 1, por este orden:
Bien, supongamos que el primer mensaje (el de "Puedes ir")
es el 100, luego el de "No hay salidas" es el 101 y el del primer
verbo (el 0) es el 102. Pues bien, la entrada:
mostraría las salidas.
Vamos ahora a aprovechar esos mensajes y otras ordenes para lograr nuestro objetivo: Introduzcamos esto en la tabla de respuestas, al final:
Bien, veamos que hace esto: Comenzamos poniendo a cero el flag fAUX1, un flag auxiliar (de uso temporal, útil para varias cosas) que nosotros elijamos, y comprobamos que el verbo tecleado por el jugador es de dirección, es decir, menor que 20. Como el número de verbo de la frase actual está contenido en el flag 18 el LT 18 20 hace esa labor. En caso afirmativo copiamos en nuestro flag auxiliar ese verbo y haremos las operaciones con él (para no modificar en ningún momento el flag 18). Ahora usamos la orden MOVE, que actualiza el valor de un flag (el 1 en este caso, el que guarda la localidad actual) conforme a un verbo de dirección (el contenido en el flag 18, que ahora está en fAUX1, por tanto MOVE 1 @fAUX1). En caso de que la orden MOVE sea capaz de "mover" al jugador en la dirección indicada modifica el flag 1, y pone a 1 el bit 7 del flag auxiliar, por lo que seguidamente compruebo si no ha cambiado, en cuyo caso he de poner el mensaje "No puedes ir al xxxxx". Para ello restauro el valor del flag auxiliar (esto es en realidad innecesario, puesto que el bit 7 ha quedado a 0, por lo que el flag auxiliar no habrá cambiado, pero por claridad del código y para que lo entendáis lo pongo), añado 102 al flag auxiliar, de modo que su valor me corresponda con el número de mensaje correspondiente al verbo de dirección tecleado. Escribo el texto "No puedes ir ", seguido del mensaje correspondiente, y luego un punto. Finalmente acabo la orden con DONE. ¿Qué ocurre en caso de que el MOVE tenga éxito? Pues que se sale de la primera entrada en el BTST0 y pasa a la segunda, donde tras comprobar de nuevo que el verbo es de dirección, y que la orden MOVE tuvo éxito (BTST, esta orden es también redundante si os fijáis un poco en el código) hago un DESC. La orden write está indocumentada en el manual de NMP, debido a que se añadió poco antes de distribuir la última versión. Su sintaxis es WRITE {texto}, y funciona a partir de NMP 5.01. Puede producir y producirá algún problema con el resaltado de sintaxis del editor, debido a que el mismo no estaba preparado para ella (así que no os extrañe). Todo el texto ha de estar en una sola línea del código, aunque nada impide poner:
Así mismo admite secuencias de escape como los mensajes.
Estoy seguro de que a aquellos que aún no la conocéis os
resultará muy cómoda.
Esto es todo, si queréis saber más o queréis colaborar con rutinas, comentarios, mejoras de las mismas rutinas o simplemente queréis preguntar alguna duda podéis contactar conmigo. Necesitamos vuestra colaboración, aunque sea con pequeñas rutinas o truquillos :)
Carlos Sánchez |
[Volver]