Sunday, February 17, 2019

Mientras tanto, en Plutón...

Seguimos analizando las diferencias en la definición de localizaciones entre la versión primitiva del motor y la actual. Hoy toca el movimiento entre localizaciones... y la muerte.

Por donde he venido, me voy

En la versión anterior cada dirección de movimiento se definía mediante una etiqueta propia, siendo el valor dentro de la misma el identificador de la localización a la que se moverá el personaje si se mueve en esa dirección o 0 si no hay movimiento posible en esa dirección.

    <location>
        ...
        <north>4</north>
        <south>11</south>
        <east>0</east>
        <west>0</west>
        <northeast>0</northeast>
        <northwest>0</northwest>
        <southeast>19</southeast>
        <southwest>0</southwest>
        <enter>2</enter>
        <exit>0</exit>
        <up>0</up>
        <down>0</down>
    </location>


En la versión actual las direcciones de movimiento posibles se definen dentro del array exits, en el que sólo aparecerán las direcciones de movimiento que lleven a una localización.

  {
    "id":1,
    "name":"Granja",
    ...
    "exits":[
      {
        "direction":1,
        "destination":4,
        "description":""
      },
      {
        "direction":2,
        "destination":11,
        "description":""
      },
      {
        "direction":7,
        "destination":19,
        "description":""
      },
      {
        "direction":9,
        "destination":2,
        "description":""
      }
    ],
    ...
  }


Como se puede ver dentro de exits hay una serie de objetos que representan las posibles direcciones de movimiento. El atributo direction contiene el identificador correspondiente a la dirección -definido como un valor constante en las clases de configuración del motor-, el atributo destination contiene el identificador de la localización a la que se moverá el personaje y el atributo description contendrá el texto que se mostrará cuando el jugador ejecute la acción "mirar" en esa dirección cuando me ponga a implementarlo, claro. Sí, en estos artículos vamos a encontrarnos con unas cosas que no están ni siquiera a medio cocer.

En ambos casos si el valor de destination es negativo quiere decir que el personaje morirá al moverse en esa dirección -en La Aventura Original esto ocurre si el jugador se mueve dentro del volcán o en la dirección en la que se encuentran los dos barrancos. Sí, esto no es del todo justo y ese es uno de los motivos por los que quería implementar la descripción de la dirección de movimiento, para dar la opción de avisar al jugador de lo que puede pasar si se mueve en esa dirección-. Aunque esto no es del todo cierto, ya que lo que en un principio estaba pensado para las pantallas de muerte del personaje se ha acabado utilizando también para las pantallas de fin de juego. Ya hablaremos de eso cuando le toque la hora al archivo death_infos.json.

El movimiento no tiene mucho más que explicar. Cuando el jugador ejecuta una instrucción de movimiento -como "norte", "sur" o "bajar"- el parser busca el identificador asociado con esa dirección y busca dentro de exits un objeto con esa dirección en su atributo direction. Si lo encuentra se mueve al personaje a la localización especificada en destination o muestra un mensaje de error predefinido si no existe esa dirección de movimiento en la localización actual.

Mucho más sencillo que lo de las fuentes de iluminación ¿Verdad?

No comments: