TECNICAS DE PROGRAMACION
Los Personajes Seudo Inteligentes (V)
Tal y como quedó definido en su día, en esta ocasión nos atreveremos a perfilar una de las facultades más útiles y efectistas de los PSIs. Estamos hablando de la manipulación de objetos.
De hecho, uno de los detalles más comentados del clásico por excelencia entre las aventuras asistidas por ordenador (El Hobbit, por supuesto) es esa frustrante faceta de Gandalf que le mueve a quitarte un objeto en primera instancia, seguidamente a preguntarte qué es, y ya en el tercer turno, es cuando accede a devolvértelo. Si en medio de esta interesante secuencia (¡que yo mismo siempre he emulado en alguno de mis juegos!) se da el caso de que Gandalf se mueve en alguna dirección válida, se llevará el objeto consigo, con lo cual deberemos recurrir al diálogo para volver a recuperarlo (¡e imagináos, sólo por un momento, lo que ocurre cuando el objeto es la espada luminosa y el lugar el interior de las oscuras cavernas goblins!).
Nuestros lectores más avejentados recordarán que en el número 8 dibujamos una serie de útiles rutinas que permitían a un personaje coger, dejar, ofrecer y aceptar objetos siempre bajo las indicaciones del jugador. Recordarlas aquí de nuevo sería para muchos de vosotros algo reiterativo, y aquellos que no hayan podido disfrutar de aquella suscripción siempre pueden referirse al servicio de números atrasados.
Como casi todo el trabajo está hecho, podemos esforzarnos por escribir la secuencia arriba comentada. Se trata de un aprendizaje ciertamente interesante, pues en el método que emplearemos para representar semejante acción se esconden los rudimentos que en LA AVENTURA ORIGINAL daban vida al Terrible Pirata...
Siempre en Procesos 2:
_ FANTASMA SAME 38 Bandera PSI
LT 5 1
WHATO
EQ 54 254
PUTO (Número de localidad)
MESSAGE "El fantasma te quita _"
COPYFF 54 12
SET 11
LET 5 3
_ FANTASMA EQ 5 2
LT 11 1
SAME 38 Bandera PSI
EQ 12 (Número de localidad)
MESSAGE "El fantasma dice '¿Qué es esto?'"
_ FANTASMA SAME 38 Bandera PSI
EQ 5 1
LT 11 1
EQ 12 (Número de localidad)
MESSAGE "El fantasma te devuelve _"
PUTO 254
_ FANTASMA CLEAR 11
Hmmm... con estas cuatro entradas todo debería funcionar correctamente. Incluso podéis eliminar cualquier condacto del tipo SET 11, LT 11 1 y CLEAR 11 (con lo cual, la última entrada desaparece) si introducís las entradas con un orden inverso, es decir, la tercera como 0, la segunda como primera y ésta como segunda... pero así, para comprender su funcionamiento, lo veréis más claro. ¡Recordad evitar los DONE y otros condactos similares que provoquen salidas de tabla cuando estéis en la 2 ó en la 1!.
Estudiemos ahora sus interioridades. En primer lugar, se comprueba que el fantasma y el jugador están ambos en el mismo lugar (SAME 38 Bandera PSI). Luego se verifica que la secuencia no ha sido ya inicializada (que 5 sea 0; aunque también es válido ZERO 5, que además consume menos bytes) y se procede a activarla, verificando que el objeto a "sustraer" está siendo actualmente llevado por el jugador. Se pone entonces en la localidad que hace las veces de contenedor del PSI y se informa de ello al jugador. Además, se setea la bandera de control 11 y se prevee que la secuencia entera ocupará tres fases (de ahí el valor 3 de la bandera del sistema auto-decrementable 5). Adicionalmente, se habitúa una bandera de trabajo que se activa en previsión de que el contenido de la bandera 54 pueda cambiar en medio de la secuencia.
Luego, se hacen una serie de comprobaciones para verificar que el PSI sigue teniendo en su poder el objeto arrebatado al jugador (pudiera ser que, con el uso de las rutinas explicadas en el CAAD 8, el jugador hubiese decidido recuperar su objeto pidiéndolo oralmente -más o menos, se entiende- al PSI), y el segundo mensaje es impreso.
En tercer lugar, la nueva serie de comprobaciones rutinarias es hecha y el objeto es devuelto al jugador atendiendo a las mismas normas que las usadas para quitárselo. La bandera de control número 11, ya en la última entrada, sigue haciendo sus chequeos para que todo funcione como es esperable.
Ahora bien, si en lugar de preguntar -bastante estúpidamente, por cierto- "¿qué es esto?", nuestro PSI hubiese activado una ruta de movimiento como las descritas en nuestro número 11, ¡tendríamos un PSI incluso más potente y realista que el afamado Big Bag Pirate! (quien simplemente hacía su localidad 0, por así decirlo, y el objeto era colocado en su guarida, PERO NO EXPERIMENTABA NINGUN VIAJE REAL HACIA SU GUARIDA).
Estos son detalles meramente atmosféricos, pero tratándose de una aventura conversacional, ¡estaréis de acuerdo conmigo en que esto es lo más importante!
Si además de todo esto, y luego de que el pérfido y horrorosísimo ladrón hubiese depositado su botín en la guarida, activáis la rutina de movimiento aleatoria también ampliamente documentada en anteriores entregas, ¡el PSI se pondría a recorrer el área de juego hasta que encontrase al jugador de nuevo, momento en el cual le arrebataría otro objeto y vuelta a empezar!
Por cierto, ¿cómo hacer para que el PSI deje sus botines en la guarida...?
En Procesos 2:
_ LADRON EQ (Bandera PSI) (Número localidad guarida)
PROCESS X
Y en Procesos X (X es cualquier número de procesos libre):
DEJAR _ WHATO
EQ 54 (Número localidad)
PUTO 255
MESSAGE "El ladrón deja _"
DONE
DEJAR TODO DOALL (Número de localidad)
DONE
El orden de estas dos entradas no debería ser motivo de problemas, pero para un correctísimo funcionamiento haríais bien en emplazar la entrada DEJAR TODO inmediatamente antes de su precedente (por otro lado, no veo cómo podría hacerse de otro modo).
Si no os gusta que el mensaje "El ladrón deja _" salga con cada objeto que lleva, suprimid el MESSAGE de DEJAR _ e incluid, seguidamente, y después del DOALL en la otra entrada, un MESSAGE "El ladrón deposita su botín en el suelo.".
Pues esto es todo por esta vez, aventureros. En el próximo ejemplar seguiremos atendiendo fielmente el plan de trabajo que creamos juntos en el número 9. Hasta entonces, ¡feliz "adventuring"!
Carlos Sisí