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í