TECNICAS AVANZADAS DE PROGRAMACION DE AVENTURAS

Por... Javier San José

A partir de este capítulo, y en adelante, iré exponiendo, paso a paso un sistema que aprovecha al máximo las posibilidades del PAW para la creación de una aventura multijugador.

Pero, ¿qué es una aventura multijugador?; pues se trata simplemente de una aventura en la que podemos controlar a dos o más personajes simultáneamente. Las posibilidades son infinitas pero exige un esfuerzo mayor por parte del programador ya que, si una aventura con un sólo personaje jugador es complicada de hacer, una aventura multijugador multiplica proporcionalmente la dificultad.

El sistema propuesto consta de una serie de Procesos. Recomiendo a los que estéis interesados en ir incorporando este sistema a vuestras aventuras que respetéis los números de los procesos que iré dando y que los coloquéis en el mismo orden; esto evitará problemas.

Una serie de conceptos antes de empezar. Utilizaré a cuatro personajes jugadores, número fácilmente modificable, que denominaré genéricamente Guerrero, Enano, Mago y Sacerdotisa. Cada uno vendrá definido por una serie de parámetros:

Además, el Mago, viene definido por otros dos parámetros:

La mayoría de estos parámetros ayudarán a implementar un sistema de combates a base de tiradas de dados. Pero eso más adelante. La tabla siguiente resume los valores para todos los personajes:

+------------------------------------------------------------------+
¦                   Guerrero   ¦   Mago   ¦  Enano  ¦  Sacerdotisa ¦
¦                  Band   val  ¦Band  val ¦Band val ¦ Band    val  ¦
¦-----------------------Ð------+----Ð-----+----Ð----+------Ð-------¦
¦Energía vital   ¦  66  ¦  50  ¦ 68 ¦ 25  ¦ 70 ¦ 60 ¦  72  ¦  35   ¦
Ã----------------Î------+------Î----+-----Î----+----Î------+-------Â
¦Fuerza ataque   ¦  --  ¦   2  ¦ -- ¦  0  ¦ -- ¦  1 ¦  --  ¦   0   ¦
Ã----------------Î------+------Î----+-----Î----+----Î------+-------Â
¦Posición        ¦  67  ¦   9  ¦ 69 ¦  9  ¦ 71 ¦  9 ¦  73  ¦   9   ¦
Ã----------------Î------+------Î----+-----Î----+----Î------+-------Â
¦Raciones        ¦  74  ¦   2  ¦ 76 ¦  0  ¦ 78 ¦  1 ¦  80  ¦   0   ¦
Ã----------------Î------+------Î----+-----Î----+----Î------+-------Â
¦Dinero          ¦  75  ¦   ?  ¦ 77 ¦  ?  ¦ 79 ¦  ? ¦  81  ¦   ?   ¦
Ã----------------Î-------------Î----------Î---------Î--------------Â
¦Loc.obj.llevados¦      1      ¦    3     ¦    5    ¦      7       ¦
Ã----------------Î-------------Î----------Î---------Î--------------Â
¦Loc.obj.puestos ¦      2      ¦    4     ¦    6    ¦      8       ¦
Ã----------------Î-------------Î----------Î---------Î--------------Â
¦Energía mágica  ¦  --  ¦  --  ¦ 88 ¦ 200 ¦ -- ¦ -- ¦  --  ¦  --   ¦
Ã----------------Î------+------Î----+-----Î----+----Î------+-------Â
¦Nivel mágico    ¦  --  ¦  --  ¦ 89 ¦  1  ¦ -- ¦ -- ¦  --  ¦  --   ¦
+-----------------------¤-----------¤----------¤-----------¤-------+

Como se ve las banderas usadas, de momento, son de la 66 a la 81 y las banderas 88 y 89. Las localidades reservadas van de la 1 a la 8. Otra bandera que usaremos será la número 23: número de personaje actual (1=Guerrero, 2=Mago, 3=Enano, 4=Sacerdotisa).

Podemos empezar insertando unas entradas en el Proceso 1 para imprimir mensajes de que el Enano está aquí, el Mago está aquí, etc... para cuando controlemos a un personaje y alguno de los otros esté en nuestra misma localidad. Las entradas a añadir serían:

     _    GUERRERO       NOTEQ     23   1
                         SAME      67   38
                         MES       'El '
                         MES       'Guerrero'
                         MESSAGE   ' está aquí.'
     _    MAGO           NOTEQ     23   2
                         SAME      69   38
                         MES       'El '
                         MES       'Mago'
                         MESSAGE   ' está aquí.'
     ...

Sólo se incluyen, por motivos de espacio, las entradas correspondientes al Guerrero y al Mago; las del Enano y la Sacerdotisa su pueden deducir de estas fácilmente.

Explicaré el funcionamiento de estas entradas. Primero comprobamos que el jugador no está controlando al personajes (NOTEQ 23 1 para el Guerrero, NOTEQ 23 2 para el Mago, etc...). Esto es así para que no se imprima el mensaje 'El Guerrero está aquí.' cuando el jugador esté controlando al Guerrero, por ejemplo.

Luego miramos si el personaje está en la misma localidad que el que controla el jugador, comparando la bandera de posición del personaje con la localidad actual (bandera 38). Así: SAME 67 38 para el Guerrero, SAME 69 38 para el Mago,...

Si se dan estas dos condiciones se imprime un mensaje del tipo 'El ... está aquí.'. (NOTA: en el caso de la Sacerdotisa el mensaje a imprimir sería del tipo 'La ... está aquí.', evidentemente).

Ahora vamos a insertar un proceso que inicialice las banderas de los personajes:

-Proceso 9:

     _    GUERRERO       LET       66   50
                         LET       67   9
                         LET       74   2
     _    MAGO           LET       68   25
                         LET       69   9
                         LET       88   200
                         LET       89   1
     _    ENANO          LET       70   60
                         LET       71   9
                         LET       78   1
     _    SACERDOTISA    LET       72   35
                         LET       73   9

Este proceso inicializa las banderas correspondientes a la energía vital, fuerza de ataque, posición, raciones, dinero, energía mágica y nivel mágico de los personajes. Obsérvese que la localidad de inicio elegida para todos el la número 9.

En Proceso 1 colocaremos una llamada a este proceso en la secuencia de inicialización, de la forma:

  _        *            AT        0
                        (aquí establecer modo pantalla, ABILITY,...)
			ANYKEY
			PROCESS   9
			LET       23   1
			GOTO      9
			DESC

El LET 23 1 hace que le personaje que controlamos de inicio se el Guerrero. Como todos los personajes comienzan en la localidad 9, hacemos un GOTO 9 seguido de un DESC.

De momento esto es todo por ahora. En la próxima entrega veremos cómo cambiar de un personaje a otro dentro del juego.